mysql读写分离

Posted 素还真1990

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
或者,找出来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一下后,过一小会,数据还是会同步到从库的。
 

 

 
 

 

 

以上是关于mysql读写分离的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中间件proxysql实现MySQL读写分离

mysql读写分离

Zend Framework中如何实现MySQL的读写分离 - PHP框架开发

mysql读写分离

MySQL主从复制与读写分离

mysql中间件proxysql实现mysql读写分离