Mysql读写分离实验
需要三台服务器
192.168.254.11 Mysql master ---read/write
192.168.254.12 Mysql slave ---read
192.168.254.13 Mysql Proxy
预安装mysql
准备工作
要做读写分离,先做主从同步
在master上
Vi /etc/mysql/my.cnf
如果有注销:
bind-address127.0.0.1
如果没有添加:
Log-bin
Server-id=1
重启mysql服务
/etc/init.d/mysqld restart
登录mysql
Mysql –uroot –p
创建一共享账号
Grant all on *.* to ‘root’@’%’ identified by ‘root113’
查看并记录当前二进制日志状态
Show master status;
在slave上
Vi /etc/mysql/my.cnf
如果有注销:
bind-address127.0.0.1
如果没有添加:
Log-bin
Server-id=10##这个值需要比master大,没有其他的机器使用
重启mysql服务
/etc/init.d/mysqld restart
登录mysql执行同步语句
Msyql –uroot –p
Change master to
Master_host=’192.168.254.11’,
Master_user=’root’,
Master_password=’root113’,
Master_log_file=’mysql-bin.000021’,
Master_log_pos=106;
Start slave
Show slave status\G
Slave_IO_Runningyes
Slave_SQL_Runningyes
创建一个共享账号,这里不需要主要是后面读写分离时用到
Grant all on *.* to ‘root’@’%’ identified by ‘root113’
Quit
如果主数据库有数据:
取消主数据库表锁定
Flush tables with read lock;
查看主数据库状态
Show master status
记录file和positon值
复制主数据库的数据文件/var/lib/mysql到从服务器
取消表锁定
Unlock tables;
到这里mysql主从同步就完成了
可以在master上随便做点操作试试,看slave是否有同步
做读写分离
在proxy主机上
需要软件mysql-proxy,下载地址:
http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/
这里下载源码的安装了几次不成功,emerge也没法安装,只能下在编译好的数据包了
Tar zxvf mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit.tar.gz –C /usr/local
Mv mysql-proxy-0.8.4-linux-glibc2.3-x86-32 mysql-proxy
Export PATH=$PATH:/usr/local/mysql-proxy/bin
Echo “PATH=$PATH:/usr/local/mysql-proxy/bin” >> /etc/profile
启动mysql-proxy
mysql-proxy --daemon --log-level=debug --user=mysql-proxy --keepalive --log-file=/var/log/mysql-proxy.log --plugins="proxy"
--proxy-backend-addresses="192.168.254.11:3306"
--proxy-read-only-backend-addresses="192.168.254.12:3306"
--proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua"
--plugins=admin --admin-username="admin"
--admin-password="admin"
--admin-lua-script="/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua"
这里我们看到已经启动,端口4040(4041是管理端口)
测试
开台测试机器
通过mysql proxy连接
Mysql –uroot –proot113 –h 192.168.254.13 –port=4040
登录管理端口
Mysql –uadmin –padmin –h 192.168.254.13 –port=4041
## 这个用户名密码是mysql-proxy启动时设置的
正常状态
备注:刚开始测试时会遇到下图情况,这个是正常的,主要是默认mysql-proxy做分离的最小值是4个链接,所以测试时没有转到slave机器上
修改方法
vi /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
修改min_idle_connections值和max_idle_connections值
Mysql-proxy启动参数
--help-all :获取全部帮助信息;
--proxy-address=host:port :代理服务监听的地址和端口;
--admin-address=host:port :管理模块监听的地址和端口;
--proxy-backend-addresses=host:port :后端mysql服务器的地址和端口;
--proxy-read-only-backend-addresses=host:port :后端只读mysql服务器的地址和端口;
--proxy-lua-script=file_name :完成mysql代理功能的Lua脚本;
--daemon :以守护进程模式启动mysql-proxy;
--keepalive :在mysql-proxy崩溃时尝试重启之;
--log-file=/path/to/log_file_name :日志文件名称;
--log-level=level :日志级别;
--log-use-syslog :基于syslog记录日志;
--plugins=plugin:在mysql-proxy启动时加载的插件;
--user=user_name :运行mysql-proxy进程的用户;
--defaults-file=/path/to/conf_file_name : 默认使用的配置文件路径;其配置段使用[mysql-proxy]标识;
--proxy-skip-profiling : 禁用profile;
--pid-file=/path/to/pid_file_name :进程文件名;