您的位置:首页 > 数据库 > MySQL

mysql-proxy实现mysql主从库读写分离

2015-12-19 20:26 746 查看
mysql的主从架构模型可以用来进行备份、故障迁移、或者读写分离来分担负载。

 采用读写分离时,在程序中通过封装数据库访问层可以实现写操作连接主库,读操作连接从库。但是当从库较多时,程序中对多个从库做切换比较麻烦。

mysql官方为我们提供了mysql-proxy这个代理组件,对于读写的sql操作,选择连接主库还是从库由mysql-proxy帮助我们完成,对于开发人员是透明的,与连接一个mysql没有差异。但是mysql-proxy也会成为单点,可以通过lvs+keepalive的高可用方案解决。mysql-proxy的配置比较简单:

mysql主从两台机器已同步:
主:192.168.142.143
从:192.168.142.144
mysql-proxy:192.168.142.137
client:192.168.142.150

安装mysql-proxy
wget http://downloads.mysql.com/archives/get/file/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz 解压


新建/etc/mysql-proxy.cnf配置文件
[mysql-proxy]
admin-username = root              #mysql-proxy 用户名
admin-password = toor   #mysql-proxy 密码
daemon = true   #以守护进程方式执行
keepalive = true   #保持连接(启动进程会有2个,一号进程用来监视二号进行,如果二号进程死掉自动重建
proxy-backend-addresses = 192.168.142.143:3306             #mysql主服务器ip端口
proxy-read-only-backend-addresses = 192.168.142.144:3306   #mysql从服务器ip端口
proxy-lua-script = /root/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua  #读写分离脚本(mysql-proxy自带)
admin-lua-script = /root/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/admin-sql.lua     #admin脚本(mysql-proxy自带)
log-file = /var/log/mysql-proxy.log
log-level = debug


为达到测试效果,修改admin-sql.lua脚本以下两行:
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, #默认为4,修改为1,用于指定最小连接为1时即执行读写分离
max_idle_connections = 1, #默认为8,修改为1

is_debug = false
}
end


启动mysql-proxy
mysql-proxy --defaults-file=/etc/mysql-proxy.cnf


测试
在客户机上访问mysql-proxy, 启动2个终端连接,

mysql -uroot -ptoor -h192.168.142.137 -P4040  (注意mysq-proxy默认端口为4040)

此时有两个连接到mysql-proxy的连接

当连接数大于min_idle_connections时会执行读写分离。

执行读、写操作,根据主从mysql的日志发现写时只会mysql-proxy只会连接mysql主库,读时连接mysql从库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: