本文介绍如何配置GTIDs主从复制与故障自动切换
一、安装mysql-utilities-1.6.5
从MySQL官网下载安装即可
二、配置GTIDs主从
1. 配置文件
服务器:mysql5722_01
[root@mysql5722_01 ~]# cat /etc/my.cnf
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
basedir = /usr/local/mysql
datadir = /data
socket=/tmp/mysql.sock
innodb_file_per_table = ON
server-id = 572201
log-bin=mysql5722_01-bin
port=3306
log-error = /data/mysql5722_01_error.log
## GTID
gtid-mode=on
enforce-gtid-consistency=true
binlog-format=ROW
log-slave-updates=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=0
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
skip_slave_start=1
report-host=192.168.10.193
report-port=3306
服务器:mysql5722_02
[root@mysql5722_02 ~]# cat /etc/my.cnf
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
basedir = /usr/local/mysql
datadir = /data
socket=/tmp/mysql.sock
innodb_file_per_table = ON
server-id = 572202
log-bin=mysql5722_02-bin
port=3306
log-error = /data/mysql5722_02_error.log
## GTID
gtid-mode=on
enforce-gtid-consistency=true
binlog-format=ROW
log-slave-updates=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=0
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
skip_slave_start=1
report-host=192.168.10.194
report-port=3306
2. 配置GTIDs主从
这里使用mysqlreplicate进行快速配置
[root@mysql5722_01 ~]# mysqlreplicate --master=root:[email protected]:3306 --slave=root:[email protected]:3306 --rpl-user=root:123456
WARNING: Using a password on the command line interface can be insecure.
# master on 192.168.10.194: ... connected.
# slave on 192.168.10.193: ... connected.
# Checking for binary logging on master...
# Setting up replication...
# ...done.
3. 检查主从
服务器:mysql5722_01
mysql> show master status;
+-------------------------+----------+--------------+------------------+------------------------------------------------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------------+----------+--------------+------------------+------------------------------------------------------------------------------------+
| mysql5722_01-bin.000003 | 1418 | | | bec93e1d-9c95-11e8-bb3b-000c29e63227:1-5,
fb68c455-91aa-11e8-995c-000c2981f834:1-5 |
+-------------------------+----------+--------------+------------------+------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.10.194
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql5722_02-bin.000005
Read_Master_Log_Pos: 2602
Relay_Log_File: mysql5722_01-relay-bin.000002
Relay_Log_Pos: 1659
Relay_Master_Log_File: mysql5722_02-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 2602
Relay_Log_Space: 1913
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 572202
Master_UUID: bec93e1d-9c95-11e8-bb3b-000c29e63227
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: bec93e1d-9c95-11e8-bb3b-000c29e63227:1-5
Executed_Gtid_Set: bec93e1d-9c95-11e8-bb3b-000c29e63227:1-5,
fb68c455-91aa-11e8-995c-000c2981f834:1-5
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
服务器:mysql5722_02
mysql> show master status;
+-------------------------+----------+--------------+------------------+------------------------------------------------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------------+----------+--------------+------------------+------------------------------------------------------------------------------------+
| mysql5722_02-bin.000005 | 2602 | | | bec93e1d-9c95-11e8-bb3b-000c29e63227:1-5,
fb68c455-91aa-11e8-995c-000c2981f834:1-5 |
+-------------------------+----------+--------------+------------------+------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show slave hosts;
+-----------+----------------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID |
+-----------+----------------+------+-----------+--------------------------------------+
| 572201 | 192.168.10.193 | 3306 | 572202 | fb68c455-91aa-11e8-995c-000c2981f834 |
+-----------+----------------+------+-----------+--------------------------------------+
1 row in set (0.00 sec)
4. 开启主从故障自动切换
[root@mysql5722_02 tmp]# mysqlfailover --master=root:[email protected]:3306 --discover-slaves-login=root:123456 --force
WARNING: Using a password on the command line interface can be insecure.
# Discovering slaves for master at 192.168.10.194:3306
# Discovering slave at 192.168.10.193:3306
# Found slave: 192.168.10.193:3306
# Checking privileges.
MySQL Replication Failover Utility
Failover Mode = auto Next Interval = Thu Oct 11 08:22:20 2018
Master Information
------------------
Binary Log File Position Binlog_Do_DB Binlog_Ignore_DB
mysql5722_02-bin.000 2602
GTID Executed Set
bec93e1d-9c95-11e8-bb3b-000c29e63227:1-5 [...]
Replication Health Status
+-----------------+-------+---------+--------+------------+---------+
| host | port | role | state | gtid_mode | health |
+-----------------+-------+---------+--------+------------+---------+
| 192.168.10.194 | 3306 | MASTER | UP | ON | OK |
| 192.168.10.193 | 3306 | SLAVE | UP | ON | OK |
+-----------------+-------+---------+--------+------------+---------+
5. 模拟故障切换
关闭主:mysql5722_02
[root@mysql5722_02 ~]# service mysql.server stop
Shutting down MySQL............ SUCCESS!
监控输出
Failed to reconnect to the master after 3 attemps.
Failover starting in 'auto' mode...
# Candidate slave 192.168.10.193:3306 will become the new master.
# Checking slaves status (before failover).
# Preparing candidate for failover.
# Creating replication user if it does not exist.
# Stopping slaves.
# Performing STOP on all slaves.
# Switching slaves to new master.
# Disconnecting new master as slave.
# Starting slaves.
# Performing START on all slaves.
# Checking slaves for errors.
# Failover complete.
# Discovering slaves for master at 192.168.10.193:3306
Failover console will restart in 5 seconds.
MySQL Replication Failover Utility
Failover Mode = auto Next Interval = Thu Oct 11 08:28:06 2018
Master Information
------------------
Binary Log File Position Binlog_Do_DB Binlog_Ignore_DB
mysql5722_01-bin.000 1418
GTID Executed Set
bec93e1d-9c95-11e8-bb3b-000c29e63227:1-5 [...]
Replication Health Status
+-----------------+-------+---------+--------+------------+---------+
| host | port | role | state | gtid_mode | health |
+-----------------+-------+---------+--------+------------+---------+
| 192.168.10.193 | 3306 | MASTER | UP | ON | OK |
+-----------------+-------+---------+--------+------------+---------+
6. 重新恢复主从
[root@mysql5722_02 ~]# service mysql.server start
Starting MySQL.. SUCCESS!
[root@mysql5722_02 ~]# mysqlreplicate --master=root:[email protected]:3306 --slave=root:[email protected]:3306 --rpl-user=root:123456
WARNING: Using a password on the command line interface can be insecure.
# master on 192.168.10.193: ... connected.
# slave on 192.168.10.194: ... connected.
# Checking for binary logging on master...
# Setting up replication...
# ...done.
监控输出
# Discovering slaves for master at 192.168.10.193:3306
MySQL Replication Failover Utility
Failover Mode = auto Next Interval = Thu Oct 11 08:32:03 2018
Master Information
------------------
Binary Log File Position Binlog_Do_DB Binlog_Ignore_DB
mysql5722_01-bin.000 1418
GTID Executed Set
bec93e1d-9c95-11e8-bb3b-000c29e63227:1-5 [...]
Replication Health Status
+-----------------+-------+---------+--------+------------+---------+
| host | port | role | state | gtid_mode | health |
+-----------------+-------+---------+--------+------------+---------+
| 192.168.10.193 | 3306 | MASTER | UP | ON | OK |
| 192.168.10.194 | 3306 | SLAVE | UP | ON | OK |
+-----------------+-------+---------+--------+------------+---------+
至此,CentOS 7.2 + MySQL 5.7 GTIDs 主从复制与故障自动切换搭建完毕。