首页 > 代码库 > mysql读写分离

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.gz
mv mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit /usr/local/mysql-proxy
 
 
2、配置mysql-proxy,创建主配置文件
 
cd /usr/local/mysql-proxy
mkdir 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.cnf
 
 
3、修改读写分离配置文件
 
vi /usr/local/mysql-proxy/lua/rw-splitting.lua
if 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
 }
end
 
 
4、启动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
  
 
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一下会,过一小会,数据还是会同步到从库的。
 

 

 
 

 

 

mysql读写分离