summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/suite/multi_source/multi_source_slave_alias_replica.result157
-rw-r--r--mysql-test/suite/multi_source/multi_source_slave_alias_replica.test80
-rw-r--r--mysql-test/suite/rpl/r/rpl_slave_alias_replica.result56
-rw-r--r--mysql-test/suite/rpl/t/rpl_slave_alias_replica.test96
-rw-r--r--sql/lex.h3
5 files changed, 392 insertions, 0 deletions
diff --git a/mysql-test/suite/multi_source/multi_source_slave_alias_replica.result b/mysql-test/suite/multi_source/multi_source_slave_alias_replica.result
new file mode 100644
index 00000000000..de38313401d
--- /dev/null
+++ b/mysql-test/suite/multi_source/multi_source_slave_alias_replica.result
@@ -0,0 +1,157 @@
+connect slave,127.0.0.1,root,,,$SERVER_MYPORT_3;
+connect master1,127.0.0.1,root,,,$SERVER_MYPORT_1;
+connect master2,127.0.0.1,root,,,$SERVER_MYPORT_2;
+connection slave;
+CHANGE MASTER 'slave1' TO MASTER_PORT=MYPORT_1, MASTER_HOST='127.0.0.1', MASTER_USER='root';
+CHANGE MASTER 'slave2' TO MASTER_PORT=MYPORT_2, MASTER_HOST='127.0.0.1', MASTER_USER='root';
+START REPLICA 'slave1';
+SET default_master_connection = 'slave1';
+include/wait_for_slave_to_start.inc
+SET default_master_connection = 'slave2';
+"Command: START ALL SLAVES --> START ALL REPLICAS"
+START ALL REPLICAS;
+Warnings:
+Note 1937 SLAVE 'slave2' started
+include/wait_for_slave_to_start.inc
+SET default_master_connection = '';
+connection master1;
+connection slave;
+connection master2;
+connection slave;
+"Command: SHOW ALL STAVES STATUS --> SHOW ALL REPLICAS STATUS"
+SHOW ALL REPLICAS STATUS;
+Connection_name slave1
+Slave_SQL_State Slave has read all relay log; waiting for the slave I/O thread to update it
+Slave_IO_State Waiting for master to send event
+Master_Host 127.0.0.1
+Master_User root
+Master_Port MYPORT_1
+Connect_Retry 60
+Master_Log_File master-bin.000001
+Read_Master_Log_Pos <read_master_log_pos>
+Relay_Log_File mysqld-relay-bin-slave1.000002
+Relay_Log_Pos <relay_log_pos>
+Relay_Master_Log_File master-bin.000001
+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 <read_master_log_pos>
+Relay_Log_Space <relay_log_space1>
+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_SSL_Crl
+Master_SSL_Crlpath
+Using_Gtid No
+Gtid_IO_Pos
+Replicate_Do_Domain_Ids
+Replicate_Ignore_Domain_Ids
+Parallel_Mode optimistic
+SQL_Delay 0
+SQL_Remaining_Delay NULL
+Slave_SQL_Running_State Slave has read all relay log; waiting for the slave I/O thread to update it
+Slave_DDL_Groups 0
+Slave_Non_Transactional_Groups 0
+Slave_Transactional_Groups 0
+Retried_transactions 0
+Max_relay_log_size 1073741824
+Executed_log_entries 7
+Slave_received_heartbeats 0
+Slave_heartbeat_period 60.000
+Gtid_Slave_Pos
+Connection_name slave2
+Slave_SQL_State Slave has read all relay log; waiting for the slave I/O thread to update it
+Slave_IO_State Waiting for master to send event
+Master_Host 127.0.0.1
+Master_User root
+Master_Port MYPORT_2
+Connect_Retry 60
+Master_Log_File master-bin.000001
+Read_Master_Log_Pos <read_master_log_pos>
+Relay_Log_File mysqld-relay-bin-slave2.000002
+Relay_Log_Pos <relay_log_pos>
+Relay_Master_Log_File master-bin.000001
+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 <read_master_log_pos>
+Relay_Log_Space <relay_log_space1>
+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 2
+Master_SSL_Crl
+Master_SSL_Crlpath
+Using_Gtid No
+Gtid_IO_Pos
+Replicate_Do_Domain_Ids
+Replicate_Ignore_Domain_Ids
+Parallel_Mode optimistic
+SQL_Delay 0
+SQL_Remaining_Delay NULL
+Slave_SQL_Running_State Slave has read all relay log; waiting for the slave I/O thread to update it
+Slave_DDL_Groups 0
+Slave_Non_Transactional_Groups 0
+Slave_Transactional_Groups 0
+Retried_transactions 0
+Max_relay_log_size 1073741824
+Executed_log_entries 7
+Slave_received_heartbeats 0
+Slave_heartbeat_period 60.000
+Gtid_Slave_Pos
+"Command: STOP ALL SLAVES --> STOP ALL REPLICAS"
+STOP ALL REPLICAS;
+Warnings:
+Note 1938 SLAVE 'slave2' stopped
+Note 1938 SLAVE 'slave1' stopped
+include/reset_master_slave.inc
+disconnect slave;
+connection master1;
+include/reset_master_slave.inc
+disconnect master1;
+connection master2;
+include/reset_master_slave.inc
+disconnect master2;
diff --git a/mysql-test/suite/multi_source/multi_source_slave_alias_replica.test b/mysql-test/suite/multi_source/multi_source_slave_alias_replica.test
new file mode 100644
index 00000000000..409718dd4e7
--- /dev/null
+++ b/mysql-test/suite/multi_source/multi_source_slave_alias_replica.test
@@ -0,0 +1,80 @@
+# ==== Purpose ====
+#
+# Test verifies that SQL statements which use keyword 'REPLICA' a synonym for
+# 'SLAVE' work as expected.
+#
+# ==== Implementation ====
+#
+# List of commands being verified are
+#
+# START ALL REPLICAS
+# STOP ALL REPLICAS
+# SHOW ALL REPLICAS STATUS
+#
+# ==== References ====
+#
+# MDEV-20601: Make REPLICA a synonym for SLAVE in SQL statements
+#
+
+--source include/not_embedded.inc
+--source include/binlog_start_pos.inc
+--let $rpl_server_count= 0
+
+--connect (slave,127.0.0.1,root,,,$SERVER_MYPORT_3)
+--connect (master1,127.0.0.1,root,,,$SERVER_MYPORT_1)
+--connect (master2,127.0.0.1,root,,,$SERVER_MYPORT_2)
+
+--connection slave
+--replace_result $SERVER_MYPORT_1 MYPORT_1
+eval CHANGE MASTER 'slave1' TO MASTER_PORT=$SERVER_MYPORT_1, MASTER_HOST='127.0.0.1', MASTER_USER='root';
+--replace_result $SERVER_MYPORT_2 MYPORT_2
+eval CHANGE MASTER 'slave2' TO MASTER_PORT=$SERVER_MYPORT_2, MASTER_HOST='127.0.0.1', MASTER_USER='root';
+START REPLICA 'slave1';
+SET default_master_connection = 'slave1';
+--source include/wait_for_slave_to_start.inc
+SET default_master_connection = 'slave2';
+--echo "Command: START ALL SLAVES --> START ALL REPLICAS"
+START ALL REPLICAS;
+
+--source include/wait_for_slave_to_start.inc
+SET default_master_connection = '';
+
+# Ensure that all data is in the relay log
+--connection master1
+--save_master_pos
+--connection slave
+--sync_with_master 0,'slave1'
+--connection master2
+--save_master_pos
+--connection slave
+--sync_with_master 0,'slave2'
+
+--echo "Command: SHOW ALL STAVES STATUS --> SHOW ALL REPLICAS STATUS"
+let $show_statement = SHOW ALL REPLICAS STATUS;
+let $field = Executed_log_entries;
+let $condition = = 7;
+let $wait_for_all = 1;
+--source include/wait_show_condition.inc
+
+let read_master_log_pos=`select $binlog_start_pos + 73`;
+let relay_log_pos=`select 2*$binlog_start_pos + 117`;
+let relay_log_space1=`select 3*$binlog_start_pos + 178`;
+let relay_log_space2=`select 3*$binlog_start_pos + 178`;
+--replace_result $SERVER_MYPORT_1 MYPORT_1 $SERVER_MYPORT_2 MYPORT_2 $read_master_log_pos <read_master_log_pos> $relay_log_pos <relay_log_pos> $relay_log_space1 <relay_log_space1> $relay_log_space2 <relay_log_space2>
+--query_vertical SHOW ALL REPLICAS STATUS
+
+--echo "Command: STOP ALL SLAVES --> STOP ALL REPLICAS"
+STOP ALL REPLICAS;
+
+#
+# clean up
+#
+
+--source include/reset_master_slave.inc
+--disconnect slave
+--connection master1
+--source include/reset_master_slave.inc
+--disconnect master1
+--connection master2
+--source include/reset_master_slave.inc
+--disconnect master2
diff --git a/mysql-test/suite/rpl/r/rpl_slave_alias_replica.result b/mysql-test/suite/rpl/r/rpl_slave_alias_replica.result
new file mode 100644
index 00000000000..8262cf8212a
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_slave_alias_replica.result
@@ -0,0 +1,56 @@
+include/master-slave.inc
+[connection master]
+"Command: STOP SLAVE --> STOP REPLICA"
+connection slave;
+STOP REPLICA;
+include/wait_for_slave_io_to_stop.inc
+include/wait_for_slave_sql_to_stop.inc
+connection master;
+CREATE USER 'repl_user';
+"Privilege: SLAVE --> REPLICA"
+GRANT REPLICATION REPLICA on *.* TO repl_user;
+FLUSH PRIVILEGES;
+connection slave;
+"SHOW SLAVE STATUS --> SHOW REPLICA STATUS"
+CHANGE MASTER TO MASTER_USER= 'repl_user';
+"Command: START SLAVE --> START REPLICA"
+START REPLICA;
+include/wait_for_slave_io_to_start.inc
+include/wait_for_slave_sql_to_start.inc
+connection master;
+"Command: SHOW SLAVE HOSTS --> SHOW REPLICA HOSTS"
+SHOW REPLICA HOSTS;
+Server_id Host Port Master_id
+2 127.0.0.1 SLAVE_PORT 1
+DROP USER 'repl_user';
+connection slave;
+"Command: SHOW SLAVE IO/SQL THREAD --> SHOW REPLICA IO/SQL THREAD"
+STOP REPLICA IO_THREAD;
+STOP REPLICA SQL_THREAD;
+include/wait_for_slave_io_to_stop.inc
+include/wait_for_slave_sql_to_stop.inc
+"Command: RESET SLAVE ALL --> RESET REPLICA ALL"
+RESET REPLICA ALL;
+connection master;
+RESET MASTER;
+CREATE TABLE t(f INT) ENGINE=INNODB;
+INSERT INTO t VALUES (10);
+DROP TABLE t;
+connection slave;
+CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_PORT=MASTER_PORT,MASTER_USER='root';
+"Command: START SLAVE UNTIL --> START REPLICA UNTIL"
+START REPLICA UNTIL MASTER_LOG_FILE='MASTER_LOG_FILE', MASTER_LOG_POS=MASTER_POS;
+include/wait_for_slave_sql_to_stop.inc
+include/stop_slave_io.inc
+SELECT * FROM t;
+f
+10
+include/check_slave_param.inc [Exec_Master_Log_Pos]
+"MASTER_USE_GTID=SLAVE_POS --> MASTER_USE_GTID=REPLICA_POS"
+CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT, MASTER_USE_GTID=REPLICA_POS;
+include/start_slave.inc
+connection master;
+CREATE TABLE t2 (f INT PRIMARY KEY) ENGINE=INNODB;
+INSERT INTO t2 VALUES (10);
+DROP TABLE t2;
+include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_slave_alias_replica.test b/mysql-test/suite/rpl/t/rpl_slave_alias_replica.test
new file mode 100644
index 00000000000..8f2cd1a4eb3
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_slave_alias_replica.test
@@ -0,0 +1,96 @@
+# ==== Purpose ====
+#
+# Test verifies that SQL statements which use keyword 'REPLICA' a synonym for
+# 'SLAVE' work as expected.
+#
+# ==== Implementation ====
+#
+# List of commands being verified are
+# On Master: SHOW REPLICA HOSTS
+# : Privilege "REPLICA"
+#
+# On Slave: START REPLICA
+# START REPLICA UNTIL
+# STOP REPLICA
+# SHOW REPLICA STATUS
+# RESET REPLICA ALL
+# REPLICA_POS
+#
+# ==== References ====
+#
+# MDEV-20601: Make REPLICA a synonym for SLAVE in SQL statements
+#
+
+--source include/have_innodb.inc
+--source include/master-slave.inc
+
+--echo "Command: STOP SLAVE --> STOP REPLICA"
+--connection slave
+STOP REPLICA;
+--source include/wait_for_slave_io_to_stop.inc
+--source include/wait_for_slave_sql_to_stop.inc
+
+--connection master
+CREATE USER 'repl_user';
+--echo "Privilege: SLAVE --> REPLICA"
+GRANT REPLICATION REPLICA on *.* TO repl_user;
+FLUSH PRIVILEGES;
+
+--connection slave
+--echo "SHOW SLAVE STATUS --> SHOW REPLICA STATUS"
+--let $master_user= query_get_value(SHOW REPLICA STATUS, Master_User, 1)
+CHANGE MASTER TO MASTER_USER= 'repl_user';
+--echo "Command: START SLAVE --> START REPLICA"
+START REPLICA;
+--source include/wait_for_slave_io_to_start.inc
+--source include/wait_for_slave_sql_to_start.inc
+
+--connection master
+--echo "Command: SHOW SLAVE HOSTS --> SHOW REPLICA HOSTS"
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+SHOW REPLICA HOSTS;
+DROP USER 'repl_user';
+--sync_slave_with_master
+
+--echo "Command: SHOW SLAVE IO/SQL THREAD --> SHOW REPLICA IO/SQL THREAD"
+STOP REPLICA IO_THREAD;
+STOP REPLICA SQL_THREAD;
+--source include/wait_for_slave_io_to_stop.inc
+--source include/wait_for_slave_sql_to_stop.inc
+--echo "Command: RESET SLAVE ALL --> RESET REPLICA ALL"
+RESET REPLICA ALL;
+
+--connection master
+RESET MASTER;
+CREATE TABLE t(f INT) ENGINE=INNODB;
+INSERT INTO t VALUES (10);
+let $master_log_file= query_get_value(SHOW MASTER STATUS, File, 1);
+let $master_pos= query_get_value(SHOW MASTER STATUS, Position, 1);
+DROP TABLE t;
+
+--connection slave
+--replace_result $MASTER_MYPORT MASTER_PORT
+eval CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_PORT=$MASTER_MYPORT,MASTER_USER='$master_user';
+--echo "Command: START SLAVE UNTIL --> START REPLICA UNTIL"
+--replace_result $master_log_file MASTER_LOG_FILE $master_pos MASTER_POS
+--eval START REPLICA UNTIL MASTER_LOG_FILE='$master_log_file', MASTER_LOG_POS=$master_pos
+--source include/wait_for_slave_sql_to_stop.inc
+--source include/stop_slave_io.inc
+
+SELECT * FROM t;
+--let $slave_param= Exec_Master_Log_Pos
+--let $slave_param_value= $master_pos
+--source include/check_slave_param.inc
+
+--replace_result $MASTER_MYPORT MASTER_PORT
+--echo "MASTER_USE_GTID=SLAVE_POS --> MASTER_USE_GTID=REPLICA_POS"
+--replace_result $MASTER_MYPORT MASTER_PORT
+--eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $MASTER_MYPORT, MASTER_USE_GTID=REPLICA_POS
+--source include/start_slave.inc
+
+--connection master
+CREATE TABLE t2 (f INT PRIMARY KEY) ENGINE=INNODB;
+INSERT INTO t2 VALUES (10);
+DROP TABLE t2;
+
+--source include/rpl_end.inc
diff --git a/sql/lex.h b/sql/lex.h
index f3fc1513369..1cb7ad5d4c8 100644
--- a/sql/lex.h
+++ b/sql/lex.h
@@ -520,6 +520,9 @@ static SYMBOL symbols[] = {
{ "REPAIR", SYM(REPAIR)},
{ "REPEATABLE", SYM(REPEATABLE_SYM)},
{ "REPLACE", SYM(REPLACE)},
+ { "REPLICA", SYM(SLAVE)},
+ { "REPLICAS", SYM(SLAVES)},
+ { "REPLICA_POS", SYM(SLAVE_POS_SYM)},
{ "REPLICATION", SYM(REPLICATION)},
{ "REPEAT", SYM(REPEAT_SYM)},
{ "REQUIRE", SYM(REQUIRE_SYM)},