MySQL5.6一主多从的半同步复制实例(2)

三、主从模式配置
3.1、配置master节点:
[root@master ~]# cat /etc/my.cnf
[MySQLd]
binlog-format=ROW
log-bin=master-bin
log-slave-updates=true
gtid-mode=on 
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server-id=1
report-port=3306
port=3306
datadir=/mydata/data
socket=/tmp/mysql.sock
report-host=master
rpl_semi_sync_master_enabled=ON

配置参数简要说明:
binlog-format:二进制日志的格式,有row、statement和mixed三种类型;当设置隔离级别为READ-COMMITED必须设置二进制日志格式为ROW,现在MySQL官方认为STATEMENT这个已经不再适合继续使用;mixed类型在默认的事务隔离级别下,可能会导致主从数据不一致;
log-bin: 二进制日志存名,可指定存放路径;
log-slave-updates:slave更新时是否记录到日志中;
gtid-mode:指定GTID的类型,否则就是普通的复制架构;
enforce-gtid-consistency:是否强制GTID的一致性;
master-info-repository和relay-log-info-repository:启用此两项,可用于实现在崩溃时保证二进制及从服务器安全的功能;
binlog-rows-query-log-events:启用之可用于在二进制日志详细记录事件相关的信息,可降低故障排除的复杂度;
server-id:同一个复制拓扑中的所有服务器的id号必须惟一;
report-port:产生复制报告时在哪个端口上提供相关功能;
report-host:产生复制报告时在哪个主机上提供相关功能,一般为自己的主机名;
sync-master-info:启用之可确保服务器崩溃时无信息丢失;
slave-paralles-workers:设定从服务器启动几个SQL复制线程数;0表示关闭多线程复制功能;数字太大也无意义最好与要复制的数据库的数目相同
binlog-checksum:复制时是否校验二进制文件的完整性等相关功能;binlog的校验格式校验算法(CRC32:循环冗余校验码32位);
datadir:数据文件存放路径;
master-verify-checksum:检验主服务器二进制日志的相关功能;
slave-sql-verify-checksum:校验从服务器中继日志的相关功能的;
rpl_semi_sync_master_enabled:是否开启半同步复制;

3.2、配置slave节点

[root@slave1 ~]# cat /etc/my.cnf
[mysqld]
 
binlog-format=ROW
log-slave-updates=true
gtid-mode=on 
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server-id=11
report-port=3306
port=3306
log-bin=mysql-bin.log
datadir=/mydata/data
socket=/tmp/mysql.sock
report-host=slave1
rpl_semi_sync_slave_enabled=ON

[root@slave2 ~]# cat /etc/my.cnf
[mysqld]
 
binlog-format=ROW
log-slave-updates=true
gtid-mode=on 
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server-id=12
report-port=3306
port=3306
log-bin=mysql-bin.log
datadir=/mydata/data
socket=/tmp/mysql.sock
report-host=slave2
rpl_semi_sync_slave_enabled=ON

3.3、创建复制用户
在主库上执行
mysql> GRANT REPLICATION SLAVE ON *.* TOslave@192.168.1.201 IDENTIFIED BY 'passwd';
mysql> GRANT REPLICATION SLAVE ON *.* TOslave@192.168.1.202 IDENTIFIED BY 'passwd';
mysql> FLUSH PRIVILEGES;


3.4、在主从节点上安装相关的插件并启动复制
在主库上执行
master> INSTALL PLUGINrpl_semi_sync_master SONAME 'semisync_master.so';

在从库上执行
slave> INSTALL PLUGINrpl_semi_sync_slave SONAME 'semisync_slave.so';

安装完毕后在两从库上定义到主库的复制连接
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.152',MASTER_USER='slave', MASTER_PASSWORD='passwd', MASTER_AUTO_POSITION=1;
mysql> START SLAVE;
mysql> show global variables like'%gtid%';

MySQL5.6一主多从的半同步复制实例

可以看到主从服务器已经启用gtid功能。
在主库上查看已连接的slave主机
mysql> show slave hosts;
+-----------+--------+------+-----------+--------------------------------------+
| Server_id | Host  | Port | Master_id | Slave_UUID                          |
+-----------+--------+------+-----------+--------------------------------------+
|        11 | slave1 | 3306 |        1 | 9cb0c60a-9676-11e4-9d56-000c2989857d |
|        12 | slave2 | 3306 |        1 | 485767ea-9676-11e4-9d54-005056291b33 |
+-----------+--------+------+-----------+--------------------------------------+
2 rows in set (0.00 sec)

查看slave1的复制状态

MySQL5.6一主多从的半同步复制实例

再去查看slave2的状态
mysql> show slave status\G;

MySQL5.6一主多从的半同步复制实例

可以看到此时两个从库的复制进度是一样的。
3.5、在主库写入数据进行测试

mysql> create database just_for_test;
Query OK, 1 row affected (0.15 sec)
 
mysql> show databases;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| just_for_test      |
| mysql              |
| performance_schema |
| test              |
+--------------------+
5 rows in set (0.01 sec)

在从库上执行查询可以看到
slave1> show databases;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| just_for_test      |
| mysql              |
| performance_schema |
| test              |
+--------------------+
5 rows in set (0.03 sec)
 
slave1> show slave status\G;
*************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.152
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000002
          Read_Master_Log_Pos: 360
              Relay_Log_File: slave1-relay-bin.000005
                Relay_Log_Pos: 572
        Relay_Master_Log_File: master-bin.000002
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
从库2
slave2> show databases;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| just_for_test      |
| mysql              |
| performance_schema |
| test              |
+--------------------+
5 rows in set (0.11 sec)
slave2> show slave status\G;
*************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.152
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000002
          Read_Master_Log_Pos: 360
              Relay_Log_File: slave2-relay-bin.000003
                Relay_Log_Pos: 572
        Relay_Master_Log_File: master-bin.000002
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/abdf3642d90163dbd66b0f1023643708.html