1、半同步复制实现的基础是主从复制 因此需要提前有 主从复制环境或主主复制
2、环境:两台机子
master
slave
master配置文件
vim /etc/my.cnf
[client]
user=root
password=123456
[mysqld]
server_id=1
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
log_bin=/usr/local/mysql/logs/master-bin
exprie_logs_days=7
socket=/usr/local/mysql/data/mysql.sock
[mysqld_safe]
log-error=/usr/local/mysql/logs/master.err
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
slave的配置文件:
vim /etc/my.cnf
[client]
user=root
password=123456
[mysqld]
server_id=2
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
log_bin=/usr/local/mysql/logs/master-bin
exprie_logs_days=7
socket=/usr/local/mysql/data/mysql.sock
log_slave_updates
[mysqld_safe]
log-error=/usr/local/mysql/logs/master.err
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
3、半同步复制插件
查看插件
ls /usr/local/mysql/lib/plugin/semi*
/usr/local/mysql/lib/plugin/semisync_master.so
/usr/local/mysql/lib/plugin/semisync_slave.so
在MySQL主库安装半同步插件
mysql>install plugin rpl_semi_sync_master soname ‘semisync_master.so’;
生效方法:
临时:
控制Master是否开启半同步 on启用 off关闭
mysql> set global rpl_semi_sync_master_enabled=on;
设置超时时间
mysql> set global rpl_semi_sync_master_timeout=1000;
永久:
在vim /etc/my.cnf中添加
[mysqld]
rpl_semi_sync_master_enabled=ON
rpl_semi_sync_master_timeout=1000
临时和永久同时配置,则可以不重启数据库
检查主库开启及配置的插件生效方法
mysql> select * from mysql.plugin;
出现semisync_master.so说明OK
mysql> show plugins;
出现rpl_semi_sync_master ACTIVE则说明OK
mysql> show global status like ‘%semi%’;
出现Rpl_semi_sync_master_status ON则说明OK
mysql> show global variables like ‘%semi%’;
出现rpl_semi_sync_master_enabled ON则说明OK
在MySQL从库安装半同步插件
mysql> install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
临时生效方法:
mysql> set global rpl_semi_sync_slave_enabled=on;
永久生效方法:
修改配置my.cnf
[mysqld]
rpl_semi_sync_slave_enabled=ON
两种方法如果同时配置,则可以不重启数据库
如果在一个正在运行的slave上开启半同步复制的功能,那么在配置半同步以后需要重启停止slave的IO线程:
mysql> show slave status\G
确保主从复制时两个Yes
mysql> stop slave io_thread;
mysql> start slave io_thread;
检查从库开启
mysql> show global status like ‘%semi%’;
mysql> show variables like ‘%semi%’;
最后验证