`
lz1130
  • 浏览: 409403 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

mysql proxy读写分离

阅读更多
操作系统:CentOS 5.3、Mysql 5.1.39

简单原理图:


1、编译安装必备软件:
libevent 1.x or higher (1.3b or later is preferred)
lua 5.1.x or higher
glib2 2.6.0 or higher
pkg-config
libtool 1.5 or higher
MySQL 5.0.x or higher developer files


2、安装
可以直接去官方下载二进制,或源码编译安装。
我用的是编译好的二进制:http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/

tar zxvf mysql-proxy-0.7.2-linux-rhel5-x86-64bit.tar.gz -C /usr/local/web/mysql/
mv /usr/local/web/mysql/mysql-proxy-0.7.2-linux-rhel5-x86-64bit /usr/local/web/mysql/mysql-proxy
vi /etc/profile
加入以下:
export PATH=$PATH:/usr/local/web/mysql/mysql-proxy/sbin/


mysql服务器安装mysql主从备份省略。

3、测试机器
MySQL Proxy 地址:192.168.0.1(代号P)
MySQL 服务器地址:192.168.0.11(Mater)、192.168.0.22(Slave)

4、mysql proxy配置
帮助查看:
mysql-proxy --help-all

帮助信息:
Usage:
  /usr/local/web/mysql/mysql-proxy/libexec/mysql-proxy [OPTION...] - MySQL App Shell

Help Options:
  -?, --help                                          Show help options
  --help-all                                          Show all help options
  --help-admin                                        Show options for the admin-module
  --help-proxy                                        Show options for the proxy-module

admin-module
  --admin-address=<host:port>                         listening address:port of the admin-server (default: :4041)
  --admin-username=<string>                           username to allow to log in (default: root)
  --admin-password=<string>                           password to allow to log in (default: )
  --admin-lua-script=<filename>                       script to execute by the admin plugin

proxy-module
  --proxy-address=<host:port>                         listening address:port of the proxy-server (default: :4040)
  --proxy-read-only-backend-addresses=<host:port>     address:port of the remote slave-server (default: not set)
  --proxy-backend-addresses=<host:port>               address:port of the remote backend-servers (default: 127.0.0.1:3306)
  --proxy-skip-profiling                              disables profiling of queries (default: enabled)
  --proxy-fix-bug-25371                               fix bug #25371 (mysqld > 5.1.12) for older libmysql versions
  --proxy-lua-script=<file>                           filename of the lua script (default: not set)
  --no-proxy                                          don't start the proxy-module (default: enabled)
  --proxy-pool-no-change-user                         don't use CHANGE_USER to reset the connection coming from the pool (default: enabled)

Application Options:
  -V, --version                                       Show version
  --defaults-file=<file>                              configuration file
  --daemon                                            Start in daemon-mode
  --user=<user>                                       Run mysql-proxy as user
  --basedir=<absolute path>                           Base directory to prepend to relative paths in the config
  --pid-file=<file>                                   PID file in case we are started as daemon
  --plugin-dir=<path>                                 path to the plugins
  --plugins=<name>                                    plugins to load
  --log-level=(error|warning|info|message|debug)      log all messages of level ... or higer
  --log-file=<file>                                   log all messages in a file
  --log-use-syslog                                    log all messages to syslog
  --log-backtrace-on-crash                            try to invoke debugger on crash
  --keepalive                                         try to restart the proxy if it crashed
  --max-open-files                                    maximum number of open files (ulimit -n)


proxy启动:
mysql-proxy --proxy-read-only-backend-addresses=192.168.0.22:3306 --proxy-backend-addresses=192.168.0.11:3306  --proxy-lua-script=/usr/local/web/mysql/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --keepalive >> /var/log/mysql-proxy.log &

参数说明:
--proxy-read-only-backend-addresses -- remote slave-server(只读服务器)
--proxy-backend-addresses           -- master-server(写服务器)
--proxy-lua-script                  -- lua script(读写分离脚本)
--keepalive                         -- restart the proxy if it crashed(mysql-proxy宕掉重启)

注意:官方的rw-splitting.lua有bug,很无语~~
我碰到的是:

2009-10-29 22:21:02: (critical) proxy-plugin.c:259: read_query_result() in /usr/local/web/mysql/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua tries to modify the resultset, but hasn't asked to buffer it in proxy.query:append(..., { resultset_is_needed = true }). We ignore the change to the result-set.
2009-10-29 22:21:02: (critical) proxy-plugin.c:1238: proxy.queries:append() in /usr/local/web/mysql/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua can only have one injected query without { resultset_is_needed = true } set. We close the client connection now.

有网友推荐0.7.*下这个rw-splitting.lua不错。
http://bazaar.launchpad.net/~mysql-proxy-developers/mysql-proxy/0.7/annotate/head:/lib/rw-splitting.lua


测试准备:
1、在Master建立一个数据库test,建立一个用户:name密码:123456对该数据库有你要使用的权限。
2、实现Mster和Slave对test数据库的replication(主从备份)。
3、在Slave建立一个与第一步Master同样的帐户密码,并且对test从数据库有你需要的权限。

测试读写分离与结果:

连接mysql proxy
mysql -h192.168.0.1 -P4040 -uname -p123456

注意:默认要开启4个以上连接才能读写分离,不然读写都在Master。
也可以更改rw-splitting.lua脚本中相关参数
min_idle_connections = 4,
max_idle_connections = 8,


测试数据库的表tb
mysql> desc tb;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(11) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)


插入数据
insert into tb(name) value('test');
insert into tb(name) value('hello');


稍等片刻(待数据同步)查看结果
select * from tb;
+----+---------+
| id | name    |
+----+---------+
|  1 | test    |
|  2 | hello   |
+----+---------+
2 rows in set (0.00 sec)


查看进程
在Master和Slave执行show processlist;可以查看读写,同步等的进程情况。可以看到,mysql proxy每次查询都会建立一个长久的连接。

其他
mysql proxy还可以实现连接池的功能。
rw-splitting.lua脚本中相关参数:
                min_idle_connections = 4,
                max_idle_connections = 8,


相关网站:
http://dev.mysql.com/doc/refman/5.1/en/mysql-proxy.html
http://www.infoq.com/cn/news/2007/10/mysqlproxyrwsplitting
  • 大小: 24.3 KB
2
1
分享到:
评论

相关推荐

    mysql配置mysql-proxy读写分离1

    MySQL Proxy 是一个开源工具,它允许你在 MySQL 客户端和服务器之间设置一个代理层,以便实现诸如负载均衡、故障切换、读写分离等高级功能。在这个场景中,我们将讨论如何配置 MySQL Proxy 来实现读写分离,以提高...

    Docker搭建MySQLl基于ShardingSphere-Proxy读写分离(docker-compose)

    docker_compose搭建shardingSphereProxyMysql主从读写分离

    使用mysql-proxy实现mysql读写分离

    ### 使用mysql-proxy实现MySQL读写分离 随着业务规模的不断扩大,数据库系统往往成为整个系统中的瓶颈之一。为了提高系统的响应速度以及数据处理能力,一种常用的技术手段就是采用**读写分离**的方式。读写分离的...

    Ubuntu10下如何搭建MySQL Proxy读写分离探讨

    MySQL Proxy在Ubuntu 10环境下搭建读写分离的实践指南 MySQL Proxy是一个轻量级的程序,它位于MySQL客户端和服务器之间,具有监控、分析甚至修改两者之间通信的能力。其核心特性之一是读写分离,这能有效提高数据库...

    mysql-proxy读写分离.docx

    公司运维手册,mysql-proxy读写分离,废话不多说,上干货!

    Mysql Proxy 实现mysql读写分离.pdf

    MySQL Proxy 实现读写分离 MySQL Proxy 是一个处于 Client 端和 MySQL server 端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和...

    MysqlProxy实现mysql读写分离[整理].pdf

    MySQL Proxy 是一种轻量级的中间件,用于在客户端应用程序和 MySQL 服务器之间提供透明的代理服务,尤其适用于实现数据库的读写分离和负载均衡。它允许你在客户端和服务器之间插入一个可编程的层,通过 Lua 脚本来...

    MYSQL数据库读写分离mysql-proxy 32bit包

    为了解决这个问题,MySQL提供了一个名为`mysql-proxy`的工具,这正是"MYSQL数据库读写分离mysql-proxy 32bit包"的主题。MySQL Proxy是一个轻量级的代理服务器,它可以坐在MySQL服务器和客户端应用程序之间,动态地...

    MySQL Proxy 快速实现读写分离以及负载均衡

    ### MySQL Proxy 快速实现读写分离以及负载均衡 #### 一、概述 在数据库管理领域,MySQL Proxy 是一个开源的代理服务器,它为 MySQL 提供了一层中间件,能够帮助用户实现数据库的读写分离、负载均衡等功能,进而...

    mysql-proxy实现读写分离1

    MySQL Proxy 是一个开源工具,主要用于实现数据库的读写分离,以优化MySQL服务器的负载。在本文中,我们将探讨如何利用MySQL Proxy实现一个简单的读写分离环境,并关注在配置过程中的一些关键点。 首先,读写分离是...

    mysql 读写分离软件

    常见的MySQL读写分离软件有MySQL Proxy、MaxScale、HAProxy、AMQP等。每款软件都有其特点和适用场景,比如MySQL Proxy轻量级但功能相对简单,MaxScale是MySQL公司官方出品,功能强大且易于集成,HAProxy则常用于网络...

    MySQL读写分离架构与实践--mysql-proxy

    MySQL主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy/Amoeba)来提升数据库的并发负载能力 这样的方案来进行部署与实施的

    mysql读写分离配置

    配置文件`mysql-proxy.cnf`用于指定MySQL-Proxy的各种参数,包括连接信息、读写分离策略等。 ```bash cd /usr/local/mysql-proxy mkdir lua mkdir logs cp share/doc/mysql-proxy/rw-splitting.lua ./lua vi...

    MySQL-Proxy快速实现读写分离以及负载均衡

    MySQL Proxy是MySQL数据库系统中的一个轻量级工具,用于实现数据库的读写分离和负载均衡。它作为一个中间代理服务器,接收来自客户端的请求,然后根据配置策略将这些请求转发到合适的MySQL服务器实例上。在上述描述...

    mysql读写分离调度器

    总的来说,MySQL读写分离调度器是提高数据库性能的有效手段,而MySQL Proxy作为开源解决方案,为企业提供了一种灵活且低成本的实施方式。不过,随着技术的发展,企业也应关注并考虑更现代、更完善的数据库解决方案。

    mysql读写分离实现

    ### MySQL读写分离实现 #### 一、MySQL读写分离概述 MySQL的读写分离是一种常用的数据库优化技术,主要用于提高数据库系统的并发处理能力和可用性。它通过将数据查询(读操作)与数据更新(写操作)分布在不同的...

Global site tag (gtag.js) - Google Analytics