配置mysql5.5主从复制、半同步复制、主主复制

时间:2022-09-14 13:59:12

mysql主服务器 192.168.8.40
mysql从服务器 192.168.8.41

配置mysql5.5主从复制、半同步复制、主主复制

全新配置过程(主和从数据库都没有数据):

   主从复制主服务器设置:

     1.改server-id
     2.启用二进制日志
     # mkdir /data/binlog

     # chown -R mysql.mysql /data/binlog

配置mysql5.5主从复制、半同步复制、主主复制

     3.创建有复制权限的账号
     mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.8.41' IDENTIFIED BY 'replpass2014';
     mysql> FLUSH PRIVILEGES;



  主从复制 从服务器设置:

      1.给server-id

      2.启用中继日志
      # mkdir /data/relaylog/
      # chown -R mysql.mysql /data/relaylog


      vim /etc/my.cnf
      relay-log = /data/relaylog/relay-bin
配置mysql5.5主从复制、半同步复制、主主复制

      重启服务使之生效
      # service mysqld restart
      3.连接主服务器
      mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.40',MASTER_USER='repluser',MASTER_PASSWORD='replpass2014';
      mysql> START SLAVE;
配置mysql5.5主从复制、半同步复制、主主复制


若主服务器运行了一段时间,并且产生了大量的数据

则需要先将主从服务器数据保持一致

      
将主数据库的数据库导出,导入到从服务器中
     # mysqldump --all-databases --flush-logs --master-data=2 --lock-all-tables > /root/all.sql
从服务器上恢复
     # mysql < all.sql
配置mysql5.5主从复制、半同步复制、主主复制

     mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.40',MASTER_USER='repluser',MASTER_PASSWORD='replpass2014',MASTER_LOG_FILE='master-bin.000007',MASTER_LOG_POS=107;


通过从服务器的状态观察

mysql > show slave status;


验证是否一致

通过在主服务器上添加删除、数据查看slave服务器是否一致


限制从服务器只读

      在从服务器上启动read-only=ON
配置mysql5.5主从复制、半同步复制、主主复制

      注意:仅能限制那不具有super权限的用户无法执行写操作


半同步复制



    半同步主服务器设置

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> show global variables like '%semi%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | OFF   |  (是否启动半同步功能) 
| rpl_semi_sync_master_timeout       | 10000 |  (连接从节点的超时时间)
| rpl_semi_sync_master_trace_level   | 32    |(是否检测半同步从节点上线)
| rpl_semi_sync_master_wait_no_slave | ON    |
+------------------------------------+-------+


mysql> set global rpl_semi_sync_master_enabled=1;
mysql> set global rpl_semi_sync_master_timeout=2000;

配置mysql5.5主从复制、半同步复制、主主复制


半同步从服务器配置

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> set global rpl_semi_sync_slave_enabled=1;
mysql> show global variables like '%semi%';


mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;

配置mysql5.5主从复制、半同步复制、主主复制


在主服务器验证半同步
mysql> show global status like '%semi%';
配置mysql5.5主从复制、半同步复制、主主复制

卸载插件:
uninstall 


一旦某次等待超时,会自动降级为异步


双主复制:

配置mysql5.5主从复制、半同步复制、主主复制

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

mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.%.%' IDEnTIFIED BY 'replpass2014';
mysql> FLUSH PRIVILEGES;


2)、修改配置文件:

# 主服务器A上
[mysqld]
server-id = 10
log-bin = mysql-bin
relay-log = relay-mysql
# 步长
auto-increment-increment = 2
# 起始值
auto-increment-offset = 1
#不要自动启用slave
skip_slave_start
配置mysql5.5主从复制、半同步复制、主主复制

# 主服务器B上
[mysqld]
server-id = 11
log-bin = mysql-bin
relay-log = relay-mysql
# 步长
auto-increment-increment = 2
# 起始值
auto-increment-offset = 2 
#不要自动启用slave
skip_slave_start
配置mysql5.5主从复制、半同步复制、主主复制

说明:
auto_increment_offset表示自增长字段从那个数开始,他的取值范围是1 .. 65535
auto_increment_increment表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535


创建二进制日志和中继日志目录并授权给mysql用户
# mkdir /data/relaylog
# chown -R mysql.mysql /data/relaylog


# mkdir /data/binlog
# chown -R mysql.mysql /data/binlog


重启两台主服务器的mysql服务
# service mysqld restart


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



serverA|mysql> SHOW MASTER STATUS\G
************************** 1. row ***************************
           File: mysql-bin.000008
       Position: 107
   Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.00 sec)
配置mysql5.5主从复制、半同步复制、主主复制

server2|mysql> SHOW MASTER STATUS\G
mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
           File: mysql-bin.000003
       Position: 107
   Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.00 sec)

配置mysql5.5主从复制、半同步复制、主主复制

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

主服务器A:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.41',MASTER_USER='repluser',MASTER_PASSWORD='replpass2014',MASTER_LOG_FILE='master-bin.000003',MASTER_LOG_POS=107;



主服务器B:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.40',MASTER_USER='repluser',MASTER_PASSWORD='replpass2014',MASTER_LOG_FILE='master-bin.000008',MASTER_LOG_POS=107;


5.启动复制

分别在两台服务器中执行
mysql> start slave;
通过查看slave状态查看设置是否生效
mysql> show slave status\G

配置mysql5.5主从复制、半同步复制、主主复制

6.验证

分别在两个服务器之间创建数据库,表,插入、删除数据,看是否能够同步并按照指定的步长依次增加数据

配置mysql5.5主从复制、半同步复制、主主复制

配置mysql5.5主从复制、半同步复制、主主复制