mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
c4f5326bb7
The problem was that my_hash_sort didn't properly delete end-space characters properly, so strings that should compare identically was seen as different strings. (Space was handled correctly, but not NBSP) This caused duplicate key errors when a heap table was converted to Aria as part of overflow in group by. Fixed by removing all characters that compares as end space when creating a hash. Other things: - Fixed that --sorted_results also works for errors in mysqltest. - Speed up hash by not comparing strings that has different hash. - Speed up many my_hash_sort functions by using registers to calculate hash instead of pointers. This was previously done for some functions, but not for all. - Made a macro of the hash function, to simplify code and to be able to experiment with new hash functions. client/mysqltest.cc: Fixed that --sorted_results also works for error messages. mysql-test/r/ctype_partitions.result: New test to ensure that partitions on hash works mysql-test/suite/multi_source/gtid.result: Updated result mysql-test/suite/multi_source/gtid.test: Test that --sorted_result works for error messages mysql-test/suite/multi_source/gtid_ignore_duplicates.result: Updated result mysql-test/suite/multi_source/gtid_ignore_duplicates.test: Updated result mysql-test/suite/multi_source/load_data.result: Updated result mysql-test/suite/multi_source/load_data.test: Updated result mysql-test/t/ctype_partitions.test: New test to ensure that partitions on hash works storage/heap/hp_write.c: Speed up hash by not comparing strings that has different hash. storage/maria/ma_check.c: Extra debug strings/ctype-bin.c: Use macro for hash function strings/ctype-latin1.c: Use macro for hash function Use registers to calculate hash (speedup) strings/ctype-mb.c: Use macro for hash function Use registers to calculate hash (speedup) strings/ctype-simple.c: Use macro for hash function Use same variable names as in other my_hash_sort functions. Update my_hash_sort_simple() to properly remove end space (patch by Bar) strings/ctype-uca.c: Ignore duplicated space inside strings and end space in my_hash_sort_uca(). This fixed MDEV-6255 Use macro for hash function Use registers to calculate hash (speedup) strings/ctype-ucs2.c: Use macro for hash function Use registers to calculate hash (speedup) strings/ctype-utf8.c: Use macro for hash function Use registers to calculate hash (speedup) strings/strings_def.h: Made a macro of the hash function, to simplify code and to be able to experiment with new hash functions.
150 lines
4.3 KiB
Text
150 lines
4.3 KiB
Text
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';
|
|
set default_master_connection = 'slave1';
|
|
START SLAVE;
|
|
include/wait_for_slave_to_start.inc
|
|
set default_master_connection = 'slave2';
|
|
START SLAVE;
|
|
include/wait_for_slave_to_start.inc
|
|
set default_master_connection = '';
|
|
CHANGE MASTER TO master_port=MYPORT_3, master_host='127.0.0.1', master_user='root';
|
|
start all slaves;
|
|
Warnings:
|
|
Note 1937 SLAVE '' started
|
|
include/wait_for_slave_to_start.inc
|
|
SET GLOBAL gtid_domain_id= 1;
|
|
SET SESSION gtid_domain_id= 1;
|
|
CREATE TABLE t3 (a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=InnoDB;
|
|
CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(10));
|
|
INSERT INTO t1 VALUES (1, "initial");
|
|
INSERT INTO t3 VALUES (101, "initial 1");
|
|
SET GLOBAL gtid_domain_id= 2;
|
|
SET SESSION gtid_domain_id= 2;
|
|
CREATE TABLE t2 (a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t2 VALUES (1, "initial");
|
|
SET SQL_LOG_BIN=0;
|
|
CREATE TABLE t3 (a INT PRIMARY KEY, b VARCHAR(10));
|
|
SET SQL_LOG_BIN=1;
|
|
INSERT INTO t3 VALUES (201, "initial 2");
|
|
SHOW ALL SLAVES STATUS;
|
|
Connection_name
|
|
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_3
|
|
Connect_Retry 60
|
|
Master_Log_File server3-bin.000001
|
|
Read_Master_Log_Pos 1501
|
|
Relay_Log_File mysqld-relay-bin.000002
|
|
Relay_Log_Pos 1790
|
|
Relay_Master_Log_File server3-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 1501
|
|
Relay_Log_Space 2088
|
|
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 3
|
|
Master_SSL_Crl
|
|
Master_SSL_Crlpath
|
|
Using_Gtid No
|
|
Gtid_IO_Pos
|
|
Retried_transactions 0
|
|
Max_relay_log_size 1073741824
|
|
Executed_log_entries 25
|
|
Slave_received_heartbeats 0
|
|
Slave_heartbeat_period 60.000
|
|
Gtid_Slave_Pos 1-1-4,2-2-3
|
|
*** Now move slave2 to replicate from both master1 and master2 instead of just slave1 ***
|
|
STOP ALL SLAVES;
|
|
Warnings:
|
|
Note 1938 SLAVE '' stopped
|
|
INSERT INTO t1 VALUES (2, "switch1");
|
|
INSERT INTO t3 VALUES (102, "switch1 a");
|
|
INSERT INTO t2 VALUES (2, "switch1");
|
|
INSERT INTO t3 VALUES (202, "switch1 b");
|
|
CHANGE MASTER 'slave1' TO master_port=MYPORT_1, master_host='127.0.0.1', master_user='root', master_use_gtid=current_pos;
|
|
CHANGE MASTER 'slave2' TO master_port=MYPORT_2, master_host='127.0.0.1', master_user='root', master_use_gtid=current_pos;
|
|
SET default_master_connection = 'slave1';
|
|
START SLAVE;
|
|
include/wait_for_slave_to_start.inc
|
|
SET default_master_connection = 'slave2';
|
|
START SLAVE;
|
|
include/wait_for_slave_to_start.inc
|
|
set default_master_connection = '';
|
|
*** Move slave1 to replicate from slave2 instead of from master1 and master2 ***
|
|
STOP SLAVE 'slave1';
|
|
INSERT INTO t1 VALUES (3, "switch 2");
|
|
INSERT INTO t3 VALUES (103, "switch 2 a");
|
|
INSERT INTO t2 VALUES (3, "switch 2");
|
|
INSERT INTO t3 VALUES (203, "switch 2 b");
|
|
STOP SLAVE 'slave2';
|
|
INSERT INTO t2 VALUES (4, "switch 3");
|
|
INSERT INTO t3 VALUES (204, "switch 3 b");
|
|
CHANGE MASTER TO master_port=MYPORT_4, master_host='127.0.0.1', master_user='root', master_use_gtid=current_pos;
|
|
START SLAVE;
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a b
|
|
1 initial
|
|
2 switch1
|
|
3 switch 2
|
|
SELECT * FROM t2 ORDER BY a;
|
|
a b
|
|
1 initial
|
|
2 switch1
|
|
3 switch 2
|
|
4 switch 3
|
|
SELECT * FROM t3 ORDER BY a;
|
|
a b
|
|
101 initial 1
|
|
102 switch1 a
|
|
103 switch 2 a
|
|
201 initial 2
|
|
202 switch1 b
|
|
203 switch 2 b
|
|
204 switch 3 b
|
|
DROP TABLE t1;
|
|
SET SQL_LOG_BIN=0;
|
|
DROP TABLE t3;
|
|
SET SQL_LOG_BIN=1;
|
|
DROP TABLE t2;
|
|
DROP TABLE t3;
|
|
SET GLOBAL gtid_domain_id=0;
|
|
STOP ALL SLAVES;
|
|
Warnings:
|
|
Note 1938 SLAVE '' stopped
|
|
include/reset_master_slave.inc
|
|
SET GLOBAL gtid_domain_id=0;
|
|
STOP ALL SLAVES;
|
|
Warnings:
|
|
Note 1938 SLAVE 'slave1' stopped
|
|
Note 1938 SLAVE 'slave2' stopped
|
|
include/reset_master_slave.inc
|
|
SET GLOBAL gtid_domain_id=0;
|
|
include/reset_master_slave.inc
|
|
SET GLOBAL gtid_domain_id=0;
|
|
include/reset_master_slave.inc
|