After MySQL5.7 GTID embodiment are basically a copy, with respect to number and position binlog manner, the failover time reduce the number of manual switching operation
GTID, global transaction identitifiers, global transaction-based replication by server_uuid: transaction_id composition, server_uuid generated database startup process, in the /data/auto.cnf
Replication process: GTID when the master transaction commits, the recorded binlog; binlog then transmitted to the master of relaylog slave, slave read GTID gtid_next generating system parameter; GTID check whether the slave transactions and further applications binlog (5.7 is located in gtid_executed system tables, so do not open log_slave_updates parameters to do the re-recording to record the binlog relaylog, pressure reduction slave)
The following actions:
Are arranged from the first master gtid_mode, enforce_gtid_consistency parameters, wherein the library prepared more months log_slave_updates = 1
[root@localhost /usr/local/mysql/data]$ cat /etc/my.cnf [mysqld] datadir=/usr/local/mysql/data log_bin=mysql-bin server_id=1 gtid_mode=on enforce_gtid_consistency=on [root@localhost /usr/local/mysql/data]$
mysql> show variables like '%gtid%'; +----------------------------------+-----------+ | Variable_name | Value | +----------------------------------+-----------+ | binlog_gtid_simple_recovery | ON | | enforce_gtid_consistency | ON | | gtid_executed_compression_period | 1000 | | gtid_mode | ON | | gtid_next | AUTOMATIC | | gtid_owned | | | gtid_purged | | | session_track_gtids | OFF | +----------------------------------+-----------+ 8 rows in set (0.00 sec) mysql>
Then before removing asynchronous replication configuration, reconfiguration information to slave the master library
mysql> show variables like '%log_slave_updates%'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | log_slave_updates | ON | +-------------------+-------+ 1 row in set (0.00 sec) mysql> stop slave; Query OK, 0 rows affected (0.01 sec) mysql> reset slave all; Query OK, 0 rows affected (0.02 sec) mysql> change master to -> master_host='192.0.1.10', -> master_user='scott', -> master_password='tiger', -> master_port=3306, -> master_auto_position=1; Query OK, 0 rows affected, 2 warnings (0.02 sec) mysql> start slave; Query OK, 0 rows affected (0.00 sec) mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.0.1.10 Master_User: scott Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 573 Relay_Log_File: localhost-relay-bin.000002 Relay_Log_Pos: 786 Relay_Master_Log_File: mysql-bin.000004 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: 573 Relay_Log_Space: 997 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: 1 Master_UUID: 531fa6d1-627f-11e9-8dc7-000c297887a1 Master_Info_File: /data/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: 531fa6d1-627f-11e9-8dc7-000c297887a1:1-2 Executed_Gtid_Set: 531fa6d1-627f-11e9-8dc7-000c297887a1:1-2 Auto_Position: 1 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec) mysql>
Test, ok, and you can see the state of the main library
mysql> show master status; +------------------+----------+--------------+------------------+------------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+------------------------------------------+ | mysql-bin.000004 | 573 | | | 531fa6d1-627f-11e9-8dc7-000c297887a1:1-2 | +------------------+----------+--------------+------------------+------------------------------------------+ 1 row in set (0.00 sec) mysql>
The slave in log_slave_updates turned off, you can see mysql.gtid_executed table records the information it has been performed gtid
mysql> select * from mysql.gtid_executed; +--------------------------------------+----------------+--------------+ | source_uuid | interval_start | interval_end | +--------------------------------------+----------------+--------------+ | 531fa6d1-627f-11e9-8dc7-000c297887a1 | 1 | 2 | | 531fa6d1-627f-11e9-8dc7-000c297887a1 | 3 | 3 | +--------------------------------------+----------------+--------------+ 2 rows in set (0.00 sec)
Because it is transaction-based, so there will be restrictions: create table select the way in the case of row-based replication will be split into two to create tables and insert data event, these two events will be allocated under certain circumstances GTID cause later insert the same data portion is ignored and error; a transaction table in turn contains both InnoDB MyISAM table contains a plurality of possible cause gtid, or inconsistencies in the master table is generated from gtid stored in a library are copied abnormal engine