This commit makes replicas crash-safe by default by changing the
Using_Gtid value to be Slave_Pos on a fresh slave start and after
RESET SLAVE is issued. If the primary server does not support GTIDs
(i.e., version < 10), the replica will fall back to Using_Gtid=No on
slave start and after RESET SLAVE.
The following additional informational messages/warnings are added:
1. When Using_Gtid is automatically changed. That is, if RESET
SLAVE reverts Using_Gtid back to Slave_Pos, or Using_Gtid is
inferred to No from a CHANGE MASTER TO given with log coordinates
without MASTER_USE_GTID.
2. If options are ignored in CHANGE MASTER TO. If CHANGE MASTER TO
is given with log coordinates, yet also specifies
MASTER_USE_GTID=Slave_Pos, a warning message is given that the log
coordinate options are ignored.
Additionally, an MTR macro has been added for RESET SLAVE,
reset_slave.inc, which provides modes/options for resetting a slave
in log coordinate or gtid modes. When in log coordinates mode, the
macro will execute CHANGE MASTER TO MASTER_USE_GTID=No after the
RESET SLAVE command. When in GTID mode, an extra parameter,
reset_slave_keep_gtid_state, can be set to reset or preserve the
value of gtid_slave_pos.
Reviewed By:
===========
Andrei Elkin <andrei.elkin@mariadb.com>
Problem:
========
rpl.rpl_slave_alias_replica test fails sporadically on build bot as shown
below.
rpl.rpl_slave_alias_replica 'innodb,stmt' w4 [ fail ]
+++ /usr/local/mariadb-10.5.4-linux-x86_64/mysql-test/suite/rpl/r/
rpl_slave_alias_replica.reject 2020-06-12 09:52:25.191267945 +0000
@@ -22,6 +22,7 @@
SHOW REPLICA HOSTS;
Server_id Host Port Master_id
2 127.0.0.1 SLAVE_PORT 1
+2 127.0.0.1 SLAVE_PORT 1
Analysis:
========
The SHOW REPLICA HOSTS command reports an additional row for the same server
occasionally. This happens because of zombie dump threads on the master.
Error log from master also confirms that "A slave with the same
server_uuid/server_id as this slave has connected to the master". Since SHOW
REPLICA HOSTS goes through the list of dump threads and reports the
corresponding hosts,the same host is reported twice.
Fix:
===
Instead of capturing the SHOW REPLICA HOSTS command in result file use
wait_show_condition.inc. This will ensure that SHOW REPLICA HOSTS command
fetches slave host details.
Fix:
===
Add "REPLICA" as an alias for "SLAVE". All commands which use "SLAVE" keyword
can be used with new alias "REPLICA".
List of commands:
On Master:
=========
SHOW REPLICA HOSTS <--> SHOW SLAVE HOSTS
Privilege "SLAVE" <--> "REPLICA"
On Slave:
=========
START SLAVE <--> START REPLICA
START ALL SLAVES <--> START ALL REPLICAS
START SLAVE UNTIL <--> START REPLICA UNTIL
STOP SLAVE <--> STOP REPLICA
STOP ALL SLAVES <--> STOP ALL REPLICAS
RESET SLAVE <--> RESET REPLICA
RESET SLAVE ALL <--> RESET REPLICA ALL
SLAVE_POS <--> REPLICA_POS