mysql复制
半同步复制
主库
1.select @@have_dynamic_loading;
半同步复制通过使用插件来实现,插件安装成功后,通过使用与其相关的系统变量来控制它。使用半同步复制,需要满足下面的条件:
MySQL 5.5或以上版本;
MySQL服务器支持动态加载插件的能力,可通过have_dynamic_loading来判断;
复制必须已经工作;
不能配置多个复制通道,半同步复制只与默认的复制通道兼容;
这样表示成功
2.安装对应的插件
install plugin rpl_semi_sync_master soname ‘semisync_master.so’;
执行show plugins;
出现了你安装的插件表示成功
- show variables like ‘%semi%’;查看你安装的插件属性
在执行set global rpl_semi_sync_master_enabled=1;就可开启半同步复制了
从库
从库也是一样
1.检查插件
show plugins
2.安装插件
install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
3.修改插件属性
show variables like ‘%semi%’;
set global rpl_semi_sync_slave_enabled=1;
4.重启slave
stop slave
start slave
5.最后可以修改主库,查看从库是否根据主库变化
并行复制
从库
1.修改配置文件
vim /etc/my.cnf
添加这几条数据
注意:你可以通过show variables like的形式查找配置文件里的响应配置信息进行修改,但是会出现权限不够,或者重启启动systemctl restart mysqld的之后会还原成原来的形式,所以用上述方法进行修改
2.重启systemctl restart mysqld
执行
show variables like ‘%slave%’;
show variables like ‘%relay_log%’;
查看是否修改成功
3.修改主库,查看从库是否改变
MySQL读写分离实战
1.下载压缩包mysql-proxy-0.8.5-linux-el6-x86-64bit.tar
链接:https://pan.baidu.com/s/1cB4OCws1BRHAwneK3vc2RA
提取码:b6rx
2.解压压缩包到/var/lib上面: tar -xvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar
进入到/var/lib
cp my.cnf mysql-proxy.cnf
把mysql-proxy.cnf里面都清空,按照下面的格式写上
user=root --使用者
admin-username=root —当前运行mysql主从用户名
admin-password=245354 —当前运行mysql主从用户密码
proxy-address=192.168.125.130:4040 —从库服务器地址
proxy-backend-addresses=192.168.125.155:3306 —主库服务器地址
proxy-read-only-backend-addresses=192.168.125.129:3306 —代理服务器地址
proxy-lua-script=/var/lib/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua —执行的文件
log-file=/var/log/mysql-proxy.log —输出的日志
log-level=debug —debug形式
daemon=true --守护进程方式运行代理
keepalive=true —遇到问题尝试重启
3.修改运行条件vim /var/lib/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua
箭头指的是最小连接数为1
最大连接数为8
的时候才能运行
4.运行proxy
cd /var/lib/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit/bin
./mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
5.在可以远程操作
端口号为上面配置的端口号4040
地址是代理的地址也就是proxy-read-only-backend-addresses=192.168.125.129:3306 —代理服务器地址
6.杀死代理mysql服务器可用
killall mysql-proxy
双主单写
其实就是两个master主库可以互为对方的slave和master
1.在master上面添加下面的数据,其中开启relay_log中继log,根据中继log执行事务写入本数据库。
sync_binlog:每次与磁盘同步一次
auto_increment_offset=1
auto_increment_increment=2
这两句是主键id从1开始,每次增加2,防止下一个主库增加数据是产生id冲突
2.重启mysql,systemctl restart mysqld
mysql -uroot -p123456
这个是对方库执行show master status;后根据下面图片对应
change master to master_host=‘192.168.125.133’,master_port=3306,master_user=‘root’,master_password=‘245354’,master_log_file=‘mysql-bin.000004’,master_log_pos=154;
start slave;
show slave status\G:查看是否成功
另一个master也是这么操作
注意问题:
1.ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
出现这个问题可以执行
reset slave;
master_host=‘192.168.125.133’,master_port=3306,master_user=‘root’,master_password=‘245354’,master_log_file=‘mysql-bin.000004’,master_log_pos=154;
start slave;
即可
原因是之前有过slave执行的备份实例,删除疾苦
slave reset执行候做了这样几件事:
1、删除slave_master_info ,slave_relay_log_info两个表中数据;
2、删除所有relay log文件,并重新创建新的relay log文件;
3、不会改变gtid_executed 或者 gtid_purged的值