半同步复制开启方法
1)安装(主库)
#登录数据库[root@db01 ~]# mysql -uroot -poldboy123#查看是否有动态支持
mysql> show global variables like 'have_dynamic_loading';+----------------------+-------+| Variable_name | Value |+----------------------+-------+| have_dynamic_loading | YES |+----------------------+-------+
1 row in set(0.00 sec)#安装自带插件[root@db01 plugin]# pwd/application/mysql/lib/plugin
#查看,主库装master, 从库装slave[root@db01 plugin]# ll
total 1992
-rwxr-xr-x 1 mysql mysql 515552 Oct 31 00:19 semisync_master.so
-rwxr-xr-x 1 mysql mysql 276280 Oct 31 00:19 semisync_slave.so
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME'semisync_master.so';
Query OK, 0 rows affected (0.02 sec)#启动插件
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;#设置超时
mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000;#修改配置文件[root@db01 ~]# vim /etc/my.cnf#在[mysqld]标签下添加如下内容(不用重启库)[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
检查安装:
mysql> show variables like'rpl%';
mysql> show global status like 'rpl_semi%';
2)安装(从库)
#登录数据库[root@mysql-db02 ~]# mysql -uroot -poldboy123#安装slave半同步插件
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME'semisync_slave.so';#启动插件
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;#重启io线程使其生效
mysql> stop slave io_thread;
mysql> start slave io_thread;#编辑配置文件(不需要重启数据库)[root@mysql-db02 ~]# vim /etc/my.cnf#在[mysqld]标签下添加如下内容[mysqld]
rpl_semi_sync_slave_enabled =1
注:相关参数说明
rpl_semi_sync_master_timeout=milliseconds
设置此参数值(ms),为了防止半同步复制在没有收到确认的情况下发生堵塞,如果Master在超时之前没有收到任何确认,将恢复到正常的异步复制,并继续执行没有半同步的复制操作。
rpl_semi_sync_master_wait_no_slave={ON|OFF}
如果一个事务被提交,但Master没有任何Slave的连接,这时不可能将事务发送到其它地方保护起来。默认情况下,Master会在时间限制范围内继续等待Slave的连接,并确认该事务已经被正确的写到磁盘上。
可以使用此参数选项关闭这种行为,在这种情况下,如果没有Slave连接,Master就会恢复到异步复制。
测试复制过滤:
第一次测试:
1)主库:
[root@db02 ~]# mysql -uroot -p123 -S /data/3308/mysql.sock
mysql> use world
mysql> create table t1(id int);
2)从库查看结果:
[root@db02 ~]# mysql -uroot -p123 -S /data/3307/mysql.sock
mysql> use world
mysql> show tables;
第二次测试:
1)主库:
[root@db02 ~]# mysql -uroot -p123 -S /data/3308/mysql.sock
mysql> use test
mysql> create table tb1(id int);
2)从库查看结果:
[root@db02 ~]# mysql -uroot -p123 -S /data/3307/mysql.sock
mysql> use test
mysql> show tables;