mysql 读写分离实战
使用Mysql-Proxy
Mysql-proxy配置
-
下载并解压
wget https://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
-
配置文件 vim /etc/mysql-proxy.cnf 并保存
[mysql-proxy] #这个必须加 user=root #mysql用户 admin-username=root admin-password=密码 #代理 #ip: proxy安装的机器, 默认4040端口 proxy-address=192.168.0.237:4040 #写库,配master proxy-backend-addresses=192.168.0.237:3306 #读库,配slave proxy-read-only-backend-addresses=192.168.0.60:3306,192.168.0.236:3306 #使用自带lua脚本 mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua, 配置解压目录 proxy-lua-script=/opt/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua #日志文件 log-file=/var/log/mysql-proxy.log log-level=info #进程运行方式 daemon=true keepalive=true
-
配置读写权限
chmod 660 /etc/mysql-proxy.cnf
-
修改lua脚本参数
vim mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua -- connection pool if not proxy.global.config.rwsplit then proxy.global.config.rwsplit = { min_idle_connections = 4, max_idle_connections = 8, is_debug = false } end # 把 min_idle_connections配置成1, 为了方便测试效果, 即达到1个连接就读写分离
-
启动
# mysql-proxy bin目录下 ./mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
-
测试, 使用客户端连接代理
Tips:
- Insert 会走主库
- select会查从库
- 停止从库的slave, insert 后 查不到
- 通过sql语句有时能查到最新数据, 说明主库既可以写也可以读