mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
This patch adds functionality to row-based replication to ensure the slave's column sizes are >= to that of the master. It also includes some refactoring for the code from WL#3228. mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash Removed commented out portion of test referenced in bug report. This test supports the original request of the bug report. mysql-test/suite/rpl/r/rpl_extraCol_innodb.result: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash New result file for additional test. mysql-test/suite/rpl/r/rpl_extraCol_myisam.result: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash New result file for additional test. mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash New result file for additional test. sql/field.cc: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch refactors the additions made by this bug patch and those made by WL#3228. The effort consolidates the large switches on type() into functions within the field classes. sql/field.h: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch refactors the additions made by this bug patch and those made by WL#3228. The effort consolidates the large switches on type() into functions within the field classes. sql/log_event.cc: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch refactors the calc_field_size() method to use the new methods implemented in the field classes. It also corrects comments concerning how replication of field metadata works. sql/log_event.h: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch refactors out the calc_field_size() method into the method save_field_metadata(). sql/rpl_utility.cc: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch adds a method to check the size of the field on the master using the field metadata from WL#3228. Each column is checked to ensure the slave's column is >= to the master's column in size. sql/rpl_utility.h: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch changes the table_def class so that it records the size of the metadata. This is a result of refactoring out the calc_field_size() method into the method save_field_metadata(). Prevents access via field_metadata(col) to unitialized memory when there is no metadata transmitted from the master. mysql-test/suite/rpl/r/rpl_row_colSize.result: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash New result file for additional test. mysql-test/suite/rpl/t/rpl_row_colSize.test: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash Added a test file to test each variable type that relies on field metadata from the master. mysql-test/include/test_fieldsize.inc: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash Sub unit file to test each variable type that relies on field metadata from the master.
This commit is contained in:
parent
21c55af5a1
commit
9ad300d50d
13 changed files with 1697 additions and 269 deletions
|
@ -71,38 +71,47 @@ sync_slave_with_master;
|
|||
############################################
|
||||
|
||||
## BUG22086
|
||||
#--echo *** Create t2 on slave ***
|
||||
#STOP SLAVE;
|
||||
#RESET SLAVE;
|
||||
#eval CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5),
|
||||
# d FLOAT DEFAULT '2.00',
|
||||
# e CHAR(5) DEFAULT 'TEST2')
|
||||
# ENGINE=$engine_type;
|
||||
#
|
||||
#--echo *** Create t2 on Master ***
|
||||
#connection master;
|
||||
#eval CREATE TABLE t2 (a INT PRIMARY KEY, b INT, c CHAR(10)
|
||||
# ) ENGINE=$engine_type;
|
||||
#RESET MASTER;
|
||||
#
|
||||
#--echo *** Start Slave ***
|
||||
#connection slave;
|
||||
#START SLAVE;
|
||||
#
|
||||
#--echo *** Master Data Insert ***
|
||||
#connection master;
|
||||
#
|
||||
#INSERT INTO t2 () VALUES(1,2,'Kyle, TEX'),(2,1,'JOE AUSTIN'),(3,4,'QA TESTING');
|
||||
#SELECT * FROM t2 ORDER BY a;
|
||||
--echo *** Create t2 on slave ***
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
eval CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5),
|
||||
d FLOAT DEFAULT '2.00',
|
||||
e CHAR(5) DEFAULT 'TEST2')
|
||||
ENGINE=$engine_type;
|
||||
|
||||
#--echo *** Select from slave ***
|
||||
#sync_slave_with_master;
|
||||
#SELECT * FROM t2 ORDER BY a;
|
||||
--echo *** Create t2 on Master ***
|
||||
connection master;
|
||||
eval CREATE TABLE t2 (a INT PRIMARY KEY, b INT, c CHAR(10)
|
||||
) ENGINE=$engine_type;
|
||||
RESET MASTER;
|
||||
|
||||
#--echo *** Drop t2 ***
|
||||
#connection master;
|
||||
#DROP TABLE t2;
|
||||
#sync_slave_with_master;
|
||||
--echo *** Master Data Insert ***
|
||||
connection master;
|
||||
|
||||
INSERT INTO t2 () VALUES(1,2,'Kyle, TEX'),(2,1,'JOE AUSTIN'),(3,4,'QA TESTING');
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
--echo *** Start Slave ***
|
||||
connection slave;
|
||||
START SLAVE;
|
||||
wait_for_slave_to_stop;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
connection master;
|
||||
RESET MASTER;
|
||||
|
||||
connection slave;
|
||||
START SLAVE;
|
||||
|
||||
--echo *** Drop t2 ***
|
||||
connection master;
|
||||
DROP TABLE t2;
|
||||
sync_slave_with_master;
|
||||
|
||||
####################################
|
||||
### Try to replicate BLOB to INT ###
|
||||
|
@ -140,7 +149,7 @@ INSERT INTO t3 () VALUES(@b1,2,'Kyle, TEX'),(@b1,1,'JOE AUSTIN'),(@b1,4,'QA TEST
|
|||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
@ -185,7 +194,7 @@ INSERT INTO t4 () VALUES(100.22,2,'Kyle, TEX'),(200.26,1,'JOE AUSTIN'),
|
|||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
@ -230,7 +239,7 @@ INSERT INTO t5 () VALUES(1,'Kyle',200.23,1,'b1b1',23.00098),
|
|||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
@ -276,7 +285,7 @@ INSERT INTO t6 () VALUES(1,'Kyle',200.23,1),
|
|||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3;
|
||||
#START SLAVE;
|
||||
|
@ -378,7 +387,7 @@ INSERT INTO t8 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
|||
#connection slave;
|
||||
#wait_for_slave_to_stop;
|
||||
#--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
#--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||
#--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
#--query_vertical SHOW SLAVE STATUS
|
||||
#SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
#START SLAVE;
|
||||
|
@ -429,7 +438,7 @@ sync_slave_with_master;
|
|||
#--echo *** Select from T9 ***
|
||||
#--source include/wait_for_slave_sql_to_stop.inc
|
||||
#--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
#--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||
#--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
#--query_vertical SHOW SLAVE STATUS
|
||||
#SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
#START SLAVE;
|
||||
|
@ -471,7 +480,7 @@ INSERT INTO t10 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
|||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
@ -515,7 +524,7 @@ INSERT INTO t11 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
|||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
@ -725,7 +734,7 @@ ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5;
|
|||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
@ -834,7 +843,7 @@ INSERT INTO t17 () VALUES(9223372036854775807,2,'Kyle, TEX');
|
|||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
|
40
mysql-test/include/test_fieldsize.inc
Normal file
40
mysql-test/include/test_fieldsize.inc
Normal file
|
@ -0,0 +1,40 @@
|
|||
#
|
||||
# include/test_fieldsize.inc
|
||||
#
|
||||
# This include file is designed to create a table with one column
|
||||
# whose size on the master is greater than that on the slave. The
|
||||
# test should fail with an error on the slave.
|
||||
#
|
||||
|
||||
connection master;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
eval $test_table_slave;
|
||||
|
||||
connection master;
|
||||
eval $test_table_master;
|
||||
RESET MASTER;
|
||||
|
||||
eval $test_insert;
|
||||
|
||||
connection slave;
|
||||
START SLAVE;
|
||||
wait_for_slave_to_stop;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
|
||||
# The following should be 0
|
||||
SELECT COUNT(*) FROM t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
|
||||
connection master;
|
||||
RESET MASTER;
|
||||
|
||||
connection slave;
|
||||
START SLAVE;
|
||||
|
|
@ -33,6 +33,73 @@ a b c d e
|
|||
3 4 QA 2 TEST
|
||||
*** Drop t1 ***
|
||||
DROP TABLE t1;
|
||||
*** Create t2 on slave ***
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5),
|
||||
d FLOAT DEFAULT '2.00',
|
||||
e CHAR(5) DEFAULT 'TEST2')
|
||||
ENGINE='InnoDB';
|
||||
*** Create t2 on Master ***
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY, b INT, c CHAR(10)
|
||||
) ENGINE='InnoDB';
|
||||
RESET MASTER;
|
||||
*** Master Data Insert ***
|
||||
INSERT INTO t2 () VALUES(1,2,'Kyle, TEX'),(2,1,'JOE AUSTIN'),(3,4,'QA TESTING');
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b c
|
||||
1 2 Kyle, TEX
|
||||
2 1 JOE AUSTIN
|
||||
3 4 QA TESTING
|
||||
*** Start Slave ***
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 2 size mismatch - master has size 10, test.t2 on slave has size 6. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 size mismatch - master has size 10, test.t2 on slave has size 6. Master's column size should be <= the slave's column size.
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b c d e
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
*** Drop t2 ***
|
||||
DROP TABLE t2;
|
||||
*** Create t3 on slave ***
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
|
@ -57,7 +124,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -69,7 +136,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -88,8 +155,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 252, test.t3 has type 3
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -119,7 +186,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -131,7 +198,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -150,8 +217,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 246, test.t4 has type 3
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -181,7 +248,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -193,7 +260,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -212,8 +279,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 5 type mismatch - received type 4, test.t5 has type 246
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -242,7 +309,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -254,7 +321,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -273,8 +340,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 3 type mismatch - received type 16, test.t6 has type 3
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3;
|
||||
|
@ -354,7 +421,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -366,7 +433,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -385,8 +452,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 254, test.t10 has type 5
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -415,7 +482,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -427,7 +494,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -446,8 +513,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 15, test.t11 has type 252
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -605,7 +672,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -617,7 +684,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1060
|
||||
|
@ -636,8 +703,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1060
|
||||
Last_SQL_Error Error 'Duplicate column name 'c6'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5'
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -740,7 +807,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -752,7 +819,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -771,8 +838,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 8, test.t17 has type 2
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
|
|
@ -33,6 +33,73 @@ a b c d e
|
|||
3 4 QA 2 TEST
|
||||
*** Drop t1 ***
|
||||
DROP TABLE t1;
|
||||
*** Create t2 on slave ***
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5),
|
||||
d FLOAT DEFAULT '2.00',
|
||||
e CHAR(5) DEFAULT 'TEST2')
|
||||
ENGINE='MyISAM';
|
||||
*** Create t2 on Master ***
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY, b INT, c CHAR(10)
|
||||
) ENGINE='MyISAM';
|
||||
RESET MASTER;
|
||||
*** Master Data Insert ***
|
||||
INSERT INTO t2 () VALUES(1,2,'Kyle, TEX'),(2,1,'JOE AUSTIN'),(3,4,'QA TESTING');
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b c
|
||||
1 2 Kyle, TEX
|
||||
2 1 JOE AUSTIN
|
||||
3 4 QA TESTING
|
||||
*** Start Slave ***
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 2 size mismatch - master has size 10, test.t2 on slave has size 6. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 size mismatch - master has size 10, test.t2 on slave has size 6. Master's column size should be <= the slave's column size.
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b c d e
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
*** Drop t2 ***
|
||||
DROP TABLE t2;
|
||||
*** Create t3 on slave ***
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
|
@ -57,7 +124,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -69,7 +136,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -88,8 +155,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 252, test.t3 has type 3
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -119,7 +186,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -131,7 +198,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -150,8 +217,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 246, test.t4 has type 3
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -181,7 +248,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -193,7 +260,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -212,8 +279,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 5 type mismatch - received type 4, test.t5 has type 246
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -242,7 +309,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -254,7 +321,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -273,8 +340,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 3 type mismatch - received type 16, test.t6 has type 3
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3;
|
||||
|
@ -354,7 +421,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -366,7 +433,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -385,8 +452,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 254, test.t10 has type 5
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -415,7 +482,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -427,7 +494,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -446,8 +513,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 15, test.t11 has type 252
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -605,7 +672,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -617,7 +684,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1060
|
||||
|
@ -636,8 +703,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1060
|
||||
Last_SQL_Error Error 'Duplicate column name 'c6'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5'
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -740,7 +807,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -752,7 +819,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -771,8 +838,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 8, test.t17 has type 2
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
|
754
mysql-test/suite/rpl/r/rpl_row_colSize.result
Normal file
754
mysql-test/suite/rpl/r/rpl_row_colSize.result
Normal file
|
@ -0,0 +1,754 @@
|
|||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
**** Testing WL#3228 changes. ****
|
||||
*** Create "wider" table on slave ***
|
||||
Checking MYSQL_TYPE_NEWDECIMAL fields
|
||||
DROP TABLE IF EXISTS t1;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't1'
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t1 (a DECIMAL(5,2));
|
||||
CREATE TABLE t1 (a DECIMAL(20, 10));
|
||||
RESET MASTER;
|
||||
INSERT INTO t1 VALUES (901251.90125);
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 10, test.t1 on slave has size 3. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 10, test.t1 on slave has size 3. Master's column size should be <= the slave's column size.
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t1 (a DECIMAL(27, 9));
|
||||
CREATE TABLE t1 (a DECIMAL(27, 18));
|
||||
RESET MASTER;
|
||||
INSERT INTO t1 VALUES (901251.90125);
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 12, test.t1 on slave has size 12. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 12, test.t1 on slave has size 12. Master's column size should be <= the slave's column size.
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t1 (a NUMERIC(5,2));
|
||||
CREATE TABLE t1 (a NUMERIC(20, 10));
|
||||
RESET MASTER;
|
||||
INSERT INTO t1 VALUES (901251.90125);
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 10, test.t1 on slave has size 3. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 10, test.t1 on slave has size 3. Master's column size should be <= the slave's column size.
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
Checking MYSQL_TYPE_FLOAT fields
|
||||
DROP TABLE IF EXISTS t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t1 (a FLOAT(20));
|
||||
CREATE TABLE t1 (a FLOAT(47));
|
||||
RESET MASTER;
|
||||
INSERT INTO t1 VALUES (901251.90125);
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 5, test.t1 has type 4
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 5, test.t1 has type 4
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
Checking MYSQL_TYPE_BIT fields
|
||||
DROP TABLE IF EXISTS t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t1 (a BIT(5));
|
||||
CREATE TABLE t1 (a BIT(64));
|
||||
RESET MASTER;
|
||||
INSERT INTO t1 VALUES (B'10101');
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 8, test.t1 on slave has size 1. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 8, test.t1 on slave has size 1. Master's column size should be <= the slave's column size.
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t1 (a BIT(11));
|
||||
CREATE TABLE t1 (a BIT(12));
|
||||
RESET MASTER;
|
||||
INSERT INTO t1 VALUES (B'10101');
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2, test.t1 on slave has size 2. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2, test.t1 on slave has size 2. Master's column size should be <= the slave's column size.
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
Checking MYSQL_TYPE_SET fields
|
||||
DROP TABLE IF EXISTS t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t1 (a SET('4'));
|
||||
CREATE TABLE t1 (a SET('1','2','3','4','5','6','7','8','9'));
|
||||
RESET MASTER;
|
||||
INSERT INTO t1 VALUES ('4');
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2, test.t1 on slave has size 1. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2, test.t1 on slave has size 1. Master's column size should be <= the slave's column size.
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
Checking MYSQL_TYPE_STRING fields
|
||||
DROP TABLE IF EXISTS t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t1 (a CHAR(10));
|
||||
CREATE TABLE t1 (a CHAR(20));
|
||||
RESET MASTER;
|
||||
INSERT INTO t1 VALUES ('This is a test.');
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 20, test.t1 on slave has size 11. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 20, test.t1 on slave has size 11. Master's column size should be <= the slave's column size.
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
Checking MYSQL_TYPE_ENUM fields
|
||||
DROP TABLE IF EXISTS t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t1 (a ENUM('44','54'));
|
||||
CREATE TABLE t1 (a ENUM(
|
||||
'01','02','03','04','05','06','07','08','09',
|
||||
'11','12','13','14','15','16','17','18','19',
|
||||
'21','22','23','24','25','26','27','28','29',
|
||||
'31','32','33','34','35','36','37','38','39',
|
||||
'41','42','43','44','45','46','47','48','49',
|
||||
'51','52','53','54','55','56','57','58','59',
|
||||
'61','62','63','64','65','66','67','68','69',
|
||||
'71','72','73','74','75','76','77','78','79',
|
||||
'81','82','83','84','85','86','87','88','89',
|
||||
'91','92','93','94','95','96','97','98','99',
|
||||
'101','102','103','104','105','106','107','108','109',
|
||||
'111','112','113','114','115','116','117','118','119',
|
||||
'121','122','123','124','125','126','127','128','129',
|
||||
'131','132','133','134','135','136','137','138','139',
|
||||
'141','142','143','144','145','146','147','148','149',
|
||||
'151','152','153','154','155','156','157','158','159',
|
||||
'161','162','163','164','165','166','167','168','169',
|
||||
'171','172','173','174','175','176','177','178','179',
|
||||
'181','182','183','184','185','186','187','188','189',
|
||||
'191','192','193','194','195','196','197','198','199',
|
||||
'201','202','203','204','205','206','207','208','209',
|
||||
'211','212','213','214','215','216','217','218','219',
|
||||
'221','222','223','224','225','226','227','228','229',
|
||||
'231','232','233','234','235','236','237','238','239',
|
||||
'241','242','243','244','245','246','247','248','249',
|
||||
'251','252','253','254','255','256','257','258','259',
|
||||
'261','262','263','264','265','266','267','268','269',
|
||||
'271','272','273','274','275','276','277','278','279',
|
||||
'281','282','283','284','285','286','287','288','289',
|
||||
'291','292','293','294','295','296','297','298','299'
|
||||
));
|
||||
RESET MASTER;
|
||||
INSERT INTO t1 VALUES ('44');
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2, test.t1 on slave has size 1. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2, test.t1 on slave has size 1. Master's column size should be <= the slave's column size.
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
Checking MYSQL_TYPE_VARCHAR fields
|
||||
DROP TABLE IF EXISTS t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t1 (a VARCHAR(100));
|
||||
CREATE TABLE t1 (a VARCHAR(2000));
|
||||
RESET MASTER;
|
||||
INSERT INTO t1 VALUES ('This is a test.');
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2000, test.t1 on slave has size 100. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2000, test.t1 on slave has size 100. Master's column size should be <= the slave's column size.
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t1 (a VARCHAR(10));
|
||||
CREATE TABLE t1 (a VARCHAR(200));
|
||||
RESET MASTER;
|
||||
INSERT INTO t1 VALUES ('This is a test.');
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 200, test.t1 on slave has size 10. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 200, test.t1 on slave has size 10. Master's column size should be <= the slave's column size.
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t1 (a VARCHAR(1000));
|
||||
CREATE TABLE t1 (a VARCHAR(2000));
|
||||
RESET MASTER;
|
||||
INSERT INTO t1 VALUES ('This is a test.');
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2000, test.t1 on slave has size 1000. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 2000, test.t1 on slave has size 1000. Master's column size should be <= the slave's column size.
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
Checking MYSQL_TYPE_BLOB fields
|
||||
DROP TABLE IF EXISTS t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t1 (a TINYBLOB);
|
||||
CREATE TABLE t1 (a LONGBLOB);
|
||||
RESET MASTER;
|
||||
INSERT INTO t1 VALUES ('This is a test.');
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 4, test.t1 on slave has size 1. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 size mismatch - master has size 4, test.t1 on slave has size 1. Master's column size should be <= the slave's column size.
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
*** Cleanup ***
|
||||
DROP TABLE IF EXISTS t1;
|
168
mysql-test/suite/rpl/t/rpl_row_colSize.test
Normal file
168
mysql-test/suite/rpl/t/rpl_row_colSize.test
Normal file
|
@ -0,0 +1,168 @@
|
|||
##################################################################
|
||||
# rpl_colSize #
|
||||
# #
|
||||
# This test is designed to test the changes included in WL#3228. #
|
||||
# The changes include the ability to replicate with the master #
|
||||
# having columns that are smaller (shorter) than the slave. #
|
||||
##################################################################
|
||||
|
||||
-- source include/master-slave.inc
|
||||
-- source include/have_binlog_format_row.inc
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
|
||||
--echo **** Testing WL#3228 changes. ****
|
||||
--echo *** Create "wider" table on slave ***
|
||||
sync_slave_with_master;
|
||||
|
||||
#
|
||||
# Check each column type to verify error 1532 fires (BUG#22086)
|
||||
# This check covers only those fields that require additional
|
||||
# metadata from the master to be replicated to the slave. These
|
||||
# field types are:
|
||||
# MYSQL_TYPE_NEWDECIMAL:
|
||||
# MYSQL_TYPE_FLOAT:
|
||||
# MYSQL_TYPE_BIT:
|
||||
# MYSQL_TYPE_SET:
|
||||
# MYSQL_TYPE_STRING:
|
||||
# MYSQL_TYPE_ENUM:
|
||||
# MYSQL_TYPE_VARCHAR:
|
||||
# MYSQL_TYPE_BLOB:
|
||||
|
||||
#
|
||||
# Test: Checking MYSQL_TYPE_NEWDECIMAL fields
|
||||
#
|
||||
--echo Checking MYSQL_TYPE_NEWDECIMAL fields
|
||||
let $test_table_master = CREATE TABLE t1 (a DECIMAL(20, 10));
|
||||
let $test_table_slave = CREATE TABLE t1 (a DECIMAL(5,2));
|
||||
let $test_insert = INSERT INTO t1 VALUES (901251.90125);
|
||||
source include/test_fieldsize.inc;
|
||||
|
||||
let $test_table_master = CREATE TABLE t1 (a DECIMAL(27, 18));
|
||||
let $test_table_slave = CREATE TABLE t1 (a DECIMAL(27, 9));
|
||||
let $test_insert = INSERT INTO t1 VALUES (901251.90125);
|
||||
source include/test_fieldsize.inc;
|
||||
|
||||
let $test_table_master = CREATE TABLE t1 (a NUMERIC(20, 10));
|
||||
let $test_table_slave = CREATE TABLE t1 (a NUMERIC(5,2));
|
||||
let $test_insert = INSERT INTO t1 VALUES (901251.90125);
|
||||
source include/test_fieldsize.inc;
|
||||
|
||||
#
|
||||
# Test: Checking MYSQL_TYPE_FLOAT fields
|
||||
#
|
||||
--echo Checking MYSQL_TYPE_FLOAT fields
|
||||
let $test_table_master = CREATE TABLE t1 (a FLOAT(47));
|
||||
let $test_table_slave = CREATE TABLE t1 (a FLOAT(20));
|
||||
let $test_insert = INSERT INTO t1 VALUES (901251.90125);
|
||||
source include/test_fieldsize.inc;
|
||||
|
||||
#
|
||||
# Test: Checking MYSQL_TYPE_BIT fields
|
||||
#
|
||||
--echo Checking MYSQL_TYPE_BIT fields
|
||||
let $test_table_master = CREATE TABLE t1 (a BIT(64));
|
||||
let $test_table_slave = CREATE TABLE t1 (a BIT(5));
|
||||
let $test_insert = INSERT INTO t1 VALUES (B'10101');
|
||||
source include/test_fieldsize.inc;
|
||||
|
||||
let $test_table_master = CREATE TABLE t1 (a BIT(12));
|
||||
let $test_table_slave = CREATE TABLE t1 (a BIT(11));
|
||||
let $test_insert = INSERT INTO t1 VALUES (B'10101');
|
||||
source include/test_fieldsize.inc;
|
||||
|
||||
#
|
||||
# Test: Checking MYSQL_TYPE_SET fields
|
||||
#
|
||||
--echo Checking MYSQL_TYPE_SET fields
|
||||
let $test_table_master = CREATE TABLE t1 (a SET('1','2','3','4','5','6','7','8','9'));
|
||||
let $test_table_slave = CREATE TABLE t1 (a SET('4'));
|
||||
let $test_insert = INSERT INTO t1 VALUES ('4');
|
||||
source include/test_fieldsize.inc;
|
||||
|
||||
#
|
||||
# Test: Checking MYSQL_TYPE_STRING fields
|
||||
#
|
||||
--echo Checking MYSQL_TYPE_STRING fields
|
||||
let $test_table_master = CREATE TABLE t1 (a CHAR(20));
|
||||
let $test_table_slave = CREATE TABLE t1 (a CHAR(10));
|
||||
let $test_insert = INSERT INTO t1 VALUES ('This is a test.');
|
||||
source include/test_fieldsize.inc;
|
||||
|
||||
#
|
||||
# Test: Checking MYSQL_TYPE_ENUM fields
|
||||
#
|
||||
--echo Checking MYSQL_TYPE_ENUM fields
|
||||
let $test_table_master = CREATE TABLE t1 (a ENUM(
|
||||
'01','02','03','04','05','06','07','08','09',
|
||||
'11','12','13','14','15','16','17','18','19',
|
||||
'21','22','23','24','25','26','27','28','29',
|
||||
'31','32','33','34','35','36','37','38','39',
|
||||
'41','42','43','44','45','46','47','48','49',
|
||||
'51','52','53','54','55','56','57','58','59',
|
||||
'61','62','63','64','65','66','67','68','69',
|
||||
'71','72','73','74','75','76','77','78','79',
|
||||
'81','82','83','84','85','86','87','88','89',
|
||||
'91','92','93','94','95','96','97','98','99',
|
||||
'101','102','103','104','105','106','107','108','109',
|
||||
'111','112','113','114','115','116','117','118','119',
|
||||
'121','122','123','124','125','126','127','128','129',
|
||||
'131','132','133','134','135','136','137','138','139',
|
||||
'141','142','143','144','145','146','147','148','149',
|
||||
'151','152','153','154','155','156','157','158','159',
|
||||
'161','162','163','164','165','166','167','168','169',
|
||||
'171','172','173','174','175','176','177','178','179',
|
||||
'181','182','183','184','185','186','187','188','189',
|
||||
'191','192','193','194','195','196','197','198','199',
|
||||
'201','202','203','204','205','206','207','208','209',
|
||||
'211','212','213','214','215','216','217','218','219',
|
||||
'221','222','223','224','225','226','227','228','229',
|
||||
'231','232','233','234','235','236','237','238','239',
|
||||
'241','242','243','244','245','246','247','248','249',
|
||||
'251','252','253','254','255','256','257','258','259',
|
||||
'261','262','263','264','265','266','267','268','269',
|
||||
'271','272','273','274','275','276','277','278','279',
|
||||
'281','282','283','284','285','286','287','288','289',
|
||||
'291','292','293','294','295','296','297','298','299'
|
||||
));
|
||||
let $test_table_slave = CREATE TABLE t1 (a ENUM('44','54'));
|
||||
let $test_insert = INSERT INTO t1 VALUES ('44');
|
||||
source include/test_fieldsize.inc;
|
||||
|
||||
#
|
||||
# Test: Checking MYSQL_TYPE_VARCHAR fields
|
||||
#
|
||||
--echo Checking MYSQL_TYPE_VARCHAR fields
|
||||
let $test_table_master = CREATE TABLE t1 (a VARCHAR(2000));
|
||||
let $test_table_slave = CREATE TABLE t1 (a VARCHAR(100));
|
||||
let $test_insert = INSERT INTO t1 VALUES ('This is a test.');
|
||||
source include/test_fieldsize.inc;
|
||||
|
||||
let $test_table_master = CREATE TABLE t1 (a VARCHAR(200));
|
||||
let $test_table_slave = CREATE TABLE t1 (a VARCHAR(10));
|
||||
let $test_insert = INSERT INTO t1 VALUES ('This is a test.');
|
||||
source include/test_fieldsize.inc;
|
||||
|
||||
let $test_table_master = CREATE TABLE t1 (a VARCHAR(2000));
|
||||
let $test_table_slave = CREATE TABLE t1 (a VARCHAR(1000));
|
||||
let $test_insert = INSERT INTO t1 VALUES ('This is a test.');
|
||||
source include/test_fieldsize.inc;
|
||||
|
||||
#
|
||||
# Test: Checking MYSQL_TYPE_BLOB fields
|
||||
#
|
||||
--echo Checking MYSQL_TYPE_BLOB fields
|
||||
let $test_table_master = CREATE TABLE t1 (a LONGBLOB);
|
||||
let $test_table_slave = CREATE TABLE t1 (a TINYBLOB);
|
||||
let $test_insert = INSERT INTO t1 VALUES ('This is a test.');
|
||||
source include/test_fieldsize.inc;
|
||||
|
||||
--echo *** Cleanup ***
|
||||
connection master;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
sync_slave_with_master;
|
||||
# END 5.1 Test Case
|
||||
|
|
@ -33,6 +33,73 @@ a b c d e
|
|||
3 4 QA NULL NULL
|
||||
*** Drop t1 ***
|
||||
DROP TABLE t1;
|
||||
*** Create t2 on slave ***
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5),
|
||||
d FLOAT DEFAULT '2.00',
|
||||
e CHAR(5) DEFAULT 'TEST2')
|
||||
ENGINE='NDB';
|
||||
*** Create t2 on Master ***
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY, b INT, c CHAR(10)
|
||||
) ENGINE='NDB';
|
||||
RESET MASTER;
|
||||
*** Master Data Insert ***
|
||||
INSERT INTO t2 () VALUES(1,2,'Kyle, TEX'),(2,1,'JOE AUSTIN'),(3,4,'QA TESTING');
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b c
|
||||
1 2 Kyle, TEX
|
||||
2 1 JOE AUSTIN
|
||||
3 4 QA TESTING
|
||||
*** Start Slave ***
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
Last_Error Table definition on master and slave does not match: Column 2 size mismatch - master has size 10, test.t2 on slave has size 6. Master's column size should be <= the slave's column size.
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 size mismatch - master has size 10, test.t2 on slave has size 6. Master's column size should be <= the slave's column size.
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b c d e
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
*** Drop t2 ***
|
||||
DROP TABLE t2;
|
||||
*** Create t3 on slave ***
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
|
@ -57,7 +124,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -69,7 +136,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -88,8 +155,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 252, test.t3 has type 3
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -119,7 +186,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -131,7 +198,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -150,8 +217,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 246, test.t4 has type 3
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -181,7 +248,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -193,7 +260,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -212,8 +279,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 5 type mismatch - received type 4, test.t5 has type 246
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -242,7 +309,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -254,7 +321,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -273,8 +340,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 3 type mismatch - received type 16, test.t6 has type 3
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3;
|
||||
|
@ -354,7 +421,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -366,7 +433,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -385,8 +452,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 254, test.t10 has type 5
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -415,7 +482,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -427,7 +494,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -446,8 +513,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 15, test.t11 has type 252
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -605,7 +672,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -617,7 +684,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1060
|
||||
|
@ -636,8 +703,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1060
|
||||
Last_SQL_Error Error 'Duplicate column name 'c6'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5'
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
@ -741,7 +808,7 @@ SHOW SLAVE STATUS;
|
|||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Master_Port #
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
|
@ -753,7 +820,7 @@ Slave_SQL_Running No
|
|||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1532
|
||||
|
@ -772,8 +839,8 @@ Master_SSL_Cipher
|
|||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1532
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 8, test.t17 has type 2
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
|
|
272
sql/field.cc
272
sql/field.cc
|
@ -1360,6 +1360,27 @@ bool Field::send_binary(Protocol *protocol)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
Check to see if field size is compatible with destination.
|
||||
|
||||
This method is used in row-based replication to verify that the slave's
|
||||
field size is less than or equal to the master's field size. The
|
||||
encoded field metadata (from the master or source) is decoded and compared
|
||||
to the size of this field (the slave or destination).
|
||||
|
||||
@param field_metadata Encoded size in field metadata
|
||||
|
||||
@retval 0 if this field's size is < the source field's size
|
||||
@retval 1 if this field's size is >= the source field's size
|
||||
*/
|
||||
int Field::compatible_field_size(uint field_metadata)
|
||||
{
|
||||
uint const source_size= pack_length_from_metadata(field_metadata);
|
||||
uint const destination_size= row_pack_length();
|
||||
return (source_size <= destination_size);
|
||||
}
|
||||
|
||||
|
||||
int Field::store(const char *to, uint length, CHARSET_INFO *cs,
|
||||
enum_check_fields check_level)
|
||||
{
|
||||
|
@ -2690,6 +2711,76 @@ void Field_new_decimal::sql_type(String &str) const
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
Save the field metadata for new decimal fields.
|
||||
|
||||
Saves the precision in the first byte and decimals() in the second
|
||||
byte of the field metadata array at index of *metadata_ptr and
|
||||
*(metadata_ptr + 1).
|
||||
|
||||
@param metadata_ptr First byte of field metadata
|
||||
|
||||
@returns number of bytes written to metadata_ptr
|
||||
*/
|
||||
int Field_new_decimal::do_save_field_metadata(uchar *metadata_ptr)
|
||||
{
|
||||
*metadata_ptr= precision;
|
||||
*(metadata_ptr + 1)= decimals();
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Returns the number of bytes field uses in row-based replication
|
||||
row packed size.
|
||||
|
||||
This method is used in row-based replication to determine the number
|
||||
of bytes that the field consumes in the row record format. This is
|
||||
used to skip fields in the master that do not exist on the slave.
|
||||
|
||||
@param field_metadata Encoded size in field metadata
|
||||
|
||||
@returns The size of the field based on the field metadata.
|
||||
*/
|
||||
uint Field_new_decimal::pack_length_from_metadata(uint field_metadata)
|
||||
{
|
||||
uint const source_precision= (field_metadata >> 8U) & 0x00ff;
|
||||
uint const source_decimal= field_metadata & 0x00ff;
|
||||
uint const source_size= my_decimal_get_binary_size(source_precision,
|
||||
source_decimal);
|
||||
return (source_size);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Check to see if field size is compatible with destination.
|
||||
|
||||
This method is used in row-based replication to verify that the slave's
|
||||
field size is less than or equal to the master's field size. The
|
||||
encoded field metadata (from the master or source) is decoded and compared
|
||||
to the size of this field (the slave or destination).
|
||||
|
||||
@param field_metadata Encoded size in field metadata
|
||||
|
||||
@retval 0 if this field's size is < the source field's size
|
||||
@retval 1 if this field's size is >= the source field's size
|
||||
*/
|
||||
int Field_new_decimal::compatible_field_size(uint field_metadata)
|
||||
{
|
||||
int compatible= 0;
|
||||
uint const source_precision= (field_metadata >> 8U) & 0x00ff;
|
||||
uint const source_decimal= field_metadata & 0x00ff;
|
||||
uint const source_size= my_decimal_get_binary_size(source_precision,
|
||||
source_decimal);
|
||||
uint const destination_size= row_pack_length();
|
||||
compatible= (source_size <= destination_size);
|
||||
if (compatible)
|
||||
compatible= (source_precision <= precision) &&
|
||||
(source_decimal <= decimals());
|
||||
return (compatible);
|
||||
}
|
||||
|
||||
|
||||
uint Field_new_decimal::is_equal(Create_field *new_field)
|
||||
{
|
||||
return ((new_field->sql_type == real_type()) &&
|
||||
|
@ -2724,7 +2815,9 @@ const uchar *Field_new_decimal::unpack(uchar* to,
|
|||
uint from_pack_len= my_decimal_get_binary_size(from_precision, from_decimal);
|
||||
uint len= (param_data && (from_pack_len < length)) ?
|
||||
from_pack_len : length;
|
||||
if (from_pack_len && (from_pack_len < length))
|
||||
if ((from_pack_len && (from_pack_len < length)) ||
|
||||
(from_precision < precision) ||
|
||||
(from_decimal < decimals()))
|
||||
{
|
||||
/*
|
||||
If the master's data is smaller than the slave, we need to convert
|
||||
|
@ -4087,6 +4180,22 @@ bool Field_float::send_binary(Protocol *protocol)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
Save the field metadata for float fields.
|
||||
|
||||
Saves the pack length in the first byte.
|
||||
|
||||
@param metadata_ptr First byte of field metadata
|
||||
|
||||
@returns number of bytes written to metadata_ptr
|
||||
*/
|
||||
int Field_float::do_save_field_metadata(uchar *metadata_ptr)
|
||||
{
|
||||
*metadata_ptr= pack_length();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void Field_float::sql_type(String &res) const
|
||||
{
|
||||
if (dec == NOT_FIXED_DEC)
|
||||
|
@ -4404,6 +4513,23 @@ void Field_double::sort_string(uchar *to,uint length __attribute__((unused)))
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
Save the field metadata for double fields.
|
||||
|
||||
Saves the pack length in the first byte of the field metadata array
|
||||
at index of *metadata_ptr.
|
||||
|
||||
@param metadata_ptr First byte of field metadata
|
||||
|
||||
@returns number of bytes written to metadata_ptr
|
||||
*/
|
||||
int Field_double::do_save_field_metadata(uchar *metadata_ptr)
|
||||
{
|
||||
*metadata_ptr= pack_length();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void Field_double::sql_type(String &res) const
|
||||
{
|
||||
CHARSET_INFO *cs=res.charset();
|
||||
|
@ -6445,6 +6571,25 @@ const uchar *Field_string::unpack(uchar *to, const uchar *from)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
Save the field metadata for string fields.
|
||||
|
||||
Saves the real type in the first byte and the field length in the
|
||||
second byte of the field metadata array at index of *metadata_ptr and
|
||||
*(metadata_ptr + 1).
|
||||
|
||||
@param metadata_ptr First byte of field metadata
|
||||
|
||||
@returns number of bytes written to metadata_ptr
|
||||
*/
|
||||
int Field_string::do_save_field_metadata(uchar *metadata_ptr)
|
||||
{
|
||||
*metadata_ptr= real_type();
|
||||
*(metadata_ptr + 1)= field_length;
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Compare two packed keys
|
||||
|
||||
|
@ -6597,6 +6742,24 @@ Field *Field_string::new_field(MEM_ROOT *root, struct st_table *new_table,
|
|||
|
||||
const uint Field_varstring::MAX_SIZE= UINT_MAX16;
|
||||
|
||||
/**
|
||||
Save the field metadata for varstring fields.
|
||||
|
||||
Saves the field length in the first byte. Note: may consume
|
||||
2 bytes. Caller must ensure second byte is contiguous with
|
||||
first byte (e.g. array index 0,1).
|
||||
|
||||
@param metadata_ptr First byte of field metadata
|
||||
|
||||
@returns number of bytes written to metadata_ptr
|
||||
*/
|
||||
int Field_varstring::do_save_field_metadata(uchar *metadata_ptr)
|
||||
{
|
||||
char *ptr= (char *)metadata_ptr;
|
||||
int2store(ptr, field_length);
|
||||
return 2;
|
||||
}
|
||||
|
||||
int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs)
|
||||
{
|
||||
ASSERT_COLUMN_MARKED_FOR_WRITE;
|
||||
|
@ -7560,6 +7723,23 @@ int Field_blob::key_cmp(const uchar *a,const uchar *b)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
Save the field metadata for blob fields.
|
||||
|
||||
Saves the pack length in the first byte of the field metadata array
|
||||
at index of *metadata_ptr.
|
||||
|
||||
@param metadata_ptr First byte of field metadata
|
||||
|
||||
@returns number of bytes written to metadata_ptr
|
||||
*/
|
||||
int Field_blob::do_save_field_metadata(uchar *metadata_ptr)
|
||||
{
|
||||
*metadata_ptr= pack_length_no_ptr();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
uint32 Field_blob::sort_length() const
|
||||
{
|
||||
return (uint32) (current_thd->variables.max_sort_length +
|
||||
|
@ -8145,6 +8325,25 @@ longlong Field_enum::val_int(void)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
Save the field metadata for enum fields.
|
||||
|
||||
Saves the real type in the first byte and the pack length in the
|
||||
second byte of the field metadata array at index of *metadata_ptr and
|
||||
*(metadata_ptr + 1).
|
||||
|
||||
@param metadata_ptr First byte of field metadata
|
||||
|
||||
@returns number of bytes written to metadata_ptr
|
||||
*/
|
||||
int Field_enum::do_save_field_metadata(uchar *metadata_ptr)
|
||||
{
|
||||
*metadata_ptr= real_type();
|
||||
*(metadata_ptr + 1)= pack_length();
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
||||
String *Field_enum::val_str(String *val_buffer __attribute__((unused)),
|
||||
String *val_ptr)
|
||||
{
|
||||
|
@ -8681,6 +8880,77 @@ uint Field_bit::get_key_image(uchar *buff, uint length, imagetype type_arg)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
Save the field metadata for bit fields.
|
||||
|
||||
Saves the bit length in the first byte and bytes in record in the
|
||||
second byte of the field metadata array at index of *metadata_ptr and
|
||||
*(metadata_ptr + 1).
|
||||
|
||||
@param metadata_ptr First byte of field metadata
|
||||
|
||||
@returns number of bytes written to metadata_ptr
|
||||
*/
|
||||
int Field_bit::do_save_field_metadata(uchar *metadata_ptr)
|
||||
{
|
||||
*metadata_ptr= bit_len;
|
||||
*(metadata_ptr + 1)= bytes_in_rec;
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Returns the number of bytes field uses in row-based replication
|
||||
row packed size.
|
||||
|
||||
This method is used in row-based replication to determine the number
|
||||
of bytes that the field consumes in the row record format. This is
|
||||
used to skip fields in the master that do not exist on the slave.
|
||||
|
||||
@param field_metadata Encoded size in field metadata
|
||||
|
||||
@returns The size of the field based on the field metadata.
|
||||
*/
|
||||
uint Field_bit::pack_length_from_metadata(uint field_metadata)
|
||||
{
|
||||
uint const from_len= (field_metadata >> 8U) & 0x00ff;
|
||||
uint const from_bit_len= field_metadata & 0x00ff;
|
||||
uint const source_size= from_len + ((from_bit_len > 0) ? 1 : 0);
|
||||
return (source_size);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Check to see if field size is compatible with destination.
|
||||
|
||||
This method is used in row-based replication to verify that the slave's
|
||||
field size is less than or equal to the master's field size. The
|
||||
encoded field metadata (from the master or source) is decoded and compared
|
||||
to the size of this field (the slave or destination).
|
||||
|
||||
@param field_metadata Encoded size in field metadata
|
||||
|
||||
@retval 0 if this field's size is < the source field's size
|
||||
@retval 1 if this field's size is >= the source field's size
|
||||
*/
|
||||
int Field_bit::compatible_field_size(uint field_metadata)
|
||||
{
|
||||
int compatible= 0;
|
||||
uint const source_size= pack_length_from_metadata(field_metadata);
|
||||
uint const destination_size= row_pack_length();
|
||||
uint const from_bit_len= field_metadata & 0x00ff;
|
||||
uint const from_len= (field_metadata >> 8U) & 0x00ff;
|
||||
if ((bit_len == 0) || (from_bit_len == 0))
|
||||
compatible= (source_size <= destination_size);
|
||||
else if (from_bit_len > bit_len)
|
||||
compatible= (from_len < bytes_in_rec);
|
||||
else
|
||||
compatible= ((from_bit_len <= bit_len) && (from_len <= bytes_in_rec));
|
||||
return (compatible);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Field_bit::sql_type(String &res) const
|
||||
{
|
||||
CHARSET_INFO *cs= res.charset();
|
||||
|
|
68
sql/field.h
68
sql/field.h
|
@ -151,6 +151,24 @@ public:
|
|||
table, which is located on disk).
|
||||
*/
|
||||
virtual uint32 pack_length_in_rec() const { return pack_length(); }
|
||||
virtual int compatible_field_size(uint field_metadata);
|
||||
virtual uint pack_length_from_metadata(uint field_metadata)
|
||||
{ return field_metadata; }
|
||||
/*
|
||||
This method is used to return the size of the data in a row-based
|
||||
replication row record. The default implementation of returning 0 is
|
||||
designed to allow fields that do not use metadata to return TRUE (1)
|
||||
from compatible_field_size() which uses this function in the comparison.
|
||||
The default value for field metadata for fields that do not have
|
||||
metadata is 0. Thus, 0 == 0 means the fields are compatible in size.
|
||||
|
||||
Note: While most classes that override this method return pack_length(),
|
||||
the classes Field_string, Field_varstring, and Field_blob return
|
||||
field_length + 1, field_length, and pack_length_no_ptr() respectfully.
|
||||
*/
|
||||
virtual uint row_pack_length() { return 0; }
|
||||
virtual int save_field_metadata(uchar *first_byte)
|
||||
{ return do_save_field_metadata(first_byte); }
|
||||
|
||||
/*
|
||||
data_length() return the "real size" of the data in memory.
|
||||
|
@ -463,6 +481,19 @@ private:
|
|||
overridden by subclasses.
|
||||
*/
|
||||
virtual size_t do_last_null_byte() const;
|
||||
|
||||
/**
|
||||
Retrieve the field metadata for fields.
|
||||
|
||||
This default implementation returns 0 and saves 0 in the metadata_ptr
|
||||
value.
|
||||
|
||||
@param metadata_ptr First byte of field metadata
|
||||
|
||||
@returns 0 no bytes written.
|
||||
*/
|
||||
virtual int do_save_field_metadata(uchar *metadata_ptr)
|
||||
{ return 0; }
|
||||
};
|
||||
|
||||
|
||||
|
@ -589,6 +620,8 @@ public:
|
|||
|
||||
/* New decimal/numeric field which use fixed point arithmetic */
|
||||
class Field_new_decimal :public Field_num {
|
||||
private:
|
||||
int do_save_field_metadata(uchar *first_byte);
|
||||
public:
|
||||
/* The maximum number of decimal digits can be stored */
|
||||
uint precision;
|
||||
|
@ -628,6 +661,9 @@ public:
|
|||
uint32 max_display_length() { return field_length; }
|
||||
uint size_of() const { return sizeof(*this); }
|
||||
uint32 pack_length() const { return (uint32) bin_size; }
|
||||
uint pack_length_from_metadata(uint field_metadata);
|
||||
uint row_pack_length() { return pack_length(); }
|
||||
int compatible_field_size(uint field_metadata);
|
||||
uint is_equal(Create_field *new_field);
|
||||
virtual const uchar *unpack(uchar* to, const uchar *from, uint param_data);
|
||||
};
|
||||
|
@ -834,7 +870,10 @@ public:
|
|||
int cmp(const uchar *,const uchar *);
|
||||
void sort_string(uchar *buff,uint length);
|
||||
uint32 pack_length() const { return sizeof(float); }
|
||||
uint row_pack_length() { return pack_length(); }
|
||||
void sql_type(String &str) const;
|
||||
private:
|
||||
int do_save_field_metadata(uchar *first_byte);
|
||||
};
|
||||
|
||||
|
||||
|
@ -871,7 +910,10 @@ public:
|
|||
int cmp(const uchar *,const uchar *);
|
||||
void sort_string(uchar *buff,uint length);
|
||||
uint32 pack_length() const { return sizeof(double); }
|
||||
uint row_pack_length() { return pack_length(); }
|
||||
void sql_type(String &str) const;
|
||||
private:
|
||||
int do_save_field_metadata(uchar *first_byte);
|
||||
};
|
||||
|
||||
|
||||
|
@ -1168,6 +1210,9 @@ public:
|
|||
uchar *pack(uchar *to, const uchar *from, uint max_length=~(uint) 0);
|
||||
virtual const uchar *unpack(uchar* to, const uchar *from, uint param_data);
|
||||
const uchar *unpack(uchar* to, const uchar *from);
|
||||
uint pack_length_from_metadata(uint field_metadata)
|
||||
{ return (field_metadata & 0x00ff); }
|
||||
uint row_pack_length() { return (field_length + 1); }
|
||||
int pack_cmp(const uchar *a,const uchar *b,uint key_length,
|
||||
my_bool insert_or_update);
|
||||
int pack_cmp(const uchar *b,uint key_length,my_bool insert_or_update);
|
||||
|
@ -1179,6 +1224,8 @@ public:
|
|||
{ return charset() == &my_charset_bin ? FALSE : TRUE; }
|
||||
Field *new_field(MEM_ROOT *root, struct st_table *new_table, bool keep_type);
|
||||
virtual uint get_key_image(uchar *buff,uint length, imagetype type);
|
||||
private:
|
||||
int do_save_field_metadata(uchar *first_byte);
|
||||
};
|
||||
|
||||
|
||||
|
@ -1214,6 +1261,7 @@ public:
|
|||
|
||||
enum_field_types type() const { return MYSQL_TYPE_VARCHAR; }
|
||||
enum ha_base_keytype key_type() const;
|
||||
uint row_pack_length() { return field_length; }
|
||||
bool zero_pack() const { return 0; }
|
||||
int reset(void) { bzero(ptr,field_length+length_bytes); return 0; }
|
||||
uint32 pack_length() const { return (uint32) field_length+length_bytes; }
|
||||
|
@ -1265,6 +1313,8 @@ public:
|
|||
uint new_null_bit);
|
||||
uint is_equal(Create_field *new_field);
|
||||
void hash(ulong *nr, ulong *nr2);
|
||||
private:
|
||||
int do_save_field_metadata(uchar *first_byte);
|
||||
};
|
||||
|
||||
|
||||
|
@ -1330,10 +1380,11 @@ public:
|
|||
This is used to determine the size of the actual data in the row
|
||||
buffer.
|
||||
|
||||
@retval The length of the raw data itself without the pointer.
|
||||
@returns The length of the raw data itself without the pointer.
|
||||
*/
|
||||
uint32 pack_length_no_ptr() const
|
||||
{ return (uint32) (packlength); }
|
||||
uint row_pack_length() { return pack_length_no_ptr(); }
|
||||
uint32 sort_length() const;
|
||||
inline uint32 max_data_length() const
|
||||
{
|
||||
|
@ -1356,7 +1407,7 @@ public:
|
|||
This is used to determine the size of the data plus the
|
||||
packed length portion in the row data.
|
||||
|
||||
@retval The length in the row plus the size of the data.
|
||||
@returns The length in the row plus the size of the data.
|
||||
*/
|
||||
uint32 get_packed_size(const uchar *ptr)
|
||||
{return packlength + get_length((const uchar *)ptr);}
|
||||
|
@ -1424,6 +1475,8 @@ public:
|
|||
{ return charset() == &my_charset_bin ? FALSE : TRUE; }
|
||||
uint32 max_display_length();
|
||||
uint is_equal(Create_field *new_field);
|
||||
private:
|
||||
int do_save_field_metadata(uchar *first_byte);
|
||||
};
|
||||
|
||||
|
||||
|
@ -1493,12 +1546,17 @@ public:
|
|||
void sql_type(String &str) const;
|
||||
uint size_of() const { return sizeof(*this); }
|
||||
enum_field_types real_type() const { return MYSQL_TYPE_ENUM; }
|
||||
uint pack_length_from_metadata(uint field_metadata)
|
||||
{ return (field_metadata & 0x00ff); }
|
||||
uint row_pack_length() { return pack_length(); }
|
||||
virtual bool zero_pack() const { return 0; }
|
||||
bool optimize_range(uint idx, uint part) { return 0; }
|
||||
bool eq_def(Field *field);
|
||||
bool has_charset(void) const { return TRUE; }
|
||||
/* enum and set are sorted as integers */
|
||||
CHARSET_INFO *sort_charset(void) const { return &my_charset_bin; }
|
||||
private:
|
||||
int do_save_field_metadata(uchar *first_byte);
|
||||
};
|
||||
|
||||
|
||||
|
@ -1519,6 +1577,7 @@ public:
|
|||
int store(const char *to,uint length,CHARSET_INFO *charset);
|
||||
int store(double nr) { return Field_set::store((longlong) nr, FALSE); }
|
||||
int store(longlong nr, bool unsigned_val);
|
||||
|
||||
virtual bool zero_pack() const { return 1; }
|
||||
String *val_str(String*,String *);
|
||||
void sql_type(String &str) const;
|
||||
|
@ -1582,6 +1641,10 @@ public:
|
|||
{ get_key_image(buff, length, itRAW); }
|
||||
uint32 pack_length() const { return (uint32) (field_length + 7) / 8; }
|
||||
uint32 pack_length_in_rec() const { return bytes_in_rec; }
|
||||
uint pack_length_from_metadata(uint field_metadata);
|
||||
uint row_pack_length()
|
||||
{ return (bytes_in_rec + ((bit_len > 0) ? 1 : 0)); }
|
||||
int compatible_field_size(uint field_metadata);
|
||||
void sql_type(String &str) const;
|
||||
uchar *pack(uchar *to, const uchar *from, uint max_length=~(uint) 0);
|
||||
virtual const uchar *unpack(uchar *to, const uchar *from, uint param_data);
|
||||
|
@ -1612,6 +1675,7 @@ public:
|
|||
|
||||
private:
|
||||
virtual size_t do_last_null_byte() const;
|
||||
int do_save_field_metadata(uchar *first_byte);
|
||||
};
|
||||
|
||||
|
||||
|
|
155
sql/log_event.cc
155
sql/log_event.cc
|
@ -6382,64 +6382,19 @@ void Rows_log_event::print_helper(FILE *file,
|
|||
Table_map_log_event member functions and support functions
|
||||
**************************************************************************/
|
||||
|
||||
/**
|
||||
* Calculate field metadata size based on the real_type of the field.
|
||||
*
|
||||
* @returns int Size of field metadata.
|
||||
*/
|
||||
#if !defined(MYSQL_CLIENT)
|
||||
const int Table_map_log_event::calc_field_metadata_size()
|
||||
{
|
||||
DBUG_ENTER("Table_map_log_event::calc_field_metadata_size");
|
||||
int size= 0;
|
||||
for (unsigned int i= 0 ; i < m_table->s->fields ; i++)
|
||||
{
|
||||
switch (m_table->s->field[i]->real_type()) {
|
||||
case MYSQL_TYPE_TINY_BLOB:
|
||||
case MYSQL_TYPE_BLOB:
|
||||
case MYSQL_TYPE_MEDIUM_BLOB:
|
||||
case MYSQL_TYPE_LONG_BLOB:
|
||||
case MYSQL_TYPE_DOUBLE:
|
||||
case MYSQL_TYPE_FLOAT:
|
||||
{
|
||||
size++; // Store one byte here.
|
||||
break;
|
||||
}
|
||||
case MYSQL_TYPE_BIT:
|
||||
case MYSQL_TYPE_NEWDECIMAL:
|
||||
case MYSQL_TYPE_ENUM:
|
||||
case MYSQL_TYPE_STRING:
|
||||
case MYSQL_TYPE_VARCHAR:
|
||||
case MYSQL_TYPE_SET:
|
||||
{
|
||||
size= size + 2; // Store short int here.
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_field_metadata_size= size;
|
||||
DBUG_PRINT("info", ("Table_map_log_event: %d bytes in field metadata.",
|
||||
(int)m_field_metadata_size));
|
||||
DBUG_RETURN(m_field_metadata_size);
|
||||
}
|
||||
#endif /* !defined(MYSQL_CLIENT) */
|
||||
|
||||
/**
|
||||
@page How replication of field metadata works.
|
||||
|
||||
When a table map is created, the master first calls
|
||||
Table_map_log_event::get_field_metadata_size() which calculates how many
|
||||
Table_map_log_event::save_field_metadata() which calculates how many
|
||||
values will be in the field metadata. Only those fields that require the
|
||||
extra data are added (see table above). The master then loops through all
|
||||
of the fields in the table calling the method
|
||||
Table_map_log_event::get_field_metadata() which returns the values for the
|
||||
field that will be saved in the metadata and replicated to the slave. Once
|
||||
all fields have been processed, the table map is written to the binlog
|
||||
adding the size of the field metadata and the field metadata to the end of
|
||||
the body of the table map.
|
||||
|
||||
extra data are added. The method also loops through all of the fields in
|
||||
the table calling the method Field::save_field_metadata() which returns the
|
||||
values for the field that will be saved in the metadata and replicated to
|
||||
the slave. Once all fields have been processed, the table map is written to
|
||||
the binlog adding the size of the field metadata and the field metadata to
|
||||
the end of the body of the table map.
|
||||
|
||||
When a table map is read on the slave, the field metadata is read from the
|
||||
table map and passed to the table_def class constructor which saves the
|
||||
field metadata from the table map into an array based on the type of the
|
||||
|
@ -6478,64 +6433,8 @@ int Table_map_log_event::save_field_metadata()
|
|||
DBUG_ENTER("Table_map_log_event::save_field_metadata");
|
||||
int index= 0;
|
||||
for (unsigned int i= 0 ; i < m_table->s->fields ; i++)
|
||||
{
|
||||
switch (m_table->s->field[i]->real_type()) {
|
||||
case MYSQL_TYPE_NEWDECIMAL:
|
||||
{
|
||||
m_field_metadata[index++]=
|
||||
(uchar)((Field_new_decimal *)m_table->s->field[i])->precision;
|
||||
m_field_metadata[index++]=
|
||||
(uchar)((Field_new_decimal *)m_table->s->field[i])->decimals();
|
||||
break;
|
||||
}
|
||||
case MYSQL_TYPE_TINY_BLOB:
|
||||
case MYSQL_TYPE_BLOB:
|
||||
case MYSQL_TYPE_MEDIUM_BLOB:
|
||||
case MYSQL_TYPE_LONG_BLOB:
|
||||
{
|
||||
m_field_metadata[index++]=
|
||||
(uchar)((Field_blob *)m_table->s->field[i])->pack_length_no_ptr();
|
||||
break;
|
||||
}
|
||||
case MYSQL_TYPE_DOUBLE:
|
||||
case MYSQL_TYPE_FLOAT:
|
||||
{
|
||||
m_field_metadata[index++]= (uchar)m_table->s->field[i]->pack_length();
|
||||
break;
|
||||
}
|
||||
case MYSQL_TYPE_BIT:
|
||||
{
|
||||
m_field_metadata[index++]=
|
||||
(uchar)((Field_bit *)m_table->s->field[i])->bit_len;
|
||||
m_field_metadata[index++]=
|
||||
(uchar)((Field_bit *)m_table->s->field[i])->bytes_in_rec;
|
||||
break;
|
||||
}
|
||||
case MYSQL_TYPE_VARCHAR:
|
||||
{
|
||||
char *ptr= (char *)&m_field_metadata[index];
|
||||
int2store(ptr, m_table->s->field[i]->field_length);
|
||||
index= index + 2;
|
||||
break;
|
||||
}
|
||||
case MYSQL_TYPE_STRING:
|
||||
{
|
||||
m_field_metadata[index++]= (uchar)m_table->s->field[i]->real_type();
|
||||
m_field_metadata[index++]= m_table->s->field[i]->field_length;
|
||||
break;
|
||||
}
|
||||
case MYSQL_TYPE_ENUM:
|
||||
case MYSQL_TYPE_SET:
|
||||
{
|
||||
m_field_metadata[index++]= (uchar)m_table->s->field[i]->real_type();
|
||||
m_field_metadata[index++]= m_table->s->field[i]->pack_length();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
DBUG_RETURN(0);
|
||||
index+= m_table->s->field[i]->save_field_metadata(&m_field_metadata[index]);
|
||||
DBUG_RETURN(index);
|
||||
}
|
||||
#endif /* !defined(MYSQL_CLIENT) */
|
||||
|
||||
|
@ -6573,16 +6472,6 @@ Table_map_log_event::Table_map_log_event(THD *thd, TABLE *tbl, ulong tid,
|
|||
m_data_size+= m_dblen + 2; // Include length and terminating \0
|
||||
m_data_size+= m_tbllen + 2; // Include length and terminating \0
|
||||
m_data_size+= 1 + m_colcnt; // COLCNT and column types
|
||||
m_field_metadata_size= calc_field_metadata_size();
|
||||
|
||||
/*
|
||||
Now set the size of the data to the size of the field metadata array
|
||||
plus one or two bytes for number of elements in the field metadata array.
|
||||
*/
|
||||
if (m_field_metadata_size > 255)
|
||||
m_data_size+= m_field_metadata_size + 2;
|
||||
else
|
||||
m_data_size+= m_field_metadata_size + 1;
|
||||
|
||||
/* If malloc fails, catched in is_valid() */
|
||||
if ((m_memory= (uchar*) my_malloc(m_colcnt, MYF(MY_WME))))
|
||||
|
@ -6602,17 +6491,31 @@ Table_map_log_event::Table_map_log_event(THD *thd, TABLE *tbl, ulong tid,
|
|||
m_data_size+= num_null_bytes;
|
||||
m_meta_memory= (uchar *)my_multi_malloc(MYF(MY_WME),
|
||||
&m_null_bits, num_null_bytes,
|
||||
&m_field_metadata, m_field_metadata_size,
|
||||
&m_field_metadata, (m_colcnt * 2),
|
||||
NULL);
|
||||
|
||||
bzero(m_field_metadata, (m_colcnt * 2));
|
||||
|
||||
/*
|
||||
Create an array for the field metadata and store it.
|
||||
*/
|
||||
m_field_metadata_size= save_field_metadata();
|
||||
DBUG_ASSERT(m_field_metadata_size <= (m_colcnt * 2));
|
||||
|
||||
/*
|
||||
Now set the size of the data to the size of the field metadata array
|
||||
plus one or two bytes for number of elements in the field metadata array.
|
||||
*/
|
||||
if (m_field_metadata_size > 255)
|
||||
m_data_size+= m_field_metadata_size + 2;
|
||||
else
|
||||
m_data_size+= m_field_metadata_size + 1;
|
||||
|
||||
bzero(m_null_bits, num_null_bytes);
|
||||
for (unsigned int i= 0 ; i < m_table->s->fields ; ++i)
|
||||
if (m_table->field[i]->maybe_null())
|
||||
m_null_bits[(i / 8)]+= 1 << (i % 8);
|
||||
|
||||
/*
|
||||
Create an array for the field metadata and store it.
|
||||
*/
|
||||
save_field_metadata();
|
||||
}
|
||||
#endif /* !defined(MYSQL_CLIENT) */
|
||||
|
||||
|
|
|
@ -2049,7 +2049,6 @@ public:
|
|||
|
||||
virtual int get_data_size() { return m_data_size; }
|
||||
#ifndef MYSQL_CLIENT
|
||||
virtual const int calc_field_metadata_size();
|
||||
virtual int save_field_metadata();
|
||||
virtual bool write_data_header(IO_CACHE *file);
|
||||
virtual bool write_data_body(IO_CACHE *file);
|
||||
|
@ -2090,7 +2089,7 @@ private:
|
|||
|
||||
uchar *m_field_metadata; // buffer for field metadata
|
||||
/*
|
||||
The size of field metadata buffer set by calling calc_field_metadata_size()
|
||||
The size of field metadata buffer set by calling save_field_metadata()
|
||||
*/
|
||||
ulong m_field_metadata_size;
|
||||
uchar *m_null_bits;
|
||||
|
|
|
@ -156,6 +156,25 @@ table_def::compatible_with(RELAY_LOG_INFO const *rli_arg, TABLE *table)
|
|||
rli->report(ERROR_LEVEL, ER_BINLOG_ROW_WRONG_TABLE_DEF,
|
||||
ER(ER_BINLOG_ROW_WRONG_TABLE_DEF), buf);
|
||||
}
|
||||
/*
|
||||
Check the slave's field size against that of the master.
|
||||
*/
|
||||
if (!error &&
|
||||
!table->field[col]->compatible_field_size(field_metadata(col)))
|
||||
{
|
||||
error= 1;
|
||||
char buf[256];
|
||||
my_snprintf(buf, sizeof(buf), "Column %d size mismatch - "
|
||||
"master has size %d, %s.%s on slave has size %d."
|
||||
" Master's column size should be <= the slave's "
|
||||
"column size.", col,
|
||||
table->field[col]->pack_length_from_metadata(
|
||||
m_field_metadata[col]),
|
||||
tsh->db.str, tsh->table_name.str,
|
||||
table->field[col]->row_pack_length());
|
||||
rli->report(ERROR_LEVEL, ER_BINLOG_ROW_WRONG_TABLE_DEF,
|
||||
ER(ER_BINLOG_ROW_WRONG_TABLE_DEF), buf);
|
||||
}
|
||||
}
|
||||
|
||||
return error;
|
||||
|
|
|
@ -61,7 +61,7 @@ public:
|
|||
*/
|
||||
table_def(field_type *types, ulong size, uchar *field_metadata,
|
||||
int metadata_size, uchar *null_bitmap)
|
||||
: m_size(size), m_type(0),
|
||||
: m_size(size), m_type(0), m_field_metadata_size(metadata_size),
|
||||
m_field_metadata(0), m_null_bits(0), m_memory(NULL)
|
||||
{
|
||||
m_memory= (uchar *)my_multi_malloc(MYF(MY_WME),
|
||||
|
@ -190,7 +190,7 @@ public:
|
|||
uint16 field_metadata(uint index) const
|
||||
{
|
||||
DBUG_ASSERT(index < m_size);
|
||||
if (m_field_metadata)
|
||||
if (m_field_metadata_size)
|
||||
return m_field_metadata[index];
|
||||
else
|
||||
return 0;
|
||||
|
@ -239,6 +239,7 @@ private:
|
|||
ulong m_size; // Number of elements in the types array
|
||||
field_type *m_type; // Array of type descriptors
|
||||
uint16 *m_field_metadata;
|
||||
uint m_field_metadata_size;
|
||||
uchar *m_null_bits;
|
||||
uchar *m_memory;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue