如何设置半同步复制, 

# 在主服务器上做以下配置 mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';   
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;   
mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000; 
 #vim /etc/my.cnf   [mysqld]   rpl_semi_sync_master_enabled=1   rpl_semi_sync_master_timeout=1000 
 
 
    #在从服务器上做以下配置 mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';  
     mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;  
      mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;   
      #vim /etc/my.cnf [mysqld]   rpl_semi_sync_slave_enabled=1


设置半同步步骤:


在Master和Slave的mysql命令行运行如下代码:


# On Master  

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';  

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;  

mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000;  


# On Slave  

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';  

mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;  

mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;  


在Master和Slave的my.cnf中编辑:


# On Master  

[mysqld]  

rpl_semi_sync_master_enabled=1  

rpl_semi_sync_master_timeout=1000 # 1 second  


# On Slave  

[mysqld]  

rpl_semi_sync_slave_enabled=1  



# 也可通过设置全局变量的方式来设置,如下:

set global rpl_semi_sync_master_enabled=1 

# 取消加载插件

mysql> UNINSTALL PLUGIN rpl_semi_sync_master;

==============================================


查看从服务器上的semi_sync是否开启:

mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';


查看主服务器上的semi_sync是否开启,注意clients 变为1 ,证明主从半同步复制连接成功:

mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';



设置主-主复制:

1、在两台服务器上各自建立一个具有复制权限的用户;

2、修改配置文件:

# 主服务器上

[mysqld]

server-id = 10

log-bin = mysql-bin

relay-log = relay-mysql

relay-log-index = relay-mysql.index

auto-increment-increment = 2

auto-increment-offset = 1


# 从服务器上

[mysqld]

server-id = 20

log-bin = mysql-bin

relay-log = relay-mysql

relay-log-index = relay-mysql.index

auto-increment-increment = 2

auto-increment-offset = 2


3、如果此时两台服务器均为新建立,且无其它写入操作,各服务器只需记录当前自己二进制日志文件及事件位置,以之作为另外的服务器复制起始位置即可


server1|mysql> SHOW MASTER STATUS\G

************************** 1. row ***************************

            File: mysql-bin.000001

        Position: 710

    Binlog_Do_DB: 

Binlog_Ignore_DB: 

1 row in set (0.00 sec)


server2|mysql> SHOW MASTER STATUS\G

mysql> SHOW MASTER STATUS\G

*************************** 1. row ***************************

            File: mysql-bin.000003

        Position: 811

    Binlog_Do_DB: 

Binlog_Ignore_DB: 

1 row in set (0.00 sec)


4、各服务器接下来指定对另一台服务器为自己的主服务器即可:

server1|mysql> CHANGE MASTER TO ...,MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=811


server2|mysql> CHANGE MASTER TO ...,MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=710