mysql读写分离
1、安装mysql-proxy
实现读写分离是有lua脚本实现的,现在mysql-proxy里面已经集成,无需再安装
下载:http://dev.mysql.com/downloads/mysql-proxy/
tar zxvf mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit.tar.gzmv mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit /usr/local/mysql-proxy2、配置mysql-proxy,创建主配置文件
cd /usr/local/mysql-proxymkdir lua #创建脚本存放目录mkdir logs #创建日志目录cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本vi /etc/mysql-proxy.cnf #创建配置文件[mysql-proxy] ## 第二次和第三次配置的什么,漏掉这一行列,找很久的错误。user=root #运行mysql-proxy用户admin-username=proxy #主从mysql共有的用户admin-password=123.com #用户的密码proxy-address=192.168.0.204:4040 # 如果不写端口号,默认端口号3306,与Mysql的端口号冲突,所以会报错。*************************!!!!proxy-read-only-backend-addresses=192.168.0.203 #指定后端从slave读取数据proxy-backend-addresses=192.168.0.202 #指定后端主master写入数据proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #指定读写分离配置文件位置admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua #指定管理脚本log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log #日志位置log-level=info #定义log日志级别,由高到低分别有(error|warning|info|message|debug)daemon=true #以守护进程方式运行keepalive=true #mysql-proxy崩溃时,尝试重启保存退出!chmod 660 /etc/mysql-proxy.cnf3、修改读写分离配置文件
vi /usr/local/mysql-proxy/lua/rw-splitting.luaif not proxy.global.config.rwsplit then proxy.global.config.rwsplit = { min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1 max_idle_connections = 1, #默认8,改为1 is_debug = false }end4、启动mysql-proxy
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf## 执行上面的命令行的时候,报错了,原因还是出在配置文件上,仔细核对配置文件
netstat -tupln | grep 4040 #已经启动tcp 0 0 192.168.0.204:4040 0.0.0.0:* LISTEN 1264/mysql-proxy关闭mysql-proxy使用:killall -9 mysql-proxy或者,找出来mysql-proxy的进程号
ps aux|grep mysql-proxy
kill mysql-proxy的进程号
5、测试读写分离
1>.在主服务器创建proxy用户用于mysql-proxy使用,从服务器也会同步这个操作
mysql> grant all on *.* to 'proxy'@'192.168.0.204' identified by '123.com';2>关闭从服务器上的slave
slave stop;
3>.使用客户端连接mysql-proxy
mysql -u proxy -P 4040 -h 192.168.0.0 -p
4>下面的操作均使用mysql-proxy的账号登录数据库进行操作。
mysql> create table user (number INT(10),name VARCHAR(255));mysql> insert into user values(01,'zhangsan');mysql> insert into user values(02,'lisi');5>登录主从服务器,查看:
select * from user
主数据库有数据,从数据库没有数据
6>在从库上打开slave
start slave
过一会执行 select * from user
从库的数据也会慢慢同步过来
参考文献:http://lizhenliang.blog.51cto.com/7876557/1305083
参考文献2:http://www.cnblogs.com/luckcs/articles/2543607.html
========================
主从库的数据有时候不一致,还有待研究
疑问,在测试读写分离的时候,执行slave stop时间久了,一直不slave start是否数据就很难同步了?
slave stop一下后,过一小会,数据还是会同步到从库的。

浙公网安备 33010602011771号