实验环境:
node1:172.25.7.5-----读写
node2:172.25.7.6----只读
node3:172.25.7.7-----mysql代理
真机:172.25.7.250
# 一、为什么要作读写分离
数据库每天都要承担的网站的数据更新,所以大量的读写任务都在一个机器上压力非常大。使用读写分离可以有效的缓解数据库压力。
# 二、实验的配置
## 1 先作node1和node2的基于gtid的主从副复制
1.node1和node2下载mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar解压并安装
2.mysql 安全初始化
systemctl start mysqld #开启服务
cat /var/log/mysqld.log | grep password #查看初始密码
安全初始化:
mysql -uroot -p加原始密码
alter user root@localhost identified by 'Sll123+456';
3.更改node1和node2配置文件/etc/my.conf
node1:
vim /etc/my.cnf
server_id=1
log-bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency=ON
systemctl restart mysqld #重启服务
node2:
node1:
vim /etc/my.cnf
server_id=2
log-bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency=ON
systemctl restart mysqld #重启服务
4.登陆node1数据库创建用户并赋予权限
mysql -uroot -pSll123+456 登陆
grant replication slave on *.* to repl@'172.25.7.%' identified by 'Sll123+666'; #创建用户并且赋予权限
5.登陆node2数据库更改node2mater信息
mysql -uroot -pSll123+456 #登陆
change master to master_host='172.25.7.5',master_user='repl',master_password='Sll123+666',master_auto_position=1; #它的master信息
start slave; #开启slave 模式
show slave status\G;#查看状态
6.测试
在master建立一个数据库,看在slave上是否能看到
## 2 node3配置代理信息
下载mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz并解压
tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local/ #解压
cd /usr/local/
mv mysql-proxy-0.8.5-linux-el6-x86-64bit mysql-proxy #换个短一点的名字
mkdir conf #建立配置文件目录
vim mysql-proxy.conf #编写配置文件
[mysql-proxy]
proxy-address=0.0.0.0:3306 ##mysql-proxy运行的端口
proxy-read-only-backend-addresses=172.25.7.6:3306 ##slave节点:只读
proxy-backend-addresses=172.25.7.5:3306 ##master节点:可读可写
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua ##lua脚本的路径
pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid 进程pid的位置
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log ##日志位置
plugins=proxy
log-level=debug ##定义日志级别
keepalive=true ##mysql-proxy崩溃时尝试重启
daemon=true ##打入后台
vim share/doc/mysql-proxy/rw-splitting.lua #更改最小最大读写分离数量
40 min_idle_connections = 1,
41 max_idle_connections = 2,
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf #启动,第一次会报错
chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf #赋予一个更安全的权限
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf #再次启动
netstat -antlupe #查看端口3306是否开启
yum install lsof -y
lsof -i:306
# 三、测试
node5上创建用户:
真机用刚创建的用户登陆: mysql -h 172.25.7.7 -usun -pSll123+456
node5和node6都可以看到:
这样看不出读写分离的效果,在/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua配置文件里将启动读写分离的最大数量设为2,即超过2个一定启用读写分离。
那就开3个窗口,测试读写分离效果
为了效果,将node6的slave同步功能关闭,真机写入u99新数据
将node6(只读)slave再次 打开,就又可以看到了:
真机客户端也可以看到了: