mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
merge from 5.1-rpl+2 repo to a local branch with HB and bug@27808 fixes
This commit is contained in:
commit
6d1ad12428
65 changed files with 2686 additions and 515 deletions
|
|
@ -1,4 +1,4 @@
|
|||
[MYSQL]
|
||||
post_commit_to = "commits@lists.mysql.com"
|
||||
post_push_to = "commits@lists.mysql.com"
|
||||
tree_name = "mysql-5.1"
|
||||
tree_name = "mysql-5.1-rep+2"
|
||||
|
|
|
|||
28
dbug/dbug.c
28
dbug/dbug.c
|
|
@ -1662,6 +1662,27 @@ BOOLEAN _db_keyword_(CODE_STATE *cs, const char *keyword)
|
|||
InList(cs->stack->processes, cs->process));
|
||||
}
|
||||
|
||||
/*
|
||||
* FUNCTION
|
||||
*
|
||||
* _db_keywords_ test keyword formed by a set of strings for member
|
||||
* of keyword list
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* This function is similar to _db_keyword but receives a set of strings to
|
||||
* be concatenated in order to make the keyword to be compared.
|
||||
*/
|
||||
|
||||
BOOLEAN _db_keywords_(const char *function, const char *type)
|
||||
{
|
||||
char dest[_DBUG_MAX_FUNC_NAME_ + 1];
|
||||
|
||||
strxnmov(dest, _DBUG_MAX_FUNC_NAME_, function, type, NULL);
|
||||
|
||||
return _db_strict_keyword_(dest);
|
||||
}
|
||||
|
||||
/*
|
||||
* FUNCTION
|
||||
*
|
||||
|
|
@ -2281,6 +2302,13 @@ void _db_unlock_file_()
|
|||
pthread_mutex_unlock(&THR_LOCK_dbug);
|
||||
}
|
||||
|
||||
const char* _db_get_func_(void)
|
||||
{
|
||||
CODE_STATE *cs= 0;
|
||||
get_code_state_or_return NULL;
|
||||
return cs->func;
|
||||
}
|
||||
|
||||
/*
|
||||
* Here we need the definitions of the clock routine. Add your
|
||||
* own for whatever system that you have.
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ extern "C" {
|
|||
#if !defined(DBUG_OFF) && !defined(_lint)
|
||||
struct _db_code_state_;
|
||||
extern int _db_keyword_(struct _db_code_state_ *cs, const char *keyword);
|
||||
extern int _db_keywords_(const char *, const char *);
|
||||
extern int _db_strict_keyword_(const char *keyword);
|
||||
extern int _db_explain_(struct _db_code_state_ *cs, char *buf, size_t len);
|
||||
extern int _db_explain_init_(char *buf, size_t len);
|
||||
|
|
@ -46,6 +47,7 @@ extern void _db_end_(void);
|
|||
extern void _db_lock_file_(void);
|
||||
extern void _db_unlock_file_(void);
|
||||
extern FILE *_db_fp_(void);
|
||||
extern const char* _db_get_func_(void);
|
||||
|
||||
#define DBUG_ENTER(a) const char *_db_func_, *_db_file_; uint _db_level_; \
|
||||
char **_db_framep_; \
|
||||
|
|
@ -81,6 +83,20 @@ extern FILE *_db_fp_(void);
|
|||
#define DBUG_EXPLAIN(buf,len) _db_explain_(0, (buf),(len))
|
||||
#define DBUG_EXPLAIN_INITIAL(buf,len) _db_explain_init_((buf),(len))
|
||||
#define IF_DBUG(A) A
|
||||
#define _DBUG_MAX_FUNC_NAME_ 255
|
||||
#define DBUG_CHECK_CRASH(func, op) \
|
||||
do { \
|
||||
if (_db_keywords_((func), (op))) \
|
||||
{ abort(); } \
|
||||
} while (0)
|
||||
#define DBUG_CRASH_ENTER(func) \
|
||||
DBUG_ENTER(func); DBUG_CHECK_CRASH(func, "_crash_enter")
|
||||
#define DBUG_CRASH_RETURN(val) \
|
||||
do {DBUG_CHECK_CRASH(_db_get_func_(), "_crash_return"); \
|
||||
DBUG_RETURN(val);} while(0)
|
||||
#define DBUG_CRASH_VOID_RETURN \
|
||||
do {DBUG_CHECK_CRASH (_db_get_func_(), "_crash_return"); \
|
||||
DBUG_VOID_RETURN;} while(0)
|
||||
#else /* No debugger */
|
||||
|
||||
#define DBUG_ENTER(a1)
|
||||
|
|
@ -108,6 +124,9 @@ extern FILE *_db_fp_(void);
|
|||
#define DBUG_EXPLAIN(buf,len)
|
||||
#define DBUG_EXPLAIN_INITIAL(buf,len)
|
||||
#define IF_DBUG(A)
|
||||
#define DBUG_CRASH_ENTER(func)
|
||||
#define DBUG_CRASH_RETURN(val) do { return(val); } while(0)
|
||||
#define DBUG_CRASH_VOID_RETURN do { return; } while(0)
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,3 +6,4 @@ rpl.rpl_row_create_table* # Bug#45576: rpl_row_create_table fails
|
|||
rpl_ndb.rpl_ndb_log # Bug#38998
|
||||
rpl.rpl_innodb_bug28430* @solaris # Bug#46029
|
||||
rpl.rpl_get_master_version_and_clock* # Bug#46931 2009-08-26 alik rpl.rpl_get_master_version_and_clock fails on hpux11.31
|
||||
rpl_ndb.rpl_ndb_extraCol* # BUG#41369 2008-12-10 alik, BUG#47741 2009-09-30 alfranio
|
||||
|
|
|
|||
|
|
@ -407,13 +407,21 @@ sync_slave_with_master;
|
|||
###########################################
|
||||
# Bug#22234, Bug#23907 Extra Slave Col is not
|
||||
# erroring on extra col with no default values.
|
||||
########################################################
|
||||
###############################################################
|
||||
# Error reaction is up to sql_mode of the slave sql (bug#38173)
|
||||
#--echo *** Create t9 on slave ***
|
||||
# Please, check BUG#47741 to see why you are not testing NDB.
|
||||
if (`SELECT $engine_type != 'NDB'`)
|
||||
{
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
eval CREATE TABLE t9 (a INT KEY, b BLOB, c CHAR(5),
|
||||
d TIMESTAMP,
|
||||
e INT NOT NULL) ENGINE=$engine_type;
|
||||
e INT NOT NULL,
|
||||
f text not null,
|
||||
g text,
|
||||
h blob not null,
|
||||
i blob) ENGINE=$engine_type;
|
||||
|
||||
--echo *** Create t9 on Master ***
|
||||
connection master;
|
||||
|
|
@ -428,16 +436,28 @@ START SLAVE;
|
|||
--echo *** Master Data Insert ***
|
||||
connection master;
|
||||
set @b1 = 'b1b1b1b1';
|
||||
|
||||
set @b1 = concat(@b1,@b1);
|
||||
INSERT INTO t9 () 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 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
# the test would stop slave if @@sql_mode for the sql thread
|
||||
# was set to strict. Otherwise, as with this tests setup,
|
||||
# the implicit defaults will be inserted into fields even though
|
||||
# they are declared without DEFAULT clause.
|
||||
|
||||
sync_slave_with_master;
|
||||
select * from t9;
|
||||
|
||||
# todo: fix Bug #43992 slave sql thread can't tune own sql_mode ...
|
||||
# and add/restore waiting for stop test
|
||||
|
||||
#--source include/wait_for_slave_sql_to_stop.inc
|
||||
#--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
#--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;
|
||||
}
|
||||
|
||||
#--echo *** Drop t9 ***
|
||||
#connection master;
|
||||
|
|
|
|||
364
mysql-test/extra/rpl_tests/rpl_not_null.test
Normal file
364
mysql-test/extra/rpl_tests/rpl_not_null.test
Normal file
|
|
@ -0,0 +1,364 @@
|
|||
#################################################################################
|
||||
# This test checks if the replication between "null" fields to either "null"
|
||||
# fields or "not null" fields works properly. In the first case, the execution
|
||||
# should work fine. In the second case, it may fail according to the sql_mode
|
||||
# being used.
|
||||
#
|
||||
# The test is devided in three main parts:
|
||||
#
|
||||
# 1 - NULL --> NULL (no failures)
|
||||
# 2 - NULL --> NOT NULL ( sql-mode = STRICT and failures)
|
||||
# 3 - NULL --> NOT NULL ( sql-mode != STRICT and no failures)
|
||||
#
|
||||
#################################################################################
|
||||
connection master;
|
||||
|
||||
SET SQL_LOG_BIN= 0;
|
||||
eval CREATE TABLE t1(`a` INT, `b` DATE DEFAULT NULL,
|
||||
`c` INT DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
|
||||
eval CREATE TABLE t2(`a` INT, `b` DATE DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
|
||||
eval CREATE TABLE t3(`a` INT, `b` DATE DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
|
||||
eval CREATE TABLE t4(`a` INT, `b` DATE DEFAULT NULL,
|
||||
`c` INT DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
SET SQL_LOG_BIN= 1;
|
||||
|
||||
connection slave;
|
||||
|
||||
eval CREATE TABLE t1(`a` INT, `b` DATE DEFAULT NULL,
|
||||
`c` INT DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
|
||||
eval CREATE TABLE t2(`a` INT, `b` DATE DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
|
||||
eval CREATE TABLE t3(`a` INT, `b` DATE DEFAULT '0000-00-00',
|
||||
`c` INT DEFAULT 500,
|
||||
PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
|
||||
eval CREATE TABLE t4(`a` INT, `b` DATE DEFAULT '0000-00-00',
|
||||
PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
|
||||
--echo ************* EXECUTION WITH INSERTS *************
|
||||
connection master;
|
||||
INSERT INTO t1(a,b,c) VALUES (1, null, 1);
|
||||
INSERT INTO t1(a,b,c) VALUES (2,'1111-11-11', 2);
|
||||
INSERT INTO t1(a,b) VALUES (3, null);
|
||||
INSERT INTO t1(a,c) VALUES (4, 4);
|
||||
INSERT INTO t1(a) VALUES (5);
|
||||
|
||||
INSERT INTO t2(a,b) VALUES (1, null);
|
||||
INSERT INTO t2(a,b) VALUES (2,'1111-11-11');
|
||||
INSERT INTO t2(a) VALUES (3);
|
||||
|
||||
INSERT INTO t3(a,b) VALUES (1, null);
|
||||
INSERT INTO t3(a,b) VALUES (2,'1111-11-11');
|
||||
INSERT INTO t3(a) VALUES (3);
|
||||
|
||||
INSERT INTO t4(a,b,c) VALUES (1, null, 1);
|
||||
INSERT INTO t4(a,b,c) VALUES (2,'1111-11-11', 2);
|
||||
INSERT INTO t4(a,b) VALUES (3, null);
|
||||
INSERT INTO t4(a,c) VALUES (4, 4);
|
||||
INSERT INTO t4(a) VALUES (5);
|
||||
|
||||
--echo ************* SHOWING THE RESULT SETS WITH INSERTS *************
|
||||
sync_slave_with_master;
|
||||
|
||||
--echo TABLES t1 and t2 must be equal otherwise an error will be thrown.
|
||||
let $diff_table_1=master:test.t1;
|
||||
let $diff_table_2=slave:test.t1;
|
||||
source include/diff_tables.inc;
|
||||
|
||||
let $diff_table_1=master:test.t2;
|
||||
let $diff_table_2=slave:test.t2;
|
||||
source include/diff_tables.inc;
|
||||
|
||||
--echo TABLES t2 and t3 must be different.
|
||||
connection master;
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
connection slave;
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
connection master;
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
connection slave;
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
|
||||
--echo ************* EXECUTION WITH UPDATES and REPLACES *************
|
||||
connection master;
|
||||
DELETE FROM t1;
|
||||
INSERT INTO t1(a,b,c) VALUES (1,'1111-11-11', 1);
|
||||
REPLACE INTO t1(a,b,c) VALUES (2,'1111-11-11', 2);
|
||||
UPDATE t1 set b= NULL, c= 300 where a= 1;
|
||||
REPLACE INTO t1(a,b,c) VALUES (2, NULL, 300);
|
||||
|
||||
--echo ************* SHOWING THE RESULT SETS WITH UPDATES and REPLACES *************
|
||||
sync_slave_with_master;
|
||||
|
||||
--echo TABLES t1 and t2 must be equal otherwise an error will be thrown.
|
||||
let $diff_table_1=master:test.t1;
|
||||
let $diff_table_2=slave:test.t1;
|
||||
source include/diff_tables.inc;
|
||||
|
||||
--echo ************* CLEANING *************
|
||||
connection master;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t4;
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
connection master;
|
||||
|
||||
SET SQL_LOG_BIN= 0;
|
||||
eval CREATE TABLE t1 (`a` INT, `b` BIT DEFAULT NULL, `c` BIT DEFAULT NULL,
|
||||
PRIMARY KEY (`a`)) ENGINE= $engine;
|
||||
SET SQL_LOG_BIN= 1;
|
||||
|
||||
connection slave;
|
||||
|
||||
eval CREATE TABLE t1 (`a` INT, `b` BIT DEFAULT b'01', `c` BIT DEFAULT NULL,
|
||||
PRIMARY KEY (`a`)) ENGINE= $engine;
|
||||
|
||||
--echo ************* EXECUTION WITH INSERTS *************
|
||||
connection master;
|
||||
INSERT INTO t1(a,b,c) VALUES (1, null, b'01');
|
||||
INSERT INTO t1(a,b,c) VALUES (2,b'00', b'01');
|
||||
INSERT INTO t1(a,b) VALUES (3, null);
|
||||
INSERT INTO t1(a,c) VALUES (4, b'01');
|
||||
INSERT INTO t1(a) VALUES (5);
|
||||
|
||||
--echo ************* SHOWING THE RESULT SETS WITH INSERTS *************
|
||||
--echo TABLES t1 and t2 must be different.
|
||||
sync_slave_with_master;
|
||||
connection master;
|
||||
SELECT a,b+0,c+0 FROM t1 ORDER BY a;
|
||||
connection slave;
|
||||
SELECT a,b+0,c+0 FROM t1 ORDER BY a;
|
||||
|
||||
--echo ************* EXECUTION WITH UPDATES and REPLACES *************
|
||||
connection master;
|
||||
DELETE FROM t1;
|
||||
INSERT INTO t1(a,b,c) VALUES (1,b'00', b'01');
|
||||
REPLACE INTO t1(a,b,c) VALUES (2,b'00',b'01');
|
||||
UPDATE t1 set b= NULL, c= b'00' where a= 1;
|
||||
REPLACE INTO t1(a,b,c) VALUES (2, NULL, b'00');
|
||||
|
||||
--echo ************* SHOWING THE RESULT SETS WITH UPDATES and REPLACES *************
|
||||
--echo TABLES t1 and t2 must be equal otherwise an error will be thrown.
|
||||
sync_slave_with_master;
|
||||
let $diff_table_1=master:test.t1;
|
||||
let $diff_table_2=slave:test.t1;
|
||||
source include/diff_tables.inc;
|
||||
|
||||
connection master;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
--echo ################################################################################
|
||||
--echo # NULL ---> NOT NULL (STRICT MODE)
|
||||
--echo # UNCOMMENT THIS AFTER FIXING BUG#43992
|
||||
--echo ################################################################################
|
||||
#connection slave;
|
||||
#SET GLOBAL sql_mode="TRADITIONAL";
|
||||
#
|
||||
#STOP SLAVE;
|
||||
#--source include/wait_for_slave_to_stop.inc
|
||||
#START SLAVE;
|
||||
#--source include/wait_for_slave_to_start.inc
|
||||
#
|
||||
#let $y=0;
|
||||
#while (`select $y < 6`)
|
||||
#{
|
||||
# connection master;
|
||||
#
|
||||
# SET SQL_LOG_BIN= 0;
|
||||
# eval CREATE TABLE t1(`a` INT NOT NULL, `b` INT,
|
||||
# PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
# eval CREATE TABLE t2(`a` INT NOT NULL, `b` INT,
|
||||
# PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
# eval CREATE TABLE t3(`a` INT NOT NULL, `b` INT,
|
||||
# PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
# SET SQL_LOG_BIN= 1;
|
||||
#
|
||||
# connection slave;
|
||||
#
|
||||
# eval CREATE TABLE t1(`a` INT NOT NULL, `b` INT NOT NULL,
|
||||
# `c` INT NOT NULL,
|
||||
# PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
# eval CREATE TABLE t2(`a` INT NOT NULL, `b` INT NOT NULL,
|
||||
# `c` INT,
|
||||
# PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
# eval CREATE TABLE t3(`a` INT NOT NULL, `b` INT NOT NULL,
|
||||
# `c` INT DEFAULT 500,
|
||||
# PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
#
|
||||
# if (`select $y=0`)
|
||||
# {
|
||||
# --echo ************* EXECUTION WITH INSERTS *************
|
||||
# connection master;
|
||||
# INSERT INTO t1(a) VALUES (1);
|
||||
# }
|
||||
#
|
||||
# if (`select $y=1`)
|
||||
# {
|
||||
# --echo ************* EXECUTION WITH INSERTS *************
|
||||
# connection master;
|
||||
# INSERT INTO t1(a, b) VALUES (1, NULL);
|
||||
# }
|
||||
#
|
||||
# if (`select $y=2`)
|
||||
# {
|
||||
# --echo ************* EXECUTION WITH UPDATES *************
|
||||
# connection master;
|
||||
# INSERT INTO t3(a, b) VALUES (1, 1);
|
||||
# INSERT INTO t3(a, b) VALUES (2, 1);
|
||||
# UPDATE t3 SET b = NULL where a= 1;
|
||||
# }
|
||||
#
|
||||
# if (`select $y=3`)
|
||||
# {
|
||||
# --echo ************* EXECUTION WITH INSERTS/REPLACES *************
|
||||
# connection master;
|
||||
# REPLACE INTO t3(a, b) VALUES (1, null);
|
||||
# }
|
||||
#
|
||||
# if (`select $y=4`)
|
||||
# {
|
||||
# --echo ************* EXECUTION WITH UPDATES/REPLACES *************
|
||||
# connection master;
|
||||
# INSERT INTO t3(a, b) VALUES (1, 1);
|
||||
# REPLACE INTO t3(a, b) VALUES (1, null);
|
||||
# }
|
||||
#
|
||||
# if (`select $y=5`)
|
||||
# {
|
||||
# --echo ************* EXECUTION WITH MULTI-ROW INSERTS *************
|
||||
# connection master;
|
||||
#
|
||||
# SET SQL_LOG_BIN= 0;
|
||||
# INSERT INTO t2(a, b) VALUES (1, 1);
|
||||
# INSERT INTO t2(a, b) VALUES (2, 1);
|
||||
# INSERT INTO t2(a, b) VALUES (3, null);
|
||||
# INSERT INTO t2(a, b) VALUES (4, 1);
|
||||
# INSERT INTO t2(a, b) VALUES (5, 1);
|
||||
# SET SQL_LOG_BIN= 1;
|
||||
#
|
||||
# INSERT INTO t2 SELECT a + 10, b from t2;
|
||||
# --echo The statement below is just executed to stop processing
|
||||
# INSERT INTO t1(a) VALUES (1);
|
||||
# }
|
||||
#
|
||||
# --echo ************* SHOWING THE RESULT SETS *************
|
||||
# connection slave;
|
||||
# --source include/wait_for_slave_sql_to_stop.inc
|
||||
# connection master;
|
||||
# SELECT * FROM t1 ORDER BY a;
|
||||
# connection slave;
|
||||
# SELECT * FROM t1 ORDER BY a;
|
||||
# connection master;
|
||||
# SELECT * FROM t2 ORDER BY a;
|
||||
# connection slave;
|
||||
# SELECT * FROM t2 ORDER BY a;
|
||||
# connection master;
|
||||
# SELECT * FROM t3 ORDER BY a;
|
||||
# connection slave;
|
||||
# SELECT * FROM t3 ORDER BY a;
|
||||
# --source include/reset_master_and_slave.inc
|
||||
#
|
||||
# connection master;
|
||||
#
|
||||
# DROP TABLE t1;
|
||||
# DROP TABLE t2;
|
||||
# DROP TABLE t3;
|
||||
#
|
||||
# sync_slave_with_master;
|
||||
#
|
||||
# inc $y;
|
||||
#}
|
||||
#connection slave;
|
||||
#SET GLOBAL sql_mode="";
|
||||
#
|
||||
#STOP SLAVE;
|
||||
#source include/wait_for_slave_to_stop.inc;
|
||||
#START SLAVE;
|
||||
#--source include/wait_for_slave_to_start.inc
|
||||
|
||||
--echo ################################################################################
|
||||
--echo # NULL ---> NOT NULL (NON-STRICT MODE)
|
||||
--echo ################################################################################
|
||||
connection master;
|
||||
|
||||
SET SQL_LOG_BIN= 0;
|
||||
eval CREATE TABLE t1(`a` INT NOT NULL, `b` INT,
|
||||
PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
eval CREATE TABLE t2(`a` INT NOT NULL, `b` INT,
|
||||
PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
eval CREATE TABLE t3(`a` INT NOT NULL, `b` INT,
|
||||
PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
SET SQL_LOG_BIN= 1;
|
||||
|
||||
connection slave;
|
||||
|
||||
eval CREATE TABLE t1(`a` INT NOT NULL, `b` INT NOT NULL,
|
||||
`c` INT NOT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
eval CREATE TABLE t2(`a` INT NOT NULL, `b` INT NOT NULL,
|
||||
`c` INT,
|
||||
PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
eval CREATE TABLE t3(`a` INT NOT NULL, `b` INT NOT NULL,
|
||||
`c` INT DEFAULT 500,
|
||||
PRIMARY KEY(`a`)) ENGINE=$engine DEFAULT CHARSET=LATIN1;
|
||||
|
||||
--echo ************* EXECUTION WITH INSERTS *************
|
||||
connection master;
|
||||
INSERT INTO t1(a) VALUES (1);
|
||||
INSERT INTO t1(a, b) VALUES (2, NULL);
|
||||
INSERT INTO t1(a, b) VALUES (3, 1);
|
||||
|
||||
INSERT INTO t2(a) VALUES (1);
|
||||
INSERT INTO t2(a, b) VALUES (2, NULL);
|
||||
INSERT INTO t2(a, b) VALUES (3, 1);
|
||||
|
||||
INSERT INTO t3(a) VALUES (1);
|
||||
INSERT INTO t3(a, b) VALUES (2, NULL);
|
||||
INSERT INTO t3(a, b) VALUES (3, 1);
|
||||
INSERT INTO t3(a, b) VALUES (4, 1);
|
||||
REPLACE INTO t3(a, b) VALUES (5, null);
|
||||
|
||||
REPLACE INTO t3(a, b) VALUES (3, null);
|
||||
UPDATE t3 SET b = NULL where a = 4;
|
||||
|
||||
--echo ************* SHOWING THE RESULT SETS *************
|
||||
connection master;
|
||||
sync_slave_with_master;
|
||||
|
||||
connection master;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
connection slave;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
connection master;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
connection slave;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
connection master;
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
connection slave;
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
|
||||
connection master;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
|
||||
sync_slave_with_master;
|
||||
|
|
@ -111,21 +111,18 @@ SELECT a,b,x FROM t1_int ORDER BY a;
|
|||
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
|
||||
SELECT a,b,x FROM t1_char ORDER BY a;
|
||||
|
||||
# Each of these inserts should generate an error and stop the slave
|
||||
|
||||
connection master;
|
||||
INSERT INTO t9 VALUES (2);
|
||||
sync_slave_with_master;
|
||||
# Now slave is guaranteed to be running
|
||||
connection master;
|
||||
INSERT INTO t1_nodef VALUES (1,2);
|
||||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 20 <Last_Error> 22 # 23 # 33 # 35 <Last_IO_Errno> 36 <Last_IO_Error> 38 <Last_SQL_Error>
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
||||
# Last insert on wider slave table succeeds while slave sql sql_mode permits.
|
||||
# The previous version of the above test expected slave sql to stop.
|
||||
# bug#38173 relaxed conditions to stop only with the strict mode.
|
||||
sync_slave_with_master;
|
||||
select count(*) from t1_nodef;
|
||||
|
||||
#
|
||||
# Replicating to tables with fewer columns at the end works as of WL#3228
|
||||
|
|
|
|||
121
mysql-test/extra/rpl_tests/rpl_show_relaylog_events.inc
Normal file
121
mysql-test/extra/rpl_tests/rpl_show_relaylog_events.inc
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
-- connection master
|
||||
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (3);
|
||||
INSERT INTO t1 VALUES (4);
|
||||
INSERT INTO t1 VALUES (5);
|
||||
INSERT INTO t1 VALUES (6);
|
||||
|
||||
-- echo [MASTER] ********* SOW BINLOG EVENTS IN ... *********
|
||||
let $binary_log_file= master-bin.000001;
|
||||
-- source include/show_binlog_events.inc
|
||||
|
||||
-- echo [MASTER] ********* SOW BINLOG EVENTS *********
|
||||
let $binary_log_file= ;
|
||||
-- source include/show_binlog_events.inc
|
||||
|
||||
-- echo [MASTER] ********* SOW BINLOG EVENTS ... LIMIT rows *********
|
||||
let $binary_log_file= ;
|
||||
let $binary_log_limit_row= 3;
|
||||
-- source include/show_binlog_events.inc
|
||||
|
||||
-- echo [MASTER] ********* SOW BINLOG EVENTS ... LIMIT offset,rows *********
|
||||
let $binary_log_file= ;
|
||||
let $binary_log_limit_row= 3;
|
||||
let $binary_log_limit_offset= 1;
|
||||
-- source include/show_binlog_events.inc
|
||||
|
||||
# clear show_binlog_event/show_relaylog_events parameters
|
||||
let $binary_log_file= ;
|
||||
let $binary_log_limit_row= ;
|
||||
let $binary_log_limit_offset= ;
|
||||
|
||||
-- sync_slave_with_master
|
||||
|
||||
-- echo [SLAVE] ********* SOW BINLOG EVENTS IN ... *********
|
||||
let $binary_log_file= slave-bin.000001;
|
||||
-- source include/show_binlog_events.inc
|
||||
|
||||
-- echo [SLAVE] ********* SOW BINLOG EVENTS *********
|
||||
let $binary_log_file= ;
|
||||
-- source include/show_binlog_events.inc
|
||||
|
||||
-- echo [SLAVE] ********* SOW BINLOG EVENTS ... LIMIT rows *********
|
||||
let $binary_log_file= ;
|
||||
let $binary_log_limit_row= 3;
|
||||
-- source include/show_binlog_events.inc
|
||||
|
||||
-- echo [SLAVE] ********* SOW BINLOG EVENTS ... LIMIT offset,rows *********
|
||||
let $binary_log_file= ;
|
||||
let $binary_log_limit_row= 3;
|
||||
let $binary_log_limit_offset= 1;
|
||||
-- source include/show_binlog_events.inc
|
||||
|
||||
# clear show_binlog_event/show_relaylog_events parameters
|
||||
let $binary_log_file= ;
|
||||
let $binary_log_limit_row= ;
|
||||
let $binary_log_limit_offset= ;
|
||||
|
||||
-- echo [SLAVE] ********* SOW RELAYLOG EVENTS IN ... *********
|
||||
let $binary_log_file= slave-relay-bin.000003;
|
||||
-- source include/show_relaylog_events.inc
|
||||
|
||||
-- echo [SLAVE] ********* SOW RELAYLOG EVENTS *********
|
||||
let $binary_log_file= ;
|
||||
-- source include/show_relaylog_events.inc
|
||||
|
||||
-- echo [MASTER] ********* SOW RELAYLOG EVENTS ... LIMIT rows *********
|
||||
let $binary_log_file= slave-relay-bin.000003;
|
||||
let $binary_log_limit_row= 3;
|
||||
let $binary_log_limit_offset= ;
|
||||
-- source include/show_relaylog_events.inc
|
||||
|
||||
-- echo [MASTER] ********* SOW RELAYLOG EVENTS ... LIMIT offset,rows *********
|
||||
let $binary_log_file= slave-relay-bin.000003;
|
||||
let $binary_log_limit_offset= 1;
|
||||
let $binary_log_limit_row= 3;
|
||||
-- source include/show_relaylog_events.inc
|
||||
|
||||
FLUSH LOGS;
|
||||
|
||||
-- connection master
|
||||
FLUSH LOGS;
|
||||
DROP TABLE t1;
|
||||
|
||||
# clear show_binlog_event/show_relaylog_events parameters
|
||||
let $binary_log_file= ;
|
||||
let $binary_log_limit_row= ;
|
||||
let $binary_log_limit_offset= ;
|
||||
|
||||
-- echo [MASTER] ********* SOW BINLOG EVENTS IN ... *********
|
||||
let $binary_log_file= master-bin.000002;
|
||||
-- source include/show_binlog_events.inc
|
||||
|
||||
-- echo [MASTER] ********* SOW BINLOG EVENTS *********
|
||||
let $binary_log_file= ;
|
||||
-- source include/show_binlog_events.inc
|
||||
|
||||
-- sync_slave_with_master
|
||||
|
||||
-- echo [SLAVE] ********* SOW BINLOG EVENTS IN ... *********
|
||||
let $binary_log_file= slave-bin.000002;
|
||||
-- source include/show_binlog_events.inc
|
||||
|
||||
-- echo [SLAVE] ********* SOW BINLOG EVENTS *********
|
||||
let $binary_log_file= ;
|
||||
-- source include/show_binlog_events.inc
|
||||
|
||||
-- echo [SLAVE] ********* SOW RELAYLOG EVENTS IN ... *********
|
||||
let $binary_log_file= slave-relay-bin.000005;
|
||||
-- source include/show_relaylog_events.inc
|
||||
|
||||
-- echo [SLAVE] ********* SOW RELAYLOG EVENTS *********
|
||||
let $binary_log_file= ;
|
||||
-- source include/show_relaylog_events.inc
|
||||
|
||||
# clear show_binlog_event/show_relaylog_events parameters
|
||||
let $binary_log_name= ;
|
||||
let $binary_log_limit_row= ;
|
||||
let $binary_log_limit_offset= ;
|
||||
|
|
@ -1,10 +1,35 @@
|
|||
# $binlog_start can be set by caller or take a default value
|
||||
# $binary_log_file the name of the log file show
|
||||
# $binary_log_limit_row - sets the number of binlog rows to be returned
|
||||
# $binary_log_limit_offset - sets the offset where to start returning events
|
||||
|
||||
let $show_binlog_events= show binlog events;
|
||||
|
||||
if (!$binlog_start)
|
||||
{
|
||||
# defaults to chop the first event in the binary log
|
||||
let $binlog_start=107;
|
||||
}
|
||||
|
||||
if (!`SELECT '$binary_log_file' = ''`)
|
||||
{
|
||||
let $show_binlog_events= $show_binlog_events in '$binary_log_file';
|
||||
}
|
||||
let $show_binlog_events= $show_binlog_events from $binlog_start;
|
||||
|
||||
if ($binary_log_limit_row)
|
||||
{
|
||||
let $limit= limit;
|
||||
if ($binary_log_limit_offset)
|
||||
{
|
||||
let $limit= $limit $binary_log_limit_offset, ;
|
||||
}
|
||||
|
||||
let $limit= $limit $binary_log_limit_row;
|
||||
let $show_binlog_events= $show_binlog_events $limit;
|
||||
}
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $binlog_start <binlog_start>
|
||||
--replace_column 2 # 4 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/
|
||||
--eval show binlog events from $binlog_start
|
||||
--eval $show_binlog_events
|
||||
|
|
|
|||
35
mysql-test/include/show_relaylog_events.inc
Normal file
35
mysql-test/include/show_relaylog_events.inc
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# $binlog_start can be set by caller or take a default value
|
||||
# $binary_log_file the name of the log file show
|
||||
# $binary_log_limit_row - sets the number of binlog rows to be returned
|
||||
# $binary_log_limit_offset - sets the offset where to start returning events
|
||||
|
||||
let $show_binlog_events= show relaylog events;
|
||||
|
||||
if (!$binlog_start)
|
||||
{
|
||||
# defaults to chop the first event in the binary log
|
||||
let $binlog_start=106;
|
||||
}
|
||||
|
||||
if (!`SELECT '$binary_log_file' = ''`)
|
||||
{
|
||||
let $show_binlog_events= $show_binlog_events in '$binary_log_file';
|
||||
}
|
||||
let $show_binlog_events= $show_binlog_events from $binlog_start;
|
||||
|
||||
if ($binary_log_limit_row)
|
||||
{
|
||||
let $limit= limit;
|
||||
if ($binary_log_limit_offset)
|
||||
{
|
||||
let $limit= $limit $binary_log_limit_offset, ;
|
||||
}
|
||||
|
||||
let $limit= $limit $binary_log_limit_row;
|
||||
let $show_binlog_events= $show_binlog_events $limit;
|
||||
}
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $binlog_start <binlog_start>
|
||||
--replace_column 2 # 4 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ /Server ver:.*$/SERVER_VERSION, BINLOG_VERSION/
|
||||
--eval $show_binlog_events
|
||||
|
|
@ -22,7 +22,7 @@ eval $test_insert;
|
|||
|
||||
connection slave;
|
||||
START SLAVE;
|
||||
wait_for_slave_to_stop;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ let $counter= 500;
|
|||
let $mysql_errno= 0;
|
||||
while (!$mysql_errno)
|
||||
{
|
||||
--error 0,1053,2002,2006,2013
|
||||
--error 0,1040,1053,2002,2003,2006,2013
|
||||
show status;
|
||||
|
||||
dec $counter;
|
||||
|
|
|
|||
8
mysql-test/suite/binlog/r/binlog_max_extension.result
Normal file
8
mysql-test/suite/binlog/r/binlog_max_extension.result
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
call mtr.add_suppression("Next log extension: 2147483647. Remaining log filename extensions: 0.");
|
||||
call mtr.add_suppression("Log filename extension number exhausted:");
|
||||
call mtr.add_suppression("Can't generate a unique log-filename");
|
||||
RESET MASTER;
|
||||
FLUSH LOGS;
|
||||
Warnings:
|
||||
Warning 1098 Can't generate a unique log-filename master-bin.(1-999)
|
||||
|
||||
92
mysql-test/suite/binlog/t/binlog_max_extension.test
Normal file
92
mysql-test/suite/binlog/t/binlog_max_extension.test
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
# BUG#40611: MySQL cannot make a binary log after sequential number beyond
|
||||
# unsigned long.
|
||||
#
|
||||
# Problem statement
|
||||
# =================
|
||||
#
|
||||
# Extension for log file names might be created with negative
|
||||
# numbers (when counter used would wrap around), causing server
|
||||
# failure when incrementing -00001 (reaching number 000000
|
||||
# extension).
|
||||
#
|
||||
# Test
|
||||
# ====
|
||||
# This tests aims at testing the a patch that removes negatives
|
||||
# numbers from log name extensions and checks that the server
|
||||
# reports gracefully that the limit has been reached.
|
||||
#
|
||||
# It instruments index file to point to a log file close to
|
||||
# the new maximum and calls flush logs to get warning.
|
||||
#
|
||||
|
||||
call mtr.add_suppression("Next log extension: 2147483647. Remaining log filename extensions: 0.");
|
||||
call mtr.add_suppression("Log filename extension number exhausted:");
|
||||
call mtr.add_suppression("Can't generate a unique log-filename");
|
||||
|
||||
|
||||
-- source include/have_log_bin.inc
|
||||
RESET MASTER;
|
||||
|
||||
-- let $MYSQLD_DATADIR= `select @@datadir`
|
||||
|
||||
###############################################
|
||||
# check hitting maximum file name extension:
|
||||
###############################################
|
||||
|
||||
##########
|
||||
# Prepare
|
||||
##########
|
||||
|
||||
# 1. Stop master server
|
||||
-- write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
wait
|
||||
EOF
|
||||
-- shutdown_server 10
|
||||
-- source include/wait_until_disconnected.inc
|
||||
|
||||
# 2. Prepare log and index file
|
||||
-- copy_file $MYSQLD_DATADIR/master-bin.index $MYSQLD_DATADIR/master-bin.index.orig
|
||||
-- copy_file $MYSQLD_DATADIR/master-bin.000001 $MYSQLD_DATADIR/master-bin.2147483646
|
||||
-- append_file $MYSQLD_DATADIR/master-bin.index
|
||||
master-bin.2147483646
|
||||
EOF
|
||||
|
||||
# 3. Restart the server
|
||||
-- append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
restart
|
||||
EOF
|
||||
-- enable_reconnect
|
||||
-- source include/wait_until_connected_again.inc
|
||||
|
||||
###########
|
||||
# Assertion
|
||||
###########
|
||||
|
||||
# assertion: should throw warning
|
||||
FLUSH LOGS;
|
||||
|
||||
##############
|
||||
# Clean up
|
||||
##############
|
||||
|
||||
# 1. Stop the server
|
||||
-- write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
wait
|
||||
EOF
|
||||
-- shutdown_server 10
|
||||
-- source include/wait_until_disconnected.inc
|
||||
|
||||
# 2. Undo changes to index and log files
|
||||
-- remove_file $MYSQLD_DATADIR/master-bin.index
|
||||
-- copy_file $MYSQLD_DATADIR/master-bin.index.orig $MYSQLD_DATADIR/master-bin.index
|
||||
-- remove_file $MYSQLD_DATADIR/master-bin.index.orig
|
||||
|
||||
-- remove_file $MYSQLD_DATADIR/master-bin.2147483646
|
||||
-- remove_file $MYSQLD_DATADIR/master-bin.2147483647
|
||||
|
||||
# 3. Restart the server
|
||||
-- append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
restart
|
||||
EOF
|
||||
-- enable_reconnect
|
||||
-- source include/wait_until_connected_again.inc
|
||||
16
mysql-test/suite/rpl/r/rpl_empty_master_host.result
Normal file
16
mysql-test/suite/rpl/r/rpl_empty_master_host.result
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
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;
|
||||
STOP SLAVE;
|
||||
Master_Host = '127.0.0.1' (expected '127.0.0.1')
|
||||
CHANGE MASTER TO MASTER_HOST="";
|
||||
ERROR HY000: Incorrect arguments to MASTER_HOST
|
||||
Master_Host = '127.0.0.1' (expected '127.0.0.1')
|
||||
CHANGE MASTER TO MASTER_HOST="foo";
|
||||
Master_Host = 'foo' (expected 'foo')
|
||||
CHANGE MASTER TO MASTER_HOST="127.0.0.1";
|
||||
Master_Host = '127.0.0.1' (expected '127.0.0.1')
|
||||
START SLAVE;
|
||||
|
|
@ -414,7 +414,11 @@ STOP SLAVE;
|
|||
RESET SLAVE;
|
||||
CREATE TABLE t9 (a INT KEY, b BLOB, c CHAR(5),
|
||||
d TIMESTAMP,
|
||||
e INT NOT NULL) ENGINE='InnoDB';
|
||||
e INT NOT NULL,
|
||||
f text not null,
|
||||
g text,
|
||||
h blob not null,
|
||||
i blob) ENGINE='InnoDB';
|
||||
*** Create t9 on Master ***
|
||||
CREATE TABLE t9 (a INT PRIMARY KEY, b BLOB, c CHAR(5)
|
||||
) ENGINE='InnoDB';
|
||||
|
|
@ -425,49 +429,11 @@ START SLAVE;
|
|||
set @b1 = 'b1b1b1b1';
|
||||
set @b1 = concat(@b1,@b1);
|
||||
INSERT INTO t9 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
||||
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 1364
|
||||
Last_Error Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 331
|
||||
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 1364
|
||||
Last_SQL_Error Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 331
|
||||
Replicate_Ignore_Server_Ids
|
||||
Master_Server_Id 1
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
select * from t9;
|
||||
a b c d e f g h i
|
||||
1 b1b1b1b1b1b1b1b1 Kyle 0000-00-00 00:00:00 0 NULL NULL
|
||||
2 b1b1b1b1b1b1b1b1 JOE 0000-00-00 00:00:00 0 NULL NULL
|
||||
3 b1b1b1b1b1b1b1b1 QA 0000-00-00 00:00:00 0 NULL NULL
|
||||
*** Create t10 on slave ***
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
|
|
|
|||
|
|
@ -414,7 +414,11 @@ STOP SLAVE;
|
|||
RESET SLAVE;
|
||||
CREATE TABLE t9 (a INT KEY, b BLOB, c CHAR(5),
|
||||
d TIMESTAMP,
|
||||
e INT NOT NULL) ENGINE='MyISAM';
|
||||
e INT NOT NULL,
|
||||
f text not null,
|
||||
g text,
|
||||
h blob not null,
|
||||
i blob) ENGINE='MyISAM';
|
||||
*** Create t9 on Master ***
|
||||
CREATE TABLE t9 (a INT PRIMARY KEY, b BLOB, c CHAR(5)
|
||||
) ENGINE='MyISAM';
|
||||
|
|
@ -425,49 +429,11 @@ START SLAVE;
|
|||
set @b1 = 'b1b1b1b1';
|
||||
set @b1 = concat(@b1,@b1);
|
||||
INSERT INTO t9 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
||||
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 1364
|
||||
Last_Error Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 331
|
||||
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 1364
|
||||
Last_SQL_Error Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 331
|
||||
Replicate_Ignore_Server_Ids
|
||||
Master_Server_Id 1
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
select * from t9;
|
||||
a b c d e f g h i
|
||||
1 b1b1b1b1b1b1b1b1 Kyle 0000-00-00 00:00:00 0 NULL NULL
|
||||
2 b1b1b1b1b1b1b1b1 JOE 0000-00-00 00:00:00 0 NULL NULL
|
||||
3 b1b1b1b1b1b1b1b1 QA 0000-00-00 00:00:00 0 NULL NULL
|
||||
*** Create t10 on slave ***
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ relay_log MYSQLD_DATADIR/relay-log
|
|||
relay_log_index
|
||||
relay_log_info_file relay-log.info
|
||||
relay_log_purge ON
|
||||
relay_log_recovery OFF
|
||||
relay_log_space_limit 0
|
||||
stop slave;
|
||||
change master to master_host='127.0.0.1',master_user='root',
|
||||
|
|
|
|||
202
mysql-test/suite/rpl/r/rpl_not_null_innodb.result
Normal file
202
mysql-test/suite/rpl/r/rpl_not_null_innodb.result
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
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;
|
||||
SET SQL_LOG_BIN= 0;
|
||||
CREATE TABLE t1(`a` INT, `b` DATE DEFAULT NULL,
|
||||
`c` INT DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=Innodb DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t2(`a` INT, `b` DATE DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=Innodb DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t3(`a` INT, `b` DATE DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=Innodb DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t4(`a` INT, `b` DATE DEFAULT NULL,
|
||||
`c` INT DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=Innodb DEFAULT CHARSET=LATIN1;
|
||||
SET SQL_LOG_BIN= 1;
|
||||
CREATE TABLE t1(`a` INT, `b` DATE DEFAULT NULL,
|
||||
`c` INT DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=Innodb DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t2(`a` INT, `b` DATE DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=Innodb DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t3(`a` INT, `b` DATE DEFAULT '0000-00-00',
|
||||
`c` INT DEFAULT 500,
|
||||
PRIMARY KEY(`a`)) ENGINE=Innodb DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t4(`a` INT, `b` DATE DEFAULT '0000-00-00',
|
||||
PRIMARY KEY(`a`)) ENGINE=Innodb DEFAULT CHARSET=LATIN1;
|
||||
************* EXECUTION WITH INSERTS *************
|
||||
INSERT INTO t1(a,b,c) VALUES (1, null, 1);
|
||||
INSERT INTO t1(a,b,c) VALUES (2,'1111-11-11', 2);
|
||||
INSERT INTO t1(a,b) VALUES (3, null);
|
||||
INSERT INTO t1(a,c) VALUES (4, 4);
|
||||
INSERT INTO t1(a) VALUES (5);
|
||||
INSERT INTO t2(a,b) VALUES (1, null);
|
||||
INSERT INTO t2(a,b) VALUES (2,'1111-11-11');
|
||||
INSERT INTO t2(a) VALUES (3);
|
||||
INSERT INTO t3(a,b) VALUES (1, null);
|
||||
INSERT INTO t3(a,b) VALUES (2,'1111-11-11');
|
||||
INSERT INTO t3(a) VALUES (3);
|
||||
INSERT INTO t4(a,b,c) VALUES (1, null, 1);
|
||||
INSERT INTO t4(a,b,c) VALUES (2,'1111-11-11', 2);
|
||||
INSERT INTO t4(a,b) VALUES (3, null);
|
||||
INSERT INTO t4(a,c) VALUES (4, 4);
|
||||
INSERT INTO t4(a) VALUES (5);
|
||||
************* SHOWING THE RESULT SETS WITH INSERTS *************
|
||||
TABLES t1 and t2 must be equal otherwise an error will be thrown.
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
Comparing tables master:test.t2 and slave:test.t2
|
||||
TABLES t2 and t3 must be different.
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
a b
|
||||
1 NULL
|
||||
2 1111-11-11
|
||||
3 NULL
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
a b c
|
||||
1 NULL 500
|
||||
2 1111-11-11 500
|
||||
3 NULL 500
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
a b c
|
||||
1 NULL 1
|
||||
2 1111-11-11 2
|
||||
3 NULL NULL
|
||||
4 NULL 4
|
||||
5 NULL NULL
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
a b
|
||||
1 NULL
|
||||
2 1111-11-11
|
||||
3 NULL
|
||||
4 NULL
|
||||
5 NULL
|
||||
************* EXECUTION WITH UPDATES and REPLACES *************
|
||||
DELETE FROM t1;
|
||||
INSERT INTO t1(a,b,c) VALUES (1,'1111-11-11', 1);
|
||||
REPLACE INTO t1(a,b,c) VALUES (2,'1111-11-11', 2);
|
||||
UPDATE t1 set b= NULL, c= 300 where a= 1;
|
||||
REPLACE INTO t1(a,b,c) VALUES (2, NULL, 300);
|
||||
************* SHOWING THE RESULT SETS WITH UPDATES and REPLACES *************
|
||||
TABLES t1 and t2 must be equal otherwise an error will be thrown.
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
************* CLEANING *************
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t4;
|
||||
SET SQL_LOG_BIN= 0;
|
||||
CREATE TABLE t1 (`a` INT, `b` BIT DEFAULT NULL, `c` BIT DEFAULT NULL,
|
||||
PRIMARY KEY (`a`)) ENGINE= Innodb;
|
||||
SET SQL_LOG_BIN= 1;
|
||||
CREATE TABLE t1 (`a` INT, `b` BIT DEFAULT b'01', `c` BIT DEFAULT NULL,
|
||||
PRIMARY KEY (`a`)) ENGINE= Innodb;
|
||||
************* EXECUTION WITH INSERTS *************
|
||||
INSERT INTO t1(a,b,c) VALUES (1, null, b'01');
|
||||
INSERT INTO t1(a,b,c) VALUES (2,b'00', b'01');
|
||||
INSERT INTO t1(a,b) VALUES (3, null);
|
||||
INSERT INTO t1(a,c) VALUES (4, b'01');
|
||||
INSERT INTO t1(a) VALUES (5);
|
||||
************* SHOWING THE RESULT SETS WITH INSERTS *************
|
||||
TABLES t1 and t2 must be different.
|
||||
SELECT a,b+0,c+0 FROM t1 ORDER BY a;
|
||||
a b+0 c+0
|
||||
1 NULL 1
|
||||
2 0 1
|
||||
3 NULL NULL
|
||||
4 NULL 1
|
||||
5 NULL NULL
|
||||
SELECT a,b+0,c+0 FROM t1 ORDER BY a;
|
||||
a b+0 c+0
|
||||
1 NULL 1
|
||||
2 0 1
|
||||
3 NULL NULL
|
||||
4 NULL 1
|
||||
5 NULL NULL
|
||||
************* EXECUTION WITH UPDATES and REPLACES *************
|
||||
DELETE FROM t1;
|
||||
INSERT INTO t1(a,b,c) VALUES (1,b'00', b'01');
|
||||
REPLACE INTO t1(a,b,c) VALUES (2,b'00',b'01');
|
||||
UPDATE t1 set b= NULL, c= b'00' where a= 1;
|
||||
REPLACE INTO t1(a,b,c) VALUES (2, NULL, b'00');
|
||||
************* SHOWING THE RESULT SETS WITH UPDATES and REPLACES *************
|
||||
TABLES t1 and t2 must be equal otherwise an error will be thrown.
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
DROP TABLE t1;
|
||||
################################################################################
|
||||
# NULL ---> NOT NULL (STRICT MODE)
|
||||
# UNCOMMENT THIS AFTER FIXING BUG#43992
|
||||
################################################################################
|
||||
################################################################################
|
||||
# NULL ---> NOT NULL (NON-STRICT MODE)
|
||||
################################################################################
|
||||
SET SQL_LOG_BIN= 0;
|
||||
CREATE TABLE t1(`a` INT NOT NULL, `b` INT,
|
||||
PRIMARY KEY(`a`)) ENGINE=Innodb DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t2(`a` INT NOT NULL, `b` INT,
|
||||
PRIMARY KEY(`a`)) ENGINE=Innodb DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t3(`a` INT NOT NULL, `b` INT,
|
||||
PRIMARY KEY(`a`)) ENGINE=Innodb DEFAULT CHARSET=LATIN1;
|
||||
SET SQL_LOG_BIN= 1;
|
||||
CREATE TABLE t1(`a` INT NOT NULL, `b` INT NOT NULL,
|
||||
`c` INT NOT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=Innodb DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t2(`a` INT NOT NULL, `b` INT NOT NULL,
|
||||
`c` INT,
|
||||
PRIMARY KEY(`a`)) ENGINE=Innodb DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t3(`a` INT NOT NULL, `b` INT NOT NULL,
|
||||
`c` INT DEFAULT 500,
|
||||
PRIMARY KEY(`a`)) ENGINE=Innodb DEFAULT CHARSET=LATIN1;
|
||||
************* EXECUTION WITH INSERTS *************
|
||||
INSERT INTO t1(a) VALUES (1);
|
||||
INSERT INTO t1(a, b) VALUES (2, NULL);
|
||||
INSERT INTO t1(a, b) VALUES (3, 1);
|
||||
INSERT INTO t2(a) VALUES (1);
|
||||
INSERT INTO t2(a, b) VALUES (2, NULL);
|
||||
INSERT INTO t2(a, b) VALUES (3, 1);
|
||||
INSERT INTO t3(a) VALUES (1);
|
||||
INSERT INTO t3(a, b) VALUES (2, NULL);
|
||||
INSERT INTO t3(a, b) VALUES (3, 1);
|
||||
INSERT INTO t3(a, b) VALUES (4, 1);
|
||||
REPLACE INTO t3(a, b) VALUES (5, null);
|
||||
REPLACE INTO t3(a, b) VALUES (3, null);
|
||||
UPDATE t3 SET b = NULL where a = 4;
|
||||
************* SHOWING THE RESULT SETS *************
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 NULL
|
||||
2 NULL
|
||||
3 1
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b c
|
||||
1 0 0
|
||||
2 0 0
|
||||
3 1 0
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 NULL
|
||||
2 NULL
|
||||
3 1
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b c
|
||||
1 0 NULL
|
||||
2 0 NULL
|
||||
3 1 NULL
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
a b
|
||||
1 NULL
|
||||
2 NULL
|
||||
3 NULL
|
||||
4 NULL
|
||||
5 NULL
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
a b c
|
||||
1 0 500
|
||||
2 0 500
|
||||
3 0 500
|
||||
4 0 500
|
||||
5 0 500
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
202
mysql-test/suite/rpl/r/rpl_not_null_myisam.result
Normal file
202
mysql-test/suite/rpl/r/rpl_not_null_myisam.result
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
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;
|
||||
SET SQL_LOG_BIN= 0;
|
||||
CREATE TABLE t1(`a` INT, `b` DATE DEFAULT NULL,
|
||||
`c` INT DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=MyISAM DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t2(`a` INT, `b` DATE DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=MyISAM DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t3(`a` INT, `b` DATE DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=MyISAM DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t4(`a` INT, `b` DATE DEFAULT NULL,
|
||||
`c` INT DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=MyISAM DEFAULT CHARSET=LATIN1;
|
||||
SET SQL_LOG_BIN= 1;
|
||||
CREATE TABLE t1(`a` INT, `b` DATE DEFAULT NULL,
|
||||
`c` INT DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=MyISAM DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t2(`a` INT, `b` DATE DEFAULT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=MyISAM DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t3(`a` INT, `b` DATE DEFAULT '0000-00-00',
|
||||
`c` INT DEFAULT 500,
|
||||
PRIMARY KEY(`a`)) ENGINE=MyISAM DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t4(`a` INT, `b` DATE DEFAULT '0000-00-00',
|
||||
PRIMARY KEY(`a`)) ENGINE=MyISAM DEFAULT CHARSET=LATIN1;
|
||||
************* EXECUTION WITH INSERTS *************
|
||||
INSERT INTO t1(a,b,c) VALUES (1, null, 1);
|
||||
INSERT INTO t1(a,b,c) VALUES (2,'1111-11-11', 2);
|
||||
INSERT INTO t1(a,b) VALUES (3, null);
|
||||
INSERT INTO t1(a,c) VALUES (4, 4);
|
||||
INSERT INTO t1(a) VALUES (5);
|
||||
INSERT INTO t2(a,b) VALUES (1, null);
|
||||
INSERT INTO t2(a,b) VALUES (2,'1111-11-11');
|
||||
INSERT INTO t2(a) VALUES (3);
|
||||
INSERT INTO t3(a,b) VALUES (1, null);
|
||||
INSERT INTO t3(a,b) VALUES (2,'1111-11-11');
|
||||
INSERT INTO t3(a) VALUES (3);
|
||||
INSERT INTO t4(a,b,c) VALUES (1, null, 1);
|
||||
INSERT INTO t4(a,b,c) VALUES (2,'1111-11-11', 2);
|
||||
INSERT INTO t4(a,b) VALUES (3, null);
|
||||
INSERT INTO t4(a,c) VALUES (4, 4);
|
||||
INSERT INTO t4(a) VALUES (5);
|
||||
************* SHOWING THE RESULT SETS WITH INSERTS *************
|
||||
TABLES t1 and t2 must be equal otherwise an error will be thrown.
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
Comparing tables master:test.t2 and slave:test.t2
|
||||
TABLES t2 and t3 must be different.
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
a b
|
||||
1 NULL
|
||||
2 1111-11-11
|
||||
3 NULL
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
a b c
|
||||
1 NULL 500
|
||||
2 1111-11-11 500
|
||||
3 NULL 500
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
a b c
|
||||
1 NULL 1
|
||||
2 1111-11-11 2
|
||||
3 NULL NULL
|
||||
4 NULL 4
|
||||
5 NULL NULL
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
a b
|
||||
1 NULL
|
||||
2 1111-11-11
|
||||
3 NULL
|
||||
4 NULL
|
||||
5 NULL
|
||||
************* EXECUTION WITH UPDATES and REPLACES *************
|
||||
DELETE FROM t1;
|
||||
INSERT INTO t1(a,b,c) VALUES (1,'1111-11-11', 1);
|
||||
REPLACE INTO t1(a,b,c) VALUES (2,'1111-11-11', 2);
|
||||
UPDATE t1 set b= NULL, c= 300 where a= 1;
|
||||
REPLACE INTO t1(a,b,c) VALUES (2, NULL, 300);
|
||||
************* SHOWING THE RESULT SETS WITH UPDATES and REPLACES *************
|
||||
TABLES t1 and t2 must be equal otherwise an error will be thrown.
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
************* CLEANING *************
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t4;
|
||||
SET SQL_LOG_BIN= 0;
|
||||
CREATE TABLE t1 (`a` INT, `b` BIT DEFAULT NULL, `c` BIT DEFAULT NULL,
|
||||
PRIMARY KEY (`a`)) ENGINE= MyISAM;
|
||||
SET SQL_LOG_BIN= 1;
|
||||
CREATE TABLE t1 (`a` INT, `b` BIT DEFAULT b'01', `c` BIT DEFAULT NULL,
|
||||
PRIMARY KEY (`a`)) ENGINE= MyISAM;
|
||||
************* EXECUTION WITH INSERTS *************
|
||||
INSERT INTO t1(a,b,c) VALUES (1, null, b'01');
|
||||
INSERT INTO t1(a,b,c) VALUES (2,b'00', b'01');
|
||||
INSERT INTO t1(a,b) VALUES (3, null);
|
||||
INSERT INTO t1(a,c) VALUES (4, b'01');
|
||||
INSERT INTO t1(a) VALUES (5);
|
||||
************* SHOWING THE RESULT SETS WITH INSERTS *************
|
||||
TABLES t1 and t2 must be different.
|
||||
SELECT a,b+0,c+0 FROM t1 ORDER BY a;
|
||||
a b+0 c+0
|
||||
1 NULL 1
|
||||
2 0 1
|
||||
3 NULL NULL
|
||||
4 NULL 1
|
||||
5 NULL NULL
|
||||
SELECT a,b+0,c+0 FROM t1 ORDER BY a;
|
||||
a b+0 c+0
|
||||
1 NULL 1
|
||||
2 0 1
|
||||
3 NULL NULL
|
||||
4 NULL 1
|
||||
5 NULL NULL
|
||||
************* EXECUTION WITH UPDATES and REPLACES *************
|
||||
DELETE FROM t1;
|
||||
INSERT INTO t1(a,b,c) VALUES (1,b'00', b'01');
|
||||
REPLACE INTO t1(a,b,c) VALUES (2,b'00',b'01');
|
||||
UPDATE t1 set b= NULL, c= b'00' where a= 1;
|
||||
REPLACE INTO t1(a,b,c) VALUES (2, NULL, b'00');
|
||||
************* SHOWING THE RESULT SETS WITH UPDATES and REPLACES *************
|
||||
TABLES t1 and t2 must be equal otherwise an error will be thrown.
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
DROP TABLE t1;
|
||||
################################################################################
|
||||
# NULL ---> NOT NULL (STRICT MODE)
|
||||
# UNCOMMENT THIS AFTER FIXING BUG#43992
|
||||
################################################################################
|
||||
################################################################################
|
||||
# NULL ---> NOT NULL (NON-STRICT MODE)
|
||||
################################################################################
|
||||
SET SQL_LOG_BIN= 0;
|
||||
CREATE TABLE t1(`a` INT NOT NULL, `b` INT,
|
||||
PRIMARY KEY(`a`)) ENGINE=MyISAM DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t2(`a` INT NOT NULL, `b` INT,
|
||||
PRIMARY KEY(`a`)) ENGINE=MyISAM DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t3(`a` INT NOT NULL, `b` INT,
|
||||
PRIMARY KEY(`a`)) ENGINE=MyISAM DEFAULT CHARSET=LATIN1;
|
||||
SET SQL_LOG_BIN= 1;
|
||||
CREATE TABLE t1(`a` INT NOT NULL, `b` INT NOT NULL,
|
||||
`c` INT NOT NULL,
|
||||
PRIMARY KEY(`a`)) ENGINE=MyISAM DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t2(`a` INT NOT NULL, `b` INT NOT NULL,
|
||||
`c` INT,
|
||||
PRIMARY KEY(`a`)) ENGINE=MyISAM DEFAULT CHARSET=LATIN1;
|
||||
CREATE TABLE t3(`a` INT NOT NULL, `b` INT NOT NULL,
|
||||
`c` INT DEFAULT 500,
|
||||
PRIMARY KEY(`a`)) ENGINE=MyISAM DEFAULT CHARSET=LATIN1;
|
||||
************* EXECUTION WITH INSERTS *************
|
||||
INSERT INTO t1(a) VALUES (1);
|
||||
INSERT INTO t1(a, b) VALUES (2, NULL);
|
||||
INSERT INTO t1(a, b) VALUES (3, 1);
|
||||
INSERT INTO t2(a) VALUES (1);
|
||||
INSERT INTO t2(a, b) VALUES (2, NULL);
|
||||
INSERT INTO t2(a, b) VALUES (3, 1);
|
||||
INSERT INTO t3(a) VALUES (1);
|
||||
INSERT INTO t3(a, b) VALUES (2, NULL);
|
||||
INSERT INTO t3(a, b) VALUES (3, 1);
|
||||
INSERT INTO t3(a, b) VALUES (4, 1);
|
||||
REPLACE INTO t3(a, b) VALUES (5, null);
|
||||
REPLACE INTO t3(a, b) VALUES (3, null);
|
||||
UPDATE t3 SET b = NULL where a = 4;
|
||||
************* SHOWING THE RESULT SETS *************
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 NULL
|
||||
2 NULL
|
||||
3 1
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b c
|
||||
1 0 0
|
||||
2 0 0
|
||||
3 1 0
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 NULL
|
||||
2 NULL
|
||||
3 1
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b c
|
||||
1 0 NULL
|
||||
2 0 NULL
|
||||
3 1 NULL
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
a b
|
||||
1 NULL
|
||||
2 NULL
|
||||
3 NULL
|
||||
4 NULL
|
||||
5 NULL
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
a b c
|
||||
1 0 500
|
||||
2 0 500
|
||||
3 0 500
|
||||
4 0 500
|
||||
5 0 500
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
274
mysql-test/suite/rpl/r/rpl_row_show_relaylog_events.result
Normal file
274
mysql-test/suite/rpl/r/rpl_row_show_relaylog_events.result
Normal file
|
|
@ -0,0 +1,274 @@
|
|||
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;
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (3);
|
||||
INSERT INTO t1 VALUES (4);
|
||||
INSERT INTO t1 VALUES (5);
|
||||
INSERT INTO t1 VALUES (6);
|
||||
[MASTER] ********* SOW BINLOG EVENTS IN ... *********
|
||||
show binlog events in 'master-bin.000001' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
[MASTER] ********* SOW BINLOG EVENTS *********
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
[MASTER] ********* SOW BINLOG EVENTS ... LIMIT rows *********
|
||||
show binlog events from <binlog_start> limit 3;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
[MASTER] ********* SOW BINLOG EVENTS ... LIMIT offset,rows *********
|
||||
show binlog events from <binlog_start> limit 1, 3;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
[SLAVE] ********* SOW BINLOG EVENTS IN ... *********
|
||||
show binlog events in 'slave-bin.000001' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
[SLAVE] ********* SOW BINLOG EVENTS *********
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
[SLAVE] ********* SOW BINLOG EVENTS ... LIMIT rows *********
|
||||
show binlog events from <binlog_start> limit 3;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
[SLAVE] ********* SOW BINLOG EVENTS ... LIMIT offset,rows *********
|
||||
show binlog events from <binlog_start> limit 1, 3;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
[SLAVE] ********* SOW RELAYLOG EVENTS IN ... *********
|
||||
show relaylog events in 'slave-relay-bin.000003' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-relay-bin.000003 # Rotate # # master-bin.000001;pos=4
|
||||
slave-relay-bin.000003 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
slave-relay-bin.000003 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
slave-relay-bin.000003 # Query # # BEGIN
|
||||
slave-relay-bin.000003 # Table_map # # table_id: # (test.t1)
|
||||
slave-relay-bin.000003 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-relay-bin.000003 # Query # # COMMIT
|
||||
slave-relay-bin.000003 # Query # # BEGIN
|
||||
slave-relay-bin.000003 # Table_map # # table_id: # (test.t1)
|
||||
slave-relay-bin.000003 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-relay-bin.000003 # Query # # COMMIT
|
||||
slave-relay-bin.000003 # Query # # BEGIN
|
||||
slave-relay-bin.000003 # Table_map # # table_id: # (test.t1)
|
||||
slave-relay-bin.000003 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-relay-bin.000003 # Query # # COMMIT
|
||||
slave-relay-bin.000003 # Query # # BEGIN
|
||||
slave-relay-bin.000003 # Table_map # # table_id: # (test.t1)
|
||||
slave-relay-bin.000003 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-relay-bin.000003 # Query # # COMMIT
|
||||
slave-relay-bin.000003 # Query # # BEGIN
|
||||
slave-relay-bin.000003 # Table_map # # table_id: # (test.t1)
|
||||
slave-relay-bin.000003 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-relay-bin.000003 # Query # # COMMIT
|
||||
slave-relay-bin.000003 # Query # # BEGIN
|
||||
slave-relay-bin.000003 # Table_map # # table_id: # (test.t1)
|
||||
slave-relay-bin.000003 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-relay-bin.000003 # Query # # COMMIT
|
||||
[SLAVE] ********* SOW RELAYLOG EVENTS *********
|
||||
show relaylog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-relay-bin.000002 # Rotate # # slave-relay-bin.000003;pos=4
|
||||
[MASTER] ********* SOW RELAYLOG EVENTS ... LIMIT rows *********
|
||||
show relaylog events in 'slave-relay-bin.000003' from <binlog_start> limit 3;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-relay-bin.000003 # Rotate # # master-bin.000001;pos=4
|
||||
slave-relay-bin.000003 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
slave-relay-bin.000003 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
[MASTER] ********* SOW RELAYLOG EVENTS ... LIMIT offset,rows *********
|
||||
show relaylog events in 'slave-relay-bin.000003' from <binlog_start> limit 1, 3;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-relay-bin.000003 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
slave-relay-bin.000003 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
slave-relay-bin.000003 # Query # # BEGIN
|
||||
FLUSH LOGS;
|
||||
FLUSH LOGS;
|
||||
DROP TABLE t1;
|
||||
[MASTER] ********* SOW BINLOG EVENTS IN ... *********
|
||||
show binlog events in 'master-bin.000002' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000002 # Query # # use `test`; DROP TABLE t1
|
||||
[MASTER] ********* SOW BINLOG EVENTS *********
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Rotate # # master-bin.000002;pos=4
|
||||
[SLAVE] ********* SOW BINLOG EVENTS IN ... *********
|
||||
show binlog events in 'slave-bin.000002' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000002 # Query # # use `test`; DROP TABLE t1
|
||||
[SLAVE] ********* SOW BINLOG EVENTS *********
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
slave-bin.000001 # Rotate # # slave-bin.000002;pos=4
|
||||
[SLAVE] ********* SOW RELAYLOG EVENTS IN ... *********
|
||||
show relaylog events in 'slave-relay-bin.000005' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-relay-bin.000005 # Rotate # # master-bin.000002;pos=4
|
||||
slave-relay-bin.000005 # Rotate # # slave-relay-bin.000006;pos=4
|
||||
[SLAVE] ********* SOW RELAYLOG EVENTS *********
|
||||
show relaylog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-relay-bin.000005 # Rotate # # master-bin.000002;pos=4
|
||||
slave-relay-bin.000005 # Rotate # # slave-relay-bin.000006;pos=4
|
||||
|
|
@ -105,49 +105,9 @@ a b x
|
|||
2 10 Foo is a bar
|
||||
INSERT INTO t9 VALUES (2);
|
||||
INSERT INTO t1_nodef VALUES (1,2);
|
||||
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 1364
|
||||
Last_Error <Last_Error>
|
||||
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_Errno>
|
||||
Last_IO_Error <Last_IO_Error>
|
||||
Last_SQL_Errno 1364
|
||||
Last_SQL_Error <Last_SQL_Error>
|
||||
Replicate_Ignore_Server_Ids
|
||||
Master_Server_Id 1
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
select count(*) from t1_nodef;
|
||||
count(*)
|
||||
1
|
||||
INSERT INTO t9 VALUES (2);
|
||||
**** On Master ****
|
||||
INSERT INTO t2 VALUES (2,4);
|
||||
|
|
|
|||
|
|
@ -105,49 +105,9 @@ a b x
|
|||
2 10 Foo is a bar
|
||||
INSERT INTO t9 VALUES (2);
|
||||
INSERT INTO t1_nodef VALUES (1,2);
|
||||
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 1364
|
||||
Last_Error <Last_Error>
|
||||
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_Errno>
|
||||
Last_IO_Error <Last_IO_Error>
|
||||
Last_SQL_Errno 1364
|
||||
Last_SQL_Error <Last_SQL_Error>
|
||||
Replicate_Ignore_Server_Ids
|
||||
Master_Server_Id 1
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
select count(*) from t1_nodef;
|
||||
count(*)
|
||||
1
|
||||
INSERT INTO t9 VALUES (2);
|
||||
**** On Master ****
|
||||
INSERT INTO t2 VALUES (2,4);
|
||||
|
|
|
|||
47
mysql-test/suite/rpl/r/rpl_slow_query_log.result
Normal file
47
mysql-test/suite/rpl/r/rpl_slow_query_log.result
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
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;
|
||||
include/stop_slave.inc
|
||||
SET @old_log_output= @@log_output;
|
||||
SET GLOBAL log_output= 'TABLE';
|
||||
SET @old_long_query_time= @@long_query_time;
|
||||
SET GLOBAL long_query_time= 2;
|
||||
TRUNCATE mysql.slow_log;
|
||||
include/start_slave.inc
|
||||
CREATE TABLE t1 (a int, b int);
|
||||
INSERT INTO t1 values(1, 1);
|
||||
INSERT INTO t1 values(1, sleep(3));
|
||||
TRUNCATE mysql.slow_log;
|
||||
SELECT 1, sleep(3);
|
||||
1 sleep(3)
|
||||
1 0
|
||||
SELECT 1;
|
||||
1
|
||||
1
|
||||
TRUNCATE mysql.slow_log;
|
||||
SET TIMESTAMP= 1;
|
||||
SELECT 2, sleep(3);
|
||||
2 sleep(3)
|
||||
2 0
|
||||
SELECT 2;
|
||||
2
|
||||
2
|
||||
TRUNCATE mysql.slow_log;
|
||||
SET @old_slow_query_log= @@slow_query_log;
|
||||
SET GLOBAL slow_query_log= 'OFF';
|
||||
SELECT 3, sleep(3);
|
||||
3 sleep(3)
|
||||
3 0
|
||||
SELECT 3;
|
||||
3
|
||||
3
|
||||
TRUNCATE mysql.slow_log;
|
||||
SET GLOBAL slow_query_log= @old_slow_query_log;
|
||||
DROP TABLE t1;
|
||||
include/stop_slave.inc
|
||||
SET GLOBAL long_query_time= @old_long_query_time;
|
||||
SET GLOBAL log_output= @old_log_output;
|
||||
include/start_slave.inc
|
||||
148
mysql-test/suite/rpl/r/rpl_stm_mix_show_relaylog_events.result
Normal file
148
mysql-test/suite/rpl/r/rpl_stm_mix_show_relaylog_events.result
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
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;
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (3);
|
||||
INSERT INTO t1 VALUES (4);
|
||||
INSERT INTO t1 VALUES (5);
|
||||
INSERT INTO t1 VALUES (6);
|
||||
[MASTER] ********* SOW BINLOG EVENTS IN ... *********
|
||||
show binlog events in 'master-bin.000001' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (2)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (3)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (4)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (5)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (6)
|
||||
[MASTER] ********* SOW BINLOG EVENTS *********
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (2)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (3)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (4)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (5)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (6)
|
||||
[MASTER] ********* SOW BINLOG EVENTS ... LIMIT rows *********
|
||||
show binlog events from <binlog_start> limit 3;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (2)
|
||||
[MASTER] ********* SOW BINLOG EVENTS ... LIMIT offset,rows *********
|
||||
show binlog events from <binlog_start> limit 1, 3;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (2)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (3)
|
||||
[SLAVE] ********* SOW BINLOG EVENTS IN ... *********
|
||||
show binlog events in 'slave-bin.000001' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (2)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (3)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (4)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (5)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (6)
|
||||
[SLAVE] ********* SOW BINLOG EVENTS *********
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (2)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (3)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (4)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (5)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (6)
|
||||
[SLAVE] ********* SOW BINLOG EVENTS ... LIMIT rows *********
|
||||
show binlog events from <binlog_start> limit 3;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (2)
|
||||
[SLAVE] ********* SOW BINLOG EVENTS ... LIMIT offset,rows *********
|
||||
show binlog events from <binlog_start> limit 1, 3;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (2)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (3)
|
||||
[SLAVE] ********* SOW RELAYLOG EVENTS IN ... *********
|
||||
show relaylog events in 'slave-relay-bin.000003' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-relay-bin.000003 # Rotate # # master-bin.000001;pos=4
|
||||
slave-relay-bin.000003 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
slave-relay-bin.000003 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
slave-relay-bin.000003 # Query # # use `test`; INSERT INTO t1 VALUES (1)
|
||||
slave-relay-bin.000003 # Query # # use `test`; INSERT INTO t1 VALUES (2)
|
||||
slave-relay-bin.000003 # Query # # use `test`; INSERT INTO t1 VALUES (3)
|
||||
slave-relay-bin.000003 # Query # # use `test`; INSERT INTO t1 VALUES (4)
|
||||
slave-relay-bin.000003 # Query # # use `test`; INSERT INTO t1 VALUES (5)
|
||||
slave-relay-bin.000003 # Query # # use `test`; INSERT INTO t1 VALUES (6)
|
||||
[SLAVE] ********* SOW RELAYLOG EVENTS *********
|
||||
show relaylog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-relay-bin.000002 # Rotate # # slave-relay-bin.000003;pos=4
|
||||
[MASTER] ********* SOW RELAYLOG EVENTS ... LIMIT rows *********
|
||||
show relaylog events in 'slave-relay-bin.000003' from <binlog_start> limit 3;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-relay-bin.000003 # Rotate # # master-bin.000001;pos=4
|
||||
slave-relay-bin.000003 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
slave-relay-bin.000003 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
[MASTER] ********* SOW RELAYLOG EVENTS ... LIMIT offset,rows *********
|
||||
show relaylog events in 'slave-relay-bin.000003' from <binlog_start> limit 1, 3;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-relay-bin.000003 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
slave-relay-bin.000003 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
slave-relay-bin.000003 # Query # # use `test`; INSERT INTO t1 VALUES (1)
|
||||
FLUSH LOGS;
|
||||
FLUSH LOGS;
|
||||
DROP TABLE t1;
|
||||
[MASTER] ********* SOW BINLOG EVENTS IN ... *********
|
||||
show binlog events in 'master-bin.000002' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000002 # Query # # use `test`; DROP TABLE t1
|
||||
[MASTER] ********* SOW BINLOG EVENTS *********
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (2)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (3)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (4)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (5)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (6)
|
||||
master-bin.000001 # Rotate # # master-bin.000002;pos=4
|
||||
[SLAVE] ********* SOW BINLOG EVENTS IN ... *********
|
||||
show binlog events in 'slave-bin.000002' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000002 # Query # # use `test`; DROP TABLE t1
|
||||
[SLAVE] ********* SOW BINLOG EVENTS *********
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (2)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (3)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (4)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (5)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (6)
|
||||
slave-bin.000001 # Rotate # # slave-bin.000002;pos=4
|
||||
[SLAVE] ********* SOW RELAYLOG EVENTS IN ... *********
|
||||
show relaylog events in 'slave-relay-bin.000005' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-relay-bin.000005 # Rotate # # master-bin.000002;pos=4
|
||||
slave-relay-bin.000005 # Rotate # # slave-relay-bin.000006;pos=4
|
||||
[SLAVE] ********* SOW RELAYLOG EVENTS *********
|
||||
show relaylog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-relay-bin.000005 # Rotate # # master-bin.000002;pos=4
|
||||
slave-relay-bin.000005 # Rotate # # slave-relay-bin.000006;pos=4
|
||||
40
mysql-test/suite/rpl/r/rpl_sync.result
Normal file
40
mysql-test/suite/rpl/r/rpl_sync.result
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
=====Configuring the enviroment=======;
|
||||
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;
|
||||
call mtr.add_suppression('Attempting backtrace');
|
||||
call mtr.add_suppression("Recovery from master pos .* and file master-bin.000001");
|
||||
CREATE TABLE t1(a INT, PRIMARY KEY(a)) engine=innodb;
|
||||
insert into t1(a) values(1);
|
||||
insert into t1(a) values(2);
|
||||
insert into t1(a) values(3);
|
||||
=====Inserting data on the master but without the SQL Thread being running=======;
|
||||
stop slave SQL_THREAD;
|
||||
insert into t1(a) values(4);
|
||||
insert into t1(a) values(5);
|
||||
insert into t1(a) values(6);
|
||||
=====Removing relay log files and crashing/recoverying the slave=======;
|
||||
stop slave IO_THREAD;
|
||||
SET SESSION debug="d,crash_before_rotate_relaylog";
|
||||
FLUSH LOGS;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
=====Dumping and comparing tables=======;
|
||||
start slave;
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
=====Corrupting the master.info=======;
|
||||
stop slave;
|
||||
FLUSH LOGS;
|
||||
insert into t1(a) values(7);
|
||||
insert into t1(a) values(8);
|
||||
insert into t1(a) values(9);
|
||||
SET SESSION debug="d,crash_before_rotate_relaylog";
|
||||
FLUSH LOGS;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
=====Dumping and comparing tables=======;
|
||||
start slave;
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
=====Clean up=======;
|
||||
drop table t1;
|
||||
51
mysql-test/suite/rpl/t/rpl_empty_master_host.test
Normal file
51
mysql-test/suite/rpl/t/rpl_empty_master_host.test
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
#
|
||||
# BUG
|
||||
# ---
|
||||
# BUG#28796: CHANGE MASTER TO MASTER_HOST="" leads to invalid master.info
|
||||
#
|
||||
# Description
|
||||
# -----------
|
||||
#
|
||||
# This test aims at:
|
||||
# i) verifying that an error is thrown when setting MASTER_HOST=''
|
||||
# ii) no error is thrown when setting non empty MASTER_HOST
|
||||
# iii) replication works after setting a correct host name/ip
|
||||
#
|
||||
# Implementation is performed by feeding different values (according
|
||||
# to i), ii) and iii) ) to CHANGE MASTER TO MASTER_HOST= x and checking
|
||||
# along the way if error/no error is thrown and/or if replication starts
|
||||
# working when expected.
|
||||
|
||||
--source include/master-slave.inc
|
||||
|
||||
connection slave;
|
||||
STOP SLAVE;
|
||||
--source include/wait_for_slave_to_stop.inc
|
||||
|
||||
let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
|
||||
--echo Master_Host = '$master_host' (expected '127.0.0.1')
|
||||
|
||||
# attempt to change to an empty master host should
|
||||
# result in error ER_WRONG_ARGUMENTS: "Incorrect arguments to ..."
|
||||
error ER_WRONG_ARGUMENTS;
|
||||
CHANGE MASTER TO MASTER_HOST="";
|
||||
|
||||
# show slave status still holds previous information
|
||||
let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
|
||||
--echo Master_Host = '$master_host' (expected '127.0.0.1')
|
||||
|
||||
# changing master to other than empty master host succeeds
|
||||
CHANGE MASTER TO MASTER_HOST="foo";
|
||||
|
||||
# show slave status should hold "foo" as master host
|
||||
let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
|
||||
--echo Master_Host = '$master_host' (expected 'foo')
|
||||
|
||||
# changing back to localhost
|
||||
CHANGE MASTER TO MASTER_HOST="127.0.0.1";
|
||||
let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
|
||||
--echo Master_Host = '$master_host' (expected '127.0.0.1')
|
||||
|
||||
# start slave must succeed.
|
||||
START SLAVE;
|
||||
--source include/wait_for_slave_to_start.inc
|
||||
19
mysql-test/suite/rpl/t/rpl_not_null_innodb.test
Normal file
19
mysql-test/suite/rpl/t/rpl_not_null_innodb.test
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
#################################################################################
|
||||
# This test checks if the replication between "null" fields to either "null"
|
||||
# fields or "not null" fields works properly. In the first case, the execution
|
||||
# should work fine. In the second case, it may fail according to the sql_mode
|
||||
# being used.
|
||||
#
|
||||
# The test is devided in three main parts:
|
||||
#
|
||||
# 1 - NULL --> NULL (no failures)
|
||||
# 2 - NULL --> NOT NULL ( sql-mode = STRICT and failures)
|
||||
# 3 - NULL --> NOT NULL ( sql-mode != STRICT and no failures)
|
||||
#
|
||||
#################################################################################
|
||||
--source include/master-slave.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_binlog_format_row.inc
|
||||
|
||||
let $engine=Innodb;
|
||||
--source extra/rpl_tests/rpl_not_null.test
|
||||
18
mysql-test/suite/rpl/t/rpl_not_null_myisam.test
Normal file
18
mysql-test/suite/rpl/t/rpl_not_null_myisam.test
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#################################################################################
|
||||
# This test checks if the replication between "null" fields to either "null"
|
||||
# fields or "not null" fields works properly. In the first case, the execution
|
||||
# should work fine. In the second case, it may fail according to the sql_mode
|
||||
# being used.
|
||||
#
|
||||
# The test is devided in three main parts:
|
||||
#
|
||||
# 1 - NULL --> NULL (no failures)
|
||||
# 2 - NULL --> NOT NULL ( sql-mode = STRICT and failures)
|
||||
# 3 - NULL --> NOT NULL ( sql-mode != STRICT and no failures)
|
||||
#
|
||||
#################################################################################
|
||||
--source include/master-slave.inc
|
||||
--source include/have_binlog_format_row.inc
|
||||
|
||||
let $engine=MyISAM;
|
||||
--source extra/rpl_tests/rpl_not_null.test
|
||||
18
mysql-test/suite/rpl/t/rpl_row_show_relaylog_events.test
Normal file
18
mysql-test/suite/rpl/t/rpl_row_show_relaylog_events.test
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
# BUG#28777 SHOW BINLOG EVENTS does not work on relay log files
|
||||
#
|
||||
# GOAL
|
||||
# ====
|
||||
#
|
||||
# Test that SHOW BINLOG EVENTS and the new SHOW RELAYLOG EVENTS works after
|
||||
# the patch, both on master and slave.
|
||||
#
|
||||
# HOW
|
||||
# ===
|
||||
#
|
||||
# This test issues SHOW [BINLOG|RELAYLOG] EVENTS both on master and slave after
|
||||
# some statements have been issued.
|
||||
|
||||
-- source include/master-slave.inc
|
||||
-- source include/have_binlog_format_row.inc
|
||||
|
||||
-- source extra/rpl_tests/rpl_show_relaylog_events.inc
|
||||
|
|
@ -27,7 +27,7 @@ connection slave;
|
|||
|
||||
# Stop when reaching the the first table map event.
|
||||
START SLAVE UNTIL MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=762;
|
||||
wait_for_slave_to_stop;
|
||||
-- source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 # 35 # 36 #
|
||||
query_vertical SHOW SLAVE STATUS;
|
||||
|
|
@ -59,7 +59,7 @@ source include/show_binlog_events.inc;
|
|||
|
||||
connection slave;
|
||||
START SLAVE UNTIL MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=106;
|
||||
wait_for_slave_to_stop;
|
||||
-- source include/wait_for_slave_sql_to_stop.inc
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
||||
START SLAVE;
|
||||
sync_with_master;
|
||||
|
|
|
|||
1
mysql-test/suite/rpl/t/rpl_slow_query_log-slave.opt
Normal file
1
mysql-test/suite/rpl/t/rpl_slow_query_log-slave.opt
Normal file
|
|
@ -0,0 +1 @@
|
|||
--force-restart --log-slow-slave-statements --log-slow-queries
|
||||
187
mysql-test/suite/rpl/t/rpl_slow_query_log.test
Normal file
187
mysql-test/suite/rpl/t/rpl_slow_query_log.test
Normal file
|
|
@ -0,0 +1,187 @@
|
|||
#
|
||||
# BUG#23300: Slow query log on slave does not log slow replicated statements
|
||||
#
|
||||
# Description:
|
||||
# The slave should log slow queries replicated from master when
|
||||
# --log-slow-slave-statements is used.
|
||||
#
|
||||
# Test is implemented as follows:
|
||||
# i) stop slave
|
||||
# ii) On slave, set long_query_time to a small value.
|
||||
# ii) start slave so that long_query_time variable is picked by sql thread
|
||||
# iii) On master, do one short time query and one long time query, on slave
|
||||
# and check that slow query is logged to slow query log but fast query
|
||||
# is not.
|
||||
# iv) On slave, check that slow queries go into the slow log and fast dont,
|
||||
# when issued through a regular client connection
|
||||
# v) On slave, check that slow queries go into the slow log and fast dont
|
||||
# when we use SET TIMESTAMP= 1 on a regular client connection.
|
||||
# vi) check that when setting slow_query_log= OFF in a connection 'extra2'
|
||||
# prevents logging slow queries in a connection 'extra'
|
||||
#
|
||||
# OBS:
|
||||
# This test only runs for statement and mixed binlogging firmat because on
|
||||
# row format slow queries do not get slow query logged.
|
||||
|
||||
source include/master-slave.inc;
|
||||
source include/have_binlog_format_mixed_or_statement.inc;
|
||||
|
||||
|
||||
# Prepare slave for different long_query_time we need to stop the slave
|
||||
# and restart it as long_query_time variable is dynamic and, after
|
||||
# setting it, it only takes effect on new connections.
|
||||
#
|
||||
# Reference:
|
||||
# http://dev.mysql.com/doc/refman/6.0/en/set-option.html
|
||||
connection slave;
|
||||
|
||||
source include/stop_slave.inc;
|
||||
|
||||
SET @old_log_output= @@log_output;
|
||||
SET GLOBAL log_output= 'TABLE';
|
||||
SET @old_long_query_time= @@long_query_time;
|
||||
SET GLOBAL long_query_time= 2;
|
||||
TRUNCATE mysql.slow_log;
|
||||
|
||||
source include/start_slave.inc;
|
||||
|
||||
connection master;
|
||||
CREATE TABLE t1 (a int, b int);
|
||||
|
||||
# test:
|
||||
# check that slave logs the slow query to the slow log, but not the fast one.
|
||||
|
||||
let $slow_query= INSERT INTO t1 values(1, sleep(3));
|
||||
let $fast_query= INSERT INTO t1 values(1, 1);
|
||||
|
||||
eval $fast_query;
|
||||
eval $slow_query;
|
||||
sync_slave_with_master;
|
||||
|
||||
let $found_fast_query= `SELECT count(*) = 1 FROM mysql.slow_log WHERE sql_text like '$fast_query'`;
|
||||
let $found_slow_query= `SELECT count(*) = 1 FROM mysql.slow_log WHERE sql_text like '$slow_query'`;
|
||||
|
||||
if ($found_fast_query)
|
||||
{
|
||||
SELECT * FROM mysql.slow_log;
|
||||
die "Assertion failed! Fast query FOUND in slow query log. Bailing out!";
|
||||
}
|
||||
|
||||
if (!$found_slow_query)
|
||||
{
|
||||
SELECT * FROM mysql.slow_log;
|
||||
die "Assertion failed! Slow query NOT FOUND in slow query log. Bailing out!";
|
||||
}
|
||||
TRUNCATE mysql.slow_log;
|
||||
|
||||
# regular checks for slow query log (using a new connection - 'extra' - to slave)
|
||||
|
||||
# test:
|
||||
# when using direct connections to the slave, check that slow query is logged
|
||||
# but not the fast one.
|
||||
|
||||
connect(extra,127.0.0.1,root,,test,$SLAVE_MYPORT);
|
||||
connection extra;
|
||||
|
||||
let $fast_query= SELECT 1;
|
||||
let $slow_query= SELECT 1, sleep(3);
|
||||
|
||||
eval $slow_query;
|
||||
eval $fast_query;
|
||||
|
||||
let $found_fast_query= `SELECT count(*) = 1 FROM mysql.slow_log WHERE sql_text like '$fast_query'`;
|
||||
let $found_slow_query= `SELECT count(*) = 1 FROM mysql.slow_log WHERE sql_text like '$slow_query'`;
|
||||
|
||||
if ($found_fast_query)
|
||||
{
|
||||
SELECT * FROM mysql.slow_log;
|
||||
die "Assertion failed! Fast query FOUND in slow query log. Bailing out!";
|
||||
}
|
||||
|
||||
if (!$found_slow_query)
|
||||
{
|
||||
SELECT * FROM mysql.slow_log;
|
||||
die "Assertion failed! Slow query NOT FOUND in slow query log. Bailing out!";
|
||||
}
|
||||
TRUNCATE mysql.slow_log;
|
||||
|
||||
# test:
|
||||
# when using direct connections to the slave, check that when setting timestamp to 1 the
|
||||
# slow query is logged but the fast one is not.
|
||||
|
||||
let $fast_query= SELECT 2;
|
||||
let $slow_query= SELECT 2, sleep(3);
|
||||
|
||||
SET TIMESTAMP= 1;
|
||||
eval $slow_query;
|
||||
eval $fast_query;
|
||||
|
||||
let $found_fast_query= `SELECT count(*) = 1 FROM mysql.slow_log WHERE sql_text like '$fast_query'`;
|
||||
let $found_slow_query= `SELECT count(*) = 1 FROM mysql.slow_log WHERE sql_text like '$slow_query'`;
|
||||
|
||||
if ($found_fast_query)
|
||||
{
|
||||
SELECT * FROM mysql.slow_log;
|
||||
die "Assertion failed! Fast query FOUND in slow query log. Bailing out!";
|
||||
}
|
||||
|
||||
if (!$found_slow_query)
|
||||
{
|
||||
SELECT * FROM mysql.slow_log;
|
||||
die "Assertion failed! Slow query NOT FOUND in slow query log. Bailing out!";
|
||||
}
|
||||
TRUNCATE mysql.slow_log;
|
||||
|
||||
# test:
|
||||
# check that when setting the slow_query_log= OFF on connection 'extra2'
|
||||
# prevents connection 'extra' from logging to slow query log.
|
||||
|
||||
let $fast_query= SELECT 3;
|
||||
let $slow_query= SELECT 3, sleep(3);
|
||||
|
||||
connect(extra2,127.0.0.1,root,,test,$SLAVE_MYPORT);
|
||||
connection extra2;
|
||||
|
||||
SET @old_slow_query_log= @@slow_query_log;
|
||||
SET GLOBAL slow_query_log= 'OFF';
|
||||
|
||||
connection extra;
|
||||
|
||||
eval $slow_query;
|
||||
eval $fast_query;
|
||||
|
||||
let $found_fast_query= `SELECT count(*) = 1 FROM mysql.slow_log WHERE sql_text like '$fast_query'`;
|
||||
let $found_slow_query= `SELECT count(*) = 1 FROM mysql.slow_log WHERE sql_text like '$slow_query'`;
|
||||
|
||||
if ($found_fast_query)
|
||||
{
|
||||
SELECT * FROM mysql.slow_log;
|
||||
die "Assertion failed! Fast query FOUND in slow query log when slow_query_log= OFF. Bailing out!";
|
||||
}
|
||||
|
||||
if ($found_slow_query)
|
||||
{
|
||||
SELECT * FROM mysql.slow_log;
|
||||
die "Assertion failed! Slow query FOUND in slow query log when slow_query_log= OFF. Bailing out!";
|
||||
}
|
||||
TRUNCATE mysql.slow_log;
|
||||
|
||||
# clean up: drop tables, reset the variables back to the previous value,
|
||||
# disconnect extra connections
|
||||
connection extra2;
|
||||
|
||||
SET GLOBAL slow_query_log= @old_slow_query_log;
|
||||
|
||||
connection master;
|
||||
DROP TABLE t1;
|
||||
sync_slave_with_master;
|
||||
|
||||
source include/stop_slave.inc;
|
||||
|
||||
SET GLOBAL long_query_time= @old_long_query_time;
|
||||
SET GLOBAL log_output= @old_log_output;
|
||||
|
||||
source include/start_slave.inc;
|
||||
|
||||
disconnect extra;
|
||||
disconnect extra2;
|
||||
18
mysql-test/suite/rpl/t/rpl_stm_mix_show_relaylog_events.test
Normal file
18
mysql-test/suite/rpl/t/rpl_stm_mix_show_relaylog_events.test
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
# BUG#28777 SHOW BINLOG EVENTS does not work on relay log files
|
||||
#
|
||||
# GOAL
|
||||
# ====
|
||||
#
|
||||
# Test that SHOW BINLOG EVENTS and the new SHOW RELAYLOG EVENTS works after
|
||||
# the patch, both on master and slave.
|
||||
#
|
||||
# HOW
|
||||
# ===
|
||||
#
|
||||
# This test issues SHOW [BINLOG|RELAYLOG] EVENTS both on master and slave after
|
||||
# some statements have been issued.
|
||||
|
||||
-- source include/master-slave.inc
|
||||
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||
|
||||
-- source extra/rpl_tests/rpl_show_relaylog_events.inc
|
||||
1
mysql-test/suite/rpl/t/rpl_sync-slave.opt
Normal file
1
mysql-test/suite/rpl/t/rpl_sync-slave.opt
Normal file
|
|
@ -0,0 +1 @@
|
|||
--sync-relay-log-info=1 --relay-log-recovery=1
|
||||
148
mysql-test/suite/rpl/t/rpl_sync.test
Normal file
148
mysql-test/suite/rpl/t/rpl_sync.test
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
########################################################################################
|
||||
# This test verifies the options --sync-relay-log-info and --relay-log-recovery by
|
||||
# crashing the slave in two different situations:
|
||||
# (case-1) - Corrupt the relay log with changes which were not processed by
|
||||
# the SQL Thread and crashes it.
|
||||
# (case-2) - Corrupt the master.info with wrong coordinates and crashes it.
|
||||
#
|
||||
# Case 1:
|
||||
# 1 - Stops the SQL Thread
|
||||
# 2 - Inserts new records into the master.
|
||||
# 3 - Corrupts the relay-log.bin* which most likely has such changes.
|
||||
# 4 - Crashes the slave
|
||||
# 5 - Verifies if the slave is sync with the master which means that the information
|
||||
# loss was circumvented by the recovery process.
|
||||
#
|
||||
# Case 2:
|
||||
# 1 - Stops the SQL/IO Threads
|
||||
# 2 - Inserts new records into the master.
|
||||
# 3 - Corrupts the master.info with wrong coordinates.
|
||||
# 4 - Crashes the slave
|
||||
# 5 - Verifies if the slave is sync with the master which means that the information
|
||||
# loss was circumvented by the recovery process.
|
||||
########################################################################################
|
||||
|
||||
########################################################################################
|
||||
# Configuring the environment
|
||||
########################################################################################
|
||||
--echo =====Configuring the enviroment=======;
|
||||
--source include/master-slave.inc
|
||||
--source include/not_embedded.inc
|
||||
--source include/not_valgrind.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
call mtr.add_suppression('Attempting backtrace');
|
||||
call mtr.add_suppression("Recovery from master pos .* and file master-bin.000001");
|
||||
CREATE TABLE t1(a INT, PRIMARY KEY(a)) engine=innodb;
|
||||
|
||||
insert into t1(a) values(1);
|
||||
insert into t1(a) values(2);
|
||||
insert into t1(a) values(3);
|
||||
|
||||
########################################################################################
|
||||
# Case 1: Corrupt a relay-log.bin*
|
||||
########################################################################################
|
||||
--echo =====Inserting data on the master but without the SQL Thread being running=======;
|
||||
sync_slave_with_master;
|
||||
|
||||
connection slave;
|
||||
let $MYSQLD_SLAVE_DATADIR= `select @@datadir`;
|
||||
--replace_result $MYSQLD_SLAVE_DATADIR MYSQLD_SLAVE_DATADIR
|
||||
--copy_file $MYSQLD_SLAVE_DATADIR/master.info $MYSQLD_SLAVE_DATADIR/master.backup
|
||||
stop slave SQL_THREAD;
|
||||
source include/wait_for_slave_sql_to_stop.inc;
|
||||
|
||||
connection master;
|
||||
insert into t1(a) values(4);
|
||||
insert into t1(a) values(5);
|
||||
insert into t1(a) values(6);
|
||||
|
||||
--echo =====Removing relay log files and crashing/recoverying the slave=======;
|
||||
connection slave;
|
||||
stop slave IO_THREAD;
|
||||
source include/wait_for_slave_io_to_stop.inc;
|
||||
|
||||
let $file= query_get_value("SHOW SLAVE STATUS", Relay_Log_File, 1);
|
||||
--replace_result $MYSQLD_SLAVE_DATADIR MYSQLD_SLAVE_DATADIR
|
||||
--exec echo "failure" > $MYSQLD_SLAVE_DATADIR/$file
|
||||
|
||||
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
SET SESSION debug="d,crash_before_rotate_relaylog";
|
||||
--error 2013
|
||||
FLUSH LOGS;
|
||||
|
||||
--enable_reconnect
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
--echo =====Dumping and comparing tables=======;
|
||||
start slave;
|
||||
source include/wait_for_slave_to_start.inc;
|
||||
|
||||
connection master;
|
||||
sync_slave_with_master;
|
||||
|
||||
let $diff_table_1=master:test.t1;
|
||||
let $diff_table_2=slave:test.t1;
|
||||
source include/diff_tables.inc;
|
||||
|
||||
########################################################################################
|
||||
# Case 2: Corrupt a master.info
|
||||
########################################################################################
|
||||
--echo =====Corrupting the master.info=======;
|
||||
connection slave;
|
||||
stop slave;
|
||||
source include/wait_for_slave_to_stop.inc;
|
||||
|
||||
connection master;
|
||||
FLUSH LOGS;
|
||||
|
||||
insert into t1(a) values(7);
|
||||
insert into t1(a) values(8);
|
||||
insert into t1(a) values(9);
|
||||
|
||||
connection slave;
|
||||
--replace_result $MYSQLD_SLAVE_DATADIR MYSQLD_SLAVE_DATADIR
|
||||
--exec cat $MYSQLD_SLAVE_DATADIR/master.backup > $MYSQLD_SLAVE_DATADIR/master.info
|
||||
|
||||
let MYSQLD_SLAVE_DATADIR=`select @@datadir`;
|
||||
|
||||
--perl
|
||||
use strict;
|
||||
use warnings;
|
||||
my $src= "$ENV{'MYSQLD_SLAVE_DATADIR'}/master.backup";
|
||||
my $dst= "$ENV{'MYSQLD_SLAVE_DATADIR'}/master.info";
|
||||
open(FILE, "<", $src) or die;
|
||||
my @content= <FILE>;
|
||||
close FILE;
|
||||
open(FILE, ">", $dst) or die;
|
||||
binmode FILE;
|
||||
print FILE @content;
|
||||
close FILE;
|
||||
EOF
|
||||
|
||||
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
SET SESSION debug="d,crash_before_rotate_relaylog";
|
||||
--error 2013
|
||||
FLUSH LOGS;
|
||||
|
||||
--enable_reconnect
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
--echo =====Dumping and comparing tables=======;
|
||||
start slave;
|
||||
source include/wait_for_slave_to_start.inc;
|
||||
|
||||
connection master;
|
||||
sync_slave_with_master;
|
||||
|
||||
let $diff_table_1=master:test.t1;
|
||||
let $diff_table_2=slave:test.t1;
|
||||
source include/diff_tables.inc;
|
||||
|
||||
########################################################################################
|
||||
# Clean up
|
||||
########################################################################################
|
||||
--echo =====Clean up=======;
|
||||
connection master;
|
||||
drop table t1;
|
||||
|
|
@ -410,64 +410,6 @@ set @b1 = concat(@b1,@b1);
|
|||
INSERT INTO t8 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
||||
*** Drop t8 ***
|
||||
DROP TABLE t8;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t9 (a INT KEY, b BLOB, c CHAR(5),
|
||||
d TIMESTAMP,
|
||||
e INT NOT NULL) ENGINE='NDB';
|
||||
*** Create t9 on Master ***
|
||||
CREATE TABLE t9 (a INT PRIMARY KEY, b BLOB, c CHAR(5)
|
||||
) ENGINE='NDB';
|
||||
RESET MASTER;
|
||||
*** Start Slave ***
|
||||
START SLAVE;
|
||||
*** Master Data Insert ***
|
||||
set @b1 = 'b1b1b1b1';
|
||||
set @b1 = concat(@b1,@b1);
|
||||
INSERT INTO t9 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
||||
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 1364
|
||||
Last_Error Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 447
|
||||
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 1364
|
||||
Last_SQL_Error Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 447
|
||||
Replicate_Ignore_Server_Ids
|
||||
Master_Server_Id 1
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
*** Create t10 on slave ***
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
|
|
|
|||
|
|
@ -111,22 +111,10 @@ INSERT INTO innodb_ndb VALUES (12);
|
|||
COMMIT;
|
||||
---- ROLLBACK ----
|
||||
BEGIN;
|
||||
INSERT INTO myisam_innodb VALUES (13);
|
||||
INSERT INTO myisam_innodb VALUES (14);
|
||||
ROLLBACK;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
BEGIN;
|
||||
INSERT INTO innodb_myisam VALUES (15);
|
||||
INSERT INTO innodb_myisam VALUES (16);
|
||||
ROLLBACK;
|
||||
BEGIN;
|
||||
INSERT INTO myisam_ndb VALUES (17);
|
||||
INSERT INTO myisam_ndb VALUES (18);
|
||||
ROLLBACK;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
BEGIN;
|
||||
INSERT INTO ndb_myisam VALUES (19);
|
||||
INSERT INTO ndb_myisam VALUES (20);
|
||||
ROLLBACK;
|
||||
|
|
@ -167,22 +155,10 @@ INSERT INTO innodb_ndb VALUES (36);
|
|||
COMMIT;
|
||||
---- ROLLBACK ----
|
||||
BEGIN;
|
||||
INSERT INTO myisam_innodb VALUES (37);
|
||||
INSERT INTO myisam_innodb VALUES (38);
|
||||
ROLLBACK;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
BEGIN;
|
||||
INSERT INTO innodb_myisam VALUES (39);
|
||||
INSERT INTO innodb_myisam VALUES (40);
|
||||
ROLLBACK;
|
||||
BEGIN;
|
||||
INSERT INTO myisam_ndb VALUES (41);
|
||||
INSERT INTO myisam_ndb VALUES (42);
|
||||
ROLLBACK;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
BEGIN;
|
||||
INSERT INTO ndb_myisam VALUES (43);
|
||||
INSERT INTO ndb_myisam VALUES (44);
|
||||
ROLLBACK;
|
||||
|
|
@ -209,25 +185,15 @@ INSERT INTO innodb_ndb VALUES (59);
|
|||
INSERT INTO innodb_ndb VALUES (60);
|
||||
==== AUTOCOMMIT=0, single statements, myisam on master ====
|
||||
SET AUTOCOMMIT = 0;
|
||||
INSERT INTO myisam_innodb VALUES (61);
|
||||
INSERT INTO myisam_innodb VALUES (62);
|
||||
INSERT INTO myisam_ndb VALUES (63);
|
||||
INSERT INTO myisam_ndb VALUES (64);
|
||||
==== Show results ====
|
||||
SELECT * FROM myisam_innodb ORDER BY a;
|
||||
a
|
||||
1
|
||||
2
|
||||
13
|
||||
14
|
||||
25
|
||||
26
|
||||
37
|
||||
38
|
||||
49
|
||||
50
|
||||
61
|
||||
62
|
||||
SELECT * FROM innodb_myisam ORDER BY a;
|
||||
a
|
||||
3
|
||||
|
|
@ -240,16 +206,10 @@ SELECT * FROM myisam_ndb ORDER BY a;
|
|||
a
|
||||
5
|
||||
6
|
||||
17
|
||||
18
|
||||
29
|
||||
30
|
||||
41
|
||||
42
|
||||
53
|
||||
54
|
||||
63
|
||||
64
|
||||
SELECT * FROM ndb_myisam ORDER BY a;
|
||||
a
|
||||
7
|
||||
|
|
|
|||
|
|
@ -134,11 +134,15 @@ connection master;
|
|||
|
||||
--echo ---- ROLLBACK ----
|
||||
|
||||
# This test does not work in ROW mode after the changes introduced in
|
||||
# BUG#40116. After WL#2687 is pushed, Tests should be added again.
|
||||
--disable_parsing
|
||||
BEGIN;
|
||||
INSERT INTO myisam_innodb VALUES (13);
|
||||
INSERT INTO myisam_innodb VALUES (14);
|
||||
ROLLBACK;
|
||||
sync_slave_with_master;
|
||||
--enable_parsing
|
||||
connection master;
|
||||
BEGIN;
|
||||
INSERT INTO innodb_myisam VALUES (15);
|
||||
|
|
@ -147,12 +151,17 @@ ROLLBACK;
|
|||
sync_slave_with_master;
|
||||
connection master;
|
||||
|
||||
# This test does not work in ROW mode after the changes introduced in
|
||||
# BUG#40116. After WL#2687 is pushed, these tests should be enabled
|
||||
# again.
|
||||
--disable_parsing
|
||||
BEGIN;
|
||||
INSERT INTO myisam_ndb VALUES (17);
|
||||
INSERT INTO myisam_ndb VALUES (18);
|
||||
ROLLBACK;
|
||||
sync_slave_with_master;
|
||||
connection master;
|
||||
--enable_parsing
|
||||
BEGIN;
|
||||
INSERT INTO ndb_myisam VALUES (19);
|
||||
INSERT INTO ndb_myisam VALUES (20);
|
||||
|
|
@ -221,12 +230,17 @@ connection master;
|
|||
|
||||
--echo ---- ROLLBACK ----
|
||||
|
||||
# This test does not work in ROW mode after the changes introduced in
|
||||
# BUG#40116. After WL#2687 is pushed, these tests should be enabled
|
||||
# again.
|
||||
--disable_parsing
|
||||
BEGIN;
|
||||
INSERT INTO myisam_innodb VALUES (37);
|
||||
INSERT INTO myisam_innodb VALUES (38);
|
||||
ROLLBACK;
|
||||
sync_slave_with_master;
|
||||
connection master;
|
||||
--enable_parsing
|
||||
BEGIN;
|
||||
INSERT INTO innodb_myisam VALUES (39);
|
||||
INSERT INTO innodb_myisam VALUES (40);
|
||||
|
|
@ -234,12 +248,17 @@ ROLLBACK;
|
|||
sync_slave_with_master;
|
||||
connection master;
|
||||
|
||||
# This test does not work in ROW mode after the changes introduced in
|
||||
# BUG#40116. After WL#2687 is pushed, these tests should be enabled
|
||||
# again.
|
||||
--disable_parsing
|
||||
BEGIN;
|
||||
INSERT INTO myisam_ndb VALUES (41);
|
||||
INSERT INTO myisam_ndb VALUES (42);
|
||||
ROLLBACK;
|
||||
sync_slave_with_master;
|
||||
connection master;
|
||||
--enable_parsing
|
||||
BEGIN;
|
||||
INSERT INTO ndb_myisam VALUES (43);
|
||||
INSERT INTO ndb_myisam VALUES (44);
|
||||
|
|
@ -295,6 +314,10 @@ connection master;
|
|||
|
||||
SET AUTOCOMMIT = 0;
|
||||
|
||||
# These tests do not work in ROW mode after the changes introduced in
|
||||
# BUG#40116. After WL#2687 is pushed, these tests should be enabled
|
||||
# again.
|
||||
--disable_parsing
|
||||
# This tests BUG#29288.
|
||||
INSERT INTO myisam_innodb VALUES (61);
|
||||
INSERT INTO myisam_innodb VALUES (62);
|
||||
|
|
@ -305,6 +328,7 @@ INSERT INTO myisam_ndb VALUES (63);
|
|||
INSERT INTO myisam_ndb VALUES (64);
|
||||
sync_slave_with_master;
|
||||
connection master;
|
||||
--enable_parsing
|
||||
|
||||
|
||||
--echo ==== Show results ====
|
||||
|
|
|
|||
|
|
@ -431,6 +431,7 @@ static SYMBOL symbols[] = {
|
|||
{ "REDUNDANT", SYM(REDUNDANT_SYM)},
|
||||
{ "REFERENCES", SYM(REFERENCES)},
|
||||
{ "REGEXP", SYM(REGEXP)},
|
||||
{ "RELAYLOG", SYM(RELAYLOG_SYM)},
|
||||
{ "RELAY_LOG_FILE", SYM(RELAY_LOG_FILE_SYM)},
|
||||
{ "RELAY_LOG_POS", SYM(RELAY_LOG_POS_SYM)},
|
||||
{ "RELAY_THREAD", SYM(RELAY_THREAD)},
|
||||
|
|
|
|||
105
sql/log.cc
105
sql/log.cc
|
|
@ -49,11 +49,10 @@
|
|||
|
||||
LOGGER logger;
|
||||
|
||||
MYSQL_BIN_LOG mysql_bin_log;
|
||||
ulong sync_binlog_counter= 0;
|
||||
MYSQL_BIN_LOG mysql_bin_log(&sync_binlog_period);
|
||||
|
||||
static bool test_if_number(const char *str,
|
||||
long *res, bool allow_wildcards);
|
||||
ulong *res, bool allow_wildcards);
|
||||
static int binlog_init(void *p);
|
||||
static int binlog_close_connection(handlerton *hton, THD *thd);
|
||||
static int binlog_savepoint_set(handlerton *hton, THD *thd, void *sv);
|
||||
|
|
@ -961,6 +960,7 @@ bool LOGGER::slow_log_print(THD *thd, const char *query, uint query_length,
|
|||
uint user_host_len= 0;
|
||||
ulonglong query_utime, lock_utime;
|
||||
|
||||
DBUG_ASSERT(thd->enable_slow_log);
|
||||
/*
|
||||
Print the message to the buffer if we have slow log enabled
|
||||
*/
|
||||
|
|
@ -1834,22 +1834,27 @@ static void setup_windows_event_source()
|
|||
/**
|
||||
Find a unique filename for 'filename.#'.
|
||||
|
||||
Set '#' to a number as low as possible.
|
||||
Set '#' to the number next to the maximum found in the most
|
||||
recent log file extension.
|
||||
|
||||
This function will return nonzero if: (i) the generated name
|
||||
exceeds FN_REFLEN; (ii) if the number of extensions is exhausted;
|
||||
or (iii) some other error happened while examining the filesystem.
|
||||
|
||||
@return
|
||||
nonzero if not possible to get unique filename
|
||||
nonzero if not possible to get unique filename.
|
||||
*/
|
||||
|
||||
static int find_uniq_filename(char *name)
|
||||
{
|
||||
long number;
|
||||
uint i;
|
||||
char buff[FN_REFLEN];
|
||||
char buff[FN_REFLEN], ext_buf[FN_REFLEN];
|
||||
struct st_my_dir *dir_info;
|
||||
reg1 struct fileinfo *file_info;
|
||||
ulong max_found=0;
|
||||
ulong max_found= 0, next= 0, number= 0;
|
||||
size_t buf_length, length;
|
||||
char *start, *end;
|
||||
int error= 0;
|
||||
DBUG_ENTER("find_uniq_filename");
|
||||
|
||||
length= dirname_part(buff, name, &buf_length);
|
||||
|
|
@ -1862,7 +1867,7 @@ static int find_uniq_filename(char *name)
|
|||
if (!(dir_info= my_dir(buff,MYF(MY_DONT_SORT))))
|
||||
{ // This shouldn't happen
|
||||
strmov(end,".1"); // use name+1
|
||||
DBUG_RETURN(0);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
file_info= dir_info->dir_entry;
|
||||
for (i= dir_info->number_off_files ; i-- ; file_info++)
|
||||
|
|
@ -1875,9 +1880,44 @@ static int find_uniq_filename(char *name)
|
|||
}
|
||||
my_dirend(dir_info);
|
||||
|
||||
/* check if reached the maximum possible extension number */
|
||||
if ((max_found == MAX_LOG_UNIQUE_FN_EXT))
|
||||
{
|
||||
sql_print_error("Log filename extension number exhausted: %06lu. \
|
||||
Please fix this by archiving old logs and \
|
||||
updating the index files.", max_found);
|
||||
error= 1;
|
||||
goto end;
|
||||
}
|
||||
|
||||
next= max_found + 1;
|
||||
sprintf(ext_buf, "%06lu", next);
|
||||
*end++='.';
|
||||
sprintf(end,"%06ld",max_found+1);
|
||||
DBUG_RETURN(0);
|
||||
|
||||
/*
|
||||
Check if the generated extension size + the file name exceeds the
|
||||
buffer size used. If one did not check this, then the filename might be
|
||||
truncated, resulting in error.
|
||||
*/
|
||||
if (((strlen(ext_buf) + (end - name)) >= FN_REFLEN))
|
||||
{
|
||||
sql_print_error("Log filename too large: %s%s (%d). \
|
||||
Please fix this by archiving old logs and updating the \
|
||||
index files.", name, ext_buf, (strlen(ext_buf) + (end - name)));
|
||||
error= 1;
|
||||
goto end;
|
||||
}
|
||||
|
||||
sprintf(end, "%06lu", next);
|
||||
|
||||
/* print warning if reaching the end of available extensions. */
|
||||
if ((next > (MAX_LOG_UNIQUE_FN_EXT - LOG_WARN_UNIQUE_FN_EXT_LEFT)))
|
||||
sql_print_warning("Next log extension: %lu. \
|
||||
Remaining log filename extensions: %lu. \
|
||||
Please consider archiving some logs.", next, (MAX_LOG_UNIQUE_FN_EXT - next));
|
||||
|
||||
end:
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -2076,6 +2116,13 @@ int MYSQL_LOG::generate_new_name(char *new_name, const char *log_name)
|
|||
{
|
||||
if (find_uniq_filename(new_name))
|
||||
{
|
||||
/*
|
||||
This should be treated as error once propagation of error further
|
||||
up in the stack gets proper handling.
|
||||
*/
|
||||
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_NO_UNIQUE_LOGFILE, ER(ER_NO_UNIQUE_LOGFILE),
|
||||
log_name);
|
||||
sql_print_error(ER(ER_NO_UNIQUE_LOGFILE), log_name);
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -2410,9 +2457,10 @@ const char *MYSQL_LOG::generate_name(const char *log_name,
|
|||
|
||||
|
||||
|
||||
MYSQL_BIN_LOG::MYSQL_BIN_LOG()
|
||||
MYSQL_BIN_LOG::MYSQL_BIN_LOG(uint *sync_period)
|
||||
:bytes_written(0), prepared_xids(0), file_id(1), open_count(1),
|
||||
need_start_event(TRUE), m_table_map_version(0),
|
||||
sync_period_ptr(sync_period),
|
||||
is_relay_log(0), signal_cnt(0),
|
||||
description_event_for_exec(0), description_event_for_queue(0)
|
||||
{
|
||||
|
|
@ -3643,6 +3691,8 @@ bool MYSQL_BIN_LOG::append(Log_event* ev)
|
|||
}
|
||||
bytes_written+= ev->data_written;
|
||||
DBUG_PRINT("info",("max_size: %lu",max_size));
|
||||
if (flush_and_sync(0))
|
||||
goto err;
|
||||
if ((uint) my_b_append_tell(&log_file) > max_size)
|
||||
new_file_without_locking();
|
||||
|
||||
|
|
@ -3673,6 +3723,8 @@ bool MYSQL_BIN_LOG::appendv(const char* buf, uint len,...)
|
|||
bytes_written += len;
|
||||
} while ((buf=va_arg(args,const char*)) && (len=va_arg(args,uint)));
|
||||
DBUG_PRINT("info",("max_size: %lu",max_size));
|
||||
if (flush_and_sync(0))
|
||||
goto err;
|
||||
if ((uint) my_b_append_tell(&log_file) > max_size)
|
||||
new_file_without_locking();
|
||||
|
||||
|
|
@ -3682,17 +3734,21 @@ err:
|
|||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
|
||||
bool MYSQL_BIN_LOG::flush_and_sync()
|
||||
bool MYSQL_BIN_LOG::flush_and_sync(bool *synced)
|
||||
{
|
||||
int err=0, fd=log_file.file;
|
||||
if (synced)
|
||||
*synced= 0;
|
||||
safe_mutex_assert_owner(&LOCK_log);
|
||||
if (flush_io_cache(&log_file))
|
||||
return 1;
|
||||
if (++sync_binlog_counter >= sync_binlog_period && sync_binlog_period)
|
||||
uint sync_period= get_sync_period();
|
||||
if (sync_period && ++sync_counter >= sync_period)
|
||||
{
|
||||
sync_binlog_counter= 0;
|
||||
sync_counter= 0;
|
||||
err=my_sync(fd, MYF(MY_WME));
|
||||
if (synced)
|
||||
*synced= 1;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
|
@ -3983,7 +4039,7 @@ MYSQL_BIN_LOG::flush_and_set_pending_rows_event(THD *thd,
|
|||
|
||||
if (file == &log_file)
|
||||
{
|
||||
error= flush_and_sync();
|
||||
error= flush_and_sync(0);
|
||||
if (!error)
|
||||
{
|
||||
signal_update();
|
||||
|
|
@ -4169,7 +4225,8 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info)
|
|||
|
||||
if (file == &log_file) // we are writing to the real log (disk)
|
||||
{
|
||||
if (flush_and_sync())
|
||||
bool synced;
|
||||
if (flush_and_sync(&synced))
|
||||
goto err;
|
||||
signal_update();
|
||||
rotate_and_purge(RP_LOCK_LOG_IS_ALREADY_LOCKED);
|
||||
|
|
@ -4425,7 +4482,7 @@ int MYSQL_BIN_LOG::write_cache(IO_CACHE *cache, bool lock_log, bool sync_log)
|
|||
DBUG_ASSERT(carry == 0);
|
||||
|
||||
if (sync_log)
|
||||
flush_and_sync();
|
||||
return flush_and_sync(0);
|
||||
|
||||
return 0; // All OK
|
||||
}
|
||||
|
|
@ -4472,7 +4529,8 @@ bool MYSQL_BIN_LOG::write_incident(THD *thd, bool lock)
|
|||
ev.write(&log_file);
|
||||
if (lock)
|
||||
{
|
||||
if (!error && !(error= flush_and_sync()))
|
||||
bool synced;
|
||||
if (!error && !(error= flush_and_sync(&synced)))
|
||||
{
|
||||
signal_update();
|
||||
rotate_and_purge(RP_LOCK_LOG_IS_ALREADY_LOCKED);
|
||||
|
|
@ -4560,7 +4618,8 @@ bool MYSQL_BIN_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event,
|
|||
if (incident && write_incident(thd, FALSE))
|
||||
goto err;
|
||||
|
||||
if (flush_and_sync())
|
||||
bool synced;
|
||||
if (flush_and_sync(&synced))
|
||||
goto err;
|
||||
DBUG_EXECUTE_IF("half_binlogged_transaction", abort(););
|
||||
if (cache->error) // Error on read
|
||||
|
|
@ -4766,11 +4825,11 @@ void MYSQL_BIN_LOG::set_max_size(ulong max_size_arg)
|
|||
@retval
|
||||
1 String is a number
|
||||
@retval
|
||||
0 Error
|
||||
0 String is not a number
|
||||
*/
|
||||
|
||||
static bool test_if_number(register const char *str,
|
||||
long *res, bool allow_wildcards)
|
||||
ulong *res, bool allow_wildcards)
|
||||
{
|
||||
reg2 int flag;
|
||||
const char *start;
|
||||
|
|
|
|||
42
sql/log.h
42
sql/log.h
|
|
@ -121,6 +121,19 @@ extern TC_LOG_DUMMY tc_log_dummy;
|
|||
#define LOG_CLOSE_TO_BE_OPENED 2
|
||||
#define LOG_CLOSE_STOP_EVENT 4
|
||||
|
||||
/*
|
||||
Maximum unique log filename extension.
|
||||
Note: setting to 0x7FFFFFFF due to atol windows
|
||||
overflow/truncate.
|
||||
*/
|
||||
#define MAX_LOG_UNIQUE_FN_EXT 0x7FFFFFFF
|
||||
|
||||
/*
|
||||
Number of warnings that will be printed to error log
|
||||
before extension number is exhausted.
|
||||
*/
|
||||
#define LOG_WARN_UNIQUE_FN_EXT_LEFT 1000
|
||||
|
||||
class Relay_log_info;
|
||||
|
||||
typedef struct st_log_info
|
||||
|
|
@ -269,6 +282,18 @@ class MYSQL_BIN_LOG: public TC_LOG, private MYSQL_LOG
|
|||
|
||||
ulonglong m_table_map_version;
|
||||
|
||||
/* pointer to the sync period variable, for binlog this will be
|
||||
sync_binlog_period, for relay log this will be
|
||||
sync_relay_log_period
|
||||
*/
|
||||
uint *sync_period_ptr;
|
||||
uint sync_counter;
|
||||
|
||||
inline uint get_sync_period()
|
||||
{
|
||||
return *sync_period_ptr;
|
||||
}
|
||||
|
||||
int write_to_file(IO_CACHE *cache);
|
||||
/*
|
||||
This is used to start writing to a new log file. The difference from
|
||||
|
|
@ -296,7 +321,7 @@ public:
|
|||
Format_description_log_event *description_event_for_exec,
|
||||
*description_event_for_queue;
|
||||
|
||||
MYSQL_BIN_LOG();
|
||||
MYSQL_BIN_LOG(uint *sync_period);
|
||||
/*
|
||||
note that there's no destructor ~MYSQL_BIN_LOG() !
|
||||
The reason is that we don't want it to be automatically called
|
||||
|
|
@ -379,7 +404,20 @@ public:
|
|||
bool is_active(const char* log_file_name);
|
||||
int update_log_index(LOG_INFO* linfo, bool need_update_threads);
|
||||
void rotate_and_purge(uint flags);
|
||||
bool flush_and_sync();
|
||||
/**
|
||||
Flush binlog cache and synchronize to disk.
|
||||
|
||||
This function flushes events in binlog cache to binary log file,
|
||||
it will do synchronizing according to the setting of system
|
||||
variable 'sync_binlog'. If file is synchronized, @c synced will
|
||||
be set to 1, otherwise 0.
|
||||
|
||||
@param[out] synced if not NULL, set to 1 if file is synchronized, otherwise 0
|
||||
|
||||
@retval 0 Success
|
||||
@retval other Failure
|
||||
*/
|
||||
bool flush_and_sync(bool *synced);
|
||||
int purge_logs(const char *to_log, bool included,
|
||||
bool need_mutex, bool need_update_threads,
|
||||
ulonglong *decrease_log_space);
|
||||
|
|
|
|||
|
|
@ -8445,13 +8445,17 @@ Rows_log_event::write_row(const Relay_log_info *const rli,
|
|||
auto_afree_ptr<char> key(NULL);
|
||||
|
||||
/* fill table->record[0] with default values */
|
||||
|
||||
bool abort_on_warnings= (rli->sql_thd->variables.sql_mode &
|
||||
(MODE_STRICT_TRANS_TABLES | MODE_STRICT_ALL_TABLES));
|
||||
if ((error= prepare_record(table, m_width,
|
||||
TRUE /* check if columns have def. values */)))
|
||||
table->file->ht->db_type != DB_TYPE_NDBCLUSTER,
|
||||
abort_on_warnings, m_curr_row == m_rows_buf)))
|
||||
DBUG_RETURN(error);
|
||||
|
||||
/* unpack row into table->record[0] */
|
||||
error= unpack_current_row(rli); // TODO: how to handle errors?
|
||||
if ((error= unpack_current_row(rli, abort_on_warnings)))
|
||||
DBUG_RETURN(error);
|
||||
|
||||
if (m_curr_row == m_rows_buf)
|
||||
{
|
||||
/* this is the first row to be inserted, we estimate the rows with
|
||||
|
|
@ -9248,8 +9252,12 @@ Update_rows_log_event::do_exec_row(const Relay_log_info *const rli)
|
|||
|
||||
store_record(m_table,record[1]);
|
||||
|
||||
bool abort_on_warnings= (rli->sql_thd->variables.sql_mode &
|
||||
(MODE_STRICT_TRANS_TABLES | MODE_STRICT_ALL_TABLES));
|
||||
m_curr_row= m_curr_row_end;
|
||||
error= unpack_current_row(rli); // this also updates m_curr_row_end
|
||||
/* this also updates m_curr_row_end */
|
||||
if ((error= unpack_current_row(rli, abort_on_warnings)))
|
||||
return error;
|
||||
|
||||
/*
|
||||
Now we have the right row to update. The old row (the one we're
|
||||
|
|
|
|||
|
|
@ -3562,12 +3562,16 @@ protected:
|
|||
int write_row(const Relay_log_info *const, const bool);
|
||||
|
||||
// Unpack the current row into m_table->record[0]
|
||||
int unpack_current_row(const Relay_log_info *const rli)
|
||||
int unpack_current_row(const Relay_log_info *const rli,
|
||||
const bool abort_on_warning= TRUE)
|
||||
{
|
||||
DBUG_ASSERT(m_table);
|
||||
|
||||
bool first_row= (m_curr_row == m_rows_buf);
|
||||
ASSERT_OR_RETURN_ERROR(m_curr_row < m_rows_end, HA_ERR_CORRUPT_EVENT);
|
||||
int const result= ::unpack_row(rli, m_table, m_width, m_curr_row, &m_cols,
|
||||
&m_curr_row_end, &m_master_reclength);
|
||||
&m_curr_row_end, &m_master_reclength,
|
||||
abort_on_warning, first_row);
|
||||
if (m_curr_row_end > m_rows_end)
|
||||
my_error(ER_SLAVE_CORRUPT_EVENT, MYF(0));
|
||||
ASSERT_OR_RETURN_ERROR(m_curr_row_end <= m_rows_end, HA_ERR_CORRUPT_EVENT);
|
||||
|
|
|
|||
|
|
@ -938,100 +938,6 @@ struct Query_cache_query_flags
|
|||
#define query_cache_is_cacheable_query(L) 0
|
||||
#endif /*HAVE_QUERY_CACHE*/
|
||||
|
||||
/*
|
||||
Error injector Macros to enable easy testing of recovery after failures
|
||||
in various error cases.
|
||||
*/
|
||||
#ifndef ERROR_INJECT_SUPPORT
|
||||
|
||||
#define ERROR_INJECT(x) 0
|
||||
#define ERROR_INJECT_ACTION(x,action) 0
|
||||
#define ERROR_INJECT_CRASH(x) 0
|
||||
#define ERROR_INJECT_VALUE(x) 0
|
||||
#define ERROR_INJECT_VALUE_ACTION(x,action) 0
|
||||
#define ERROR_INJECT_VALUE_CRASH(x) 0
|
||||
#define SET_ERROR_INJECT_VALUE(x)
|
||||
|
||||
#else
|
||||
|
||||
inline bool check_and_unset_keyword(const char *dbug_str)
|
||||
{
|
||||
const char *extra_str= "-d,";
|
||||
char total_str[200];
|
||||
if (_db_strict_keyword_ (dbug_str))
|
||||
{
|
||||
strxmov(total_str, extra_str, dbug_str, NullS);
|
||||
DBUG_SET(total_str);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
inline bool
|
||||
check_and_unset_inject_value(int value)
|
||||
{
|
||||
THD *thd= current_thd;
|
||||
if (thd->error_inject_value == (uint)value)
|
||||
{
|
||||
thd->error_inject_value= 0;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
ERROR INJECT MODULE:
|
||||
--------------------
|
||||
These macros are used to insert macros from the application code.
|
||||
The event that activates those error injections can be activated
|
||||
from SQL by using:
|
||||
SET SESSION dbug=+d,code;
|
||||
|
||||
After the error has been injected, the macros will automatically
|
||||
remove the debug code, thus similar to using:
|
||||
SET SESSION dbug=-d,code
|
||||
from SQL.
|
||||
|
||||
ERROR_INJECT_CRASH will inject a crash of the MySQL Server if code
|
||||
is set when macro is called. ERROR_INJECT_CRASH can be used in
|
||||
if-statements, it will always return FALSE unless of course it
|
||||
crashes in which case it doesn't return at all.
|
||||
|
||||
ERROR_INJECT_ACTION will inject the action specified in the action
|
||||
parameter of the macro, before performing the action the code will
|
||||
be removed such that no more events occur. ERROR_INJECT_ACTION
|
||||
can also be used in if-statements and always returns FALSE.
|
||||
ERROR_INJECT can be used in a normal if-statement, where the action
|
||||
part is performed in the if-block. The macro returns TRUE if the
|
||||
error was activated and otherwise returns FALSE. If activated the
|
||||
code is removed.
|
||||
|
||||
Sometimes it is necessary to perform error inject actions as a serie
|
||||
of events. In this case one can use one variable on the THD object.
|
||||
Thus one sets this value by using e.g. SET_ERROR_INJECT_VALUE(100).
|
||||
Then one can later test for it by using ERROR_INJECT_CRASH_VALUE,
|
||||
ERROR_INJECT_ACTION_VALUE and ERROR_INJECT_VALUE. This have the same
|
||||
behaviour as the above described macros except that they use the
|
||||
error inject value instead of a code used by DBUG macros.
|
||||
*/
|
||||
#define SET_ERROR_INJECT_VALUE(x) \
|
||||
current_thd->error_inject_value= (x)
|
||||
#define ERROR_INJECT_CRASH(code) \
|
||||
DBUG_EVALUATE_IF(code, (abort(), 0), 0)
|
||||
#define ERROR_INJECT_ACTION(code, action) \
|
||||
(check_and_unset_keyword(code) ? ((action), 0) : 0)
|
||||
#define ERROR_INJECT(code) \
|
||||
check_and_unset_keyword(code)
|
||||
#define ERROR_INJECT_VALUE(value) \
|
||||
check_and_unset_inject_value(value)
|
||||
#define ERROR_INJECT_VALUE_ACTION(value,action) \
|
||||
(check_and_unset_inject_value(value) ? (action) : 0)
|
||||
#define ERROR_INJECT_VALUE_CRASH(value) \
|
||||
ERROR_INJECT_VALUE_ACTION(value, (abort(), 0))
|
||||
|
||||
#endif
|
||||
|
||||
void write_bin_log(THD *thd, bool clear_error,
|
||||
char const *query, ulong query_length);
|
||||
|
||||
|
|
@ -1962,10 +1868,13 @@ extern ulong MYSQL_PLUGIN_IMPORT specialflag;
|
|||
#endif /* MYSQL_SERVER || INNODB_COMPATIBILITY_HOOKS */
|
||||
#ifdef MYSQL_SERVER
|
||||
extern ulong current_pid;
|
||||
extern ulong expire_logs_days, sync_binlog_period, sync_binlog_counter;
|
||||
extern ulong expire_logs_days;
|
||||
extern uint sync_binlog_period, sync_relaylog_period,
|
||||
sync_relayloginfo_period, sync_masterinfo_period;
|
||||
extern ulong opt_tc_log_size, tc_log_max_pages_used, tc_log_page_size;
|
||||
extern ulong tc_log_page_waits;
|
||||
extern my_bool relay_log_purge, opt_innodb_safe_binlog, opt_innodb;
|
||||
extern my_bool relay_log_recovery;
|
||||
extern uint test_flags,select_errors,ha_open_options;
|
||||
extern uint protocol_version, mysqld_port, dropping_tables;
|
||||
extern uint delay_key_write_options;
|
||||
|
|
|
|||
|
|
@ -477,6 +477,7 @@ extern const char *opt_ndb_distribution;
|
|||
extern enum ndb_distribution opt_ndb_distribution_id;
|
||||
#endif
|
||||
my_bool opt_readonly, use_temp_pool, relay_log_purge;
|
||||
my_bool relay_log_recovery;
|
||||
my_bool opt_sync_frm, opt_allow_suspicious_udfs;
|
||||
my_bool opt_secure_auth= 0;
|
||||
char* opt_secure_file_priv= 0;
|
||||
|
|
@ -552,7 +553,9 @@ ulong max_prepared_stmt_count;
|
|||
*/
|
||||
ulong prepared_stmt_count=0;
|
||||
ulong thread_id=1L,current_pid;
|
||||
ulong slow_launch_threads = 0, sync_binlog_period;
|
||||
ulong slow_launch_threads = 0;
|
||||
uint sync_binlog_period= 0, sync_relaylog_period= 0,
|
||||
sync_relayloginfo_period= 0, sync_masterinfo_period= 0;
|
||||
ulong expire_logs_days = 0;
|
||||
ulong rpl_recovery_rank=0;
|
||||
const char *log_output_str= "FILE";
|
||||
|
|
@ -3135,6 +3138,7 @@ SHOW_VAR com_status_vars[]= {
|
|||
{"show_processlist", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_PROCESSLIST]), SHOW_LONG_STATUS},
|
||||
{"show_profile", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_PROFILE]), SHOW_LONG_STATUS},
|
||||
{"show_profiles", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_PROFILES]), SHOW_LONG_STATUS},
|
||||
{"show_relaylog_events", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_RELAYLOG_EVENTS]), SHOW_LONG_STATUS},
|
||||
{"show_slave_hosts", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_HOSTS]), SHOW_LONG_STATUS},
|
||||
{"show_slave_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_STAT]), SHOW_LONG_STATUS},
|
||||
{"show_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_STATUS]), SHOW_LONG_STATUS},
|
||||
|
|
@ -3818,17 +3822,17 @@ with --log-bin instead.");
|
|||
}
|
||||
if (opt_log_slave_updates && !opt_bin_log)
|
||||
{
|
||||
sql_print_error("You need to use --log-bin to make "
|
||||
sql_print_warning("You need to use --log-bin to make "
|
||||
"--log-slave-updates work.");
|
||||
unireg_abort(1);
|
||||
}
|
||||
if (!opt_bin_log)
|
||||
{
|
||||
if (opt_binlog_format_id != BINLOG_FORMAT_UNSPEC)
|
||||
{
|
||||
sql_print_error("You need to use --log-bin to make "
|
||||
sql_print_warning("You need to use --log-bin to make "
|
||||
"--binlog-format work.");
|
||||
unireg_abort(1);
|
||||
|
||||
global_system_variables.binlog_format= opt_binlog_format_id;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -3850,12 +3854,18 @@ with --log-bin instead.");
|
|||
#ifdef HAVE_REPLICATION
|
||||
if (opt_log_slave_updates && replicate_same_server_id)
|
||||
{
|
||||
sql_print_error("\
|
||||
using --replicate-same-server-id in conjunction with \
|
||||
if (opt_bin_log)
|
||||
{
|
||||
sql_print_error("using --replicate-same-server-id in conjunction with \
|
||||
--log-slave-updates is impossible, it would lead to infinite loops in this \
|
||||
server.");
|
||||
unireg_abort(1);
|
||||
}
|
||||
else
|
||||
sql_print_warning("using --replicate-same-server-id in conjunction with \
|
||||
--log-slave-updates would lead to infinite loops in this server. However this \
|
||||
will be ignored as the --log-bin option is not defined.");
|
||||
}
|
||||
#endif
|
||||
|
||||
if (opt_bin_log)
|
||||
|
|
@ -5598,6 +5608,7 @@ enum options_mysqld
|
|||
OPT_QUERY_CACHE_TYPE, OPT_QUERY_CACHE_WLOCK_INVALIDATE, OPT_RECORD_BUFFER,
|
||||
OPT_RECORD_RND_BUFFER, OPT_DIV_PRECINCREMENT, OPT_RELAY_LOG_SPACE_LIMIT,
|
||||
OPT_RELAY_LOG_PURGE,
|
||||
OPT_RELAY_LOG_RECOVERY,
|
||||
OPT_SLAVE_NET_TIMEOUT, OPT_SLAVE_COMPRESSED_PROTOCOL, OPT_SLOW_LAUNCH_TIME,
|
||||
OPT_SLAVE_TRANS_RETRIES, OPT_READONLY, OPT_DEBUGGING,
|
||||
OPT_SORT_BUFFER, OPT_TABLE_OPEN_CACHE, OPT_TABLE_DEF_CACHE,
|
||||
|
|
@ -5661,7 +5672,10 @@ enum options_mysqld
|
|||
OPT_SLAVE_EXEC_MODE,
|
||||
OPT_GENERAL_LOG_FILE,
|
||||
OPT_SLOW_QUERY_LOG_FILE,
|
||||
OPT_IGNORE_BUILTIN_INNODB
|
||||
OPT_IGNORE_BUILTIN_INNODB,
|
||||
OPT_SYNC_RELAY_LOG,
|
||||
OPT_SYNC_RELAY_LOG_INFO,
|
||||
OPT_SYNC_MASTER_INFO
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -6881,6 +6895,13 @@ The minimum value for this variable is 4096.",
|
|||
(uchar**) &relay_log_purge,
|
||||
(uchar**) &relay_log_purge, 0, GET_BOOL, NO_ARG,
|
||||
1, 0, 1, 0, 1, 0},
|
||||
{"relay_log_recovery", OPT_RELAY_LOG_RECOVERY,
|
||||
"Enables automatic relay log recovery right after the database startup, "
|
||||
"which means that the IO Thread starts re-fetching from the master "
|
||||
"right after the last transaction processed.",
|
||||
(uchar**) &relay_log_recovery,
|
||||
(uchar**) &relay_log_recovery, 0, GET_BOOL, NO_ARG,
|
||||
0, 0, 1, 0, 1, 0},
|
||||
{"relay_log_space_limit", OPT_RELAY_LOG_SPACE_LIMIT,
|
||||
"Maximum space to use for all relay logs.",
|
||||
(uchar**) &relay_log_space_limit,
|
||||
|
|
@ -6915,8 +6936,23 @@ The minimum value for this variable is 4096.",
|
|||
{"sync-binlog", OPT_SYNC_BINLOG,
|
||||
"Synchronously flush binary log to disk after every #th event. "
|
||||
"Use 0 (default) to disable synchronous flushing.",
|
||||
(uchar**) &sync_binlog_period, (uchar**) &sync_binlog_period, 0, GET_ULONG,
|
||||
REQUIRED_ARG, 0, 0, ULONG_MAX, 0, 1, 0},
|
||||
(uchar**) &sync_binlog_period, (uchar**) &sync_binlog_period, 0, GET_UINT,
|
||||
REQUIRED_ARG, 0, 0, (longlong) UINT_MAX, 0, 1, 0},
|
||||
{"sync-relay-log", OPT_SYNC_RELAY_LOG,
|
||||
"Synchronously flush relay log to disk after every #th event. "
|
||||
"Use 0 (default) to disable synchronous flushing.",
|
||||
(uchar**) &sync_relaylog_period, (uchar**) &sync_relaylog_period, 0, GET_UINT,
|
||||
REQUIRED_ARG, 0, 0, (longlong) UINT_MAX, 0, 1, 0},
|
||||
{"sync-relay-log-info", OPT_SYNC_RELAY_LOG_INFO,
|
||||
"Synchronously flush relay log info to disk after #th transaction. "
|
||||
"Use 0 (default) to disable synchronous flushing.",
|
||||
(uchar**) &sync_relayloginfo_period, (uchar**) &sync_relayloginfo_period, 0, GET_UINT,
|
||||
REQUIRED_ARG, 0, 0, (longlong) UINT_MAX, 0, 1, 0},
|
||||
{"sync-master-info", OPT_SYNC_MASTER_INFO,
|
||||
"Synchronously flush master info to disk after every #th event. "
|
||||
"Use 0 (default) to disable synchronous flushing.",
|
||||
(uchar**) &sync_masterinfo_period, (uchar**) &sync_masterinfo_period, 0, GET_UINT,
|
||||
REQUIRED_ARG, 0, 0, (longlong) UINT_MAX, 0, 1, 0},
|
||||
{"sync-frm", OPT_SYNC_FRM, "Sync .frm to disk on create. Enabled by default.",
|
||||
(uchar**) &opt_sync_frm, (uchar**) &opt_sync_frm, 0, GET_BOOL, NO_ARG, 1, 0,
|
||||
0, 0, 0, 0},
|
||||
|
|
@ -7042,7 +7078,8 @@ static int show_slave_running(THD *thd, SHOW_VAR *var, char *buff)
|
|||
var->type= SHOW_MY_BOOL;
|
||||
pthread_mutex_lock(&LOCK_active_mi);
|
||||
var->value= buff;
|
||||
*((my_bool *)buff)= (my_bool) (active_mi && active_mi->slave_running &&
|
||||
*((my_bool *)buff)= (my_bool) (active_mi &&
|
||||
active_mi->slave_running == MYSQL_SLAVE_RUN_CONNECT &&
|
||||
active_mi->rli.slave_running);
|
||||
pthread_mutex_unlock(&LOCK_active_mi);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -29,10 +29,11 @@ int init_strvar_from_file(char *var, int max_size, IO_CACHE *f,
|
|||
int init_floatvar_from_file(float* var, IO_CACHE* f, float default_val);
|
||||
int init_dynarray_intvar_from_file(DYNAMIC_ARRAY* arr, IO_CACHE* f);
|
||||
|
||||
Master_info::Master_info()
|
||||
Master_info::Master_info(bool is_slave_recovery)
|
||||
:Slave_reporting_capability("I/O"),
|
||||
ssl(0), ssl_verify_server_cert(0), fd(-1), io_thd(0), inited(0),
|
||||
abort_slave(0),slave_running(0), slave_run_id(0),
|
||||
rli(is_slave_recovery), abort_slave(0), slave_running(0),
|
||||
slave_run_id(0), sync_counter(0),
|
||||
heartbeat_period(0), received_heartbeats(0), master_id(0)
|
||||
{
|
||||
host[0] = 0; user[0] = 0; password[0] = 0;
|
||||
|
|
@ -383,6 +384,7 @@ file '%s')", fname);
|
|||
goto err;
|
||||
|
||||
mi->inited = 1;
|
||||
mi->rli.is_relay_log_recovery= FALSE;
|
||||
// now change cache READ -> WRITE - must do this before flush_master_info
|
||||
reinit_io_cache(&mi->file, WRITE_CACHE, 0L, 0, 1);
|
||||
if ((error=test(flush_master_info(mi, 1))))
|
||||
|
|
@ -415,6 +417,7 @@ int flush_master_info(Master_info* mi, bool flush_relay_log_cache)
|
|||
{
|
||||
IO_CACHE* file = &mi->file;
|
||||
char lbuf[22];
|
||||
int err= 0;
|
||||
|
||||
DBUG_ENTER("flush_master_info");
|
||||
DBUG_PRINT("enter",("master_pos: %ld", (long) mi->master_log_pos));
|
||||
|
|
@ -431,9 +434,12 @@ int flush_master_info(Master_info* mi, bool flush_relay_log_cache)
|
|||
When we come to this place in code, relay log may or not be initialized;
|
||||
the caller is responsible for setting 'flush_relay_log_cache' accordingly.
|
||||
*/
|
||||
if (flush_relay_log_cache &&
|
||||
flush_io_cache(mi->rli.relay_log.get_log_file()))
|
||||
if (flush_relay_log_cache)
|
||||
{
|
||||
IO_CACHE *log_file= mi->rli.relay_log.get_log_file();
|
||||
if (flush_io_cache(log_file))
|
||||
DBUG_RETURN(2);
|
||||
}
|
||||
|
||||
/*
|
||||
produce a line listing the total number and all the ignored server_id:s
|
||||
|
|
@ -457,6 +463,7 @@ int flush_master_info(Master_info* mi, bool flush_relay_log_cache)
|
|||
" %lu", s_id));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
We flushed the relay log BEFORE the master.info file, because if we crash
|
||||
now, we will get a duplicate event in the relay log at restart. If we
|
||||
|
|
@ -485,9 +492,15 @@ int flush_master_info(Master_info* mi, bool flush_relay_log_cache)
|
|||
(int)(mi->ssl), mi->ssl_ca, mi->ssl_capath, mi->ssl_cert,
|
||||
mi->ssl_cipher, mi->ssl_key, mi->ssl_verify_server_cert,
|
||||
heartbeat_buf, ignore_server_ids_buf);
|
||||
|
||||
my_free(ignore_server_ids_buf, MYF(0));
|
||||
DBUG_RETURN(-flush_io_cache(file));
|
||||
err= flush_io_cache(file);
|
||||
if (sync_masterinfo_period && !err &&
|
||||
++(mi->sync_counter) >= sync_masterinfo_period)
|
||||
{
|
||||
err= my_sync(mi->fd, MYF(MY_WME));
|
||||
mi->sync_counter= 0;
|
||||
}
|
||||
DBUG_RETURN(-err);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@
|
|||
class Master_info : public Slave_reporting_capability
|
||||
{
|
||||
public:
|
||||
Master_info();
|
||||
Master_info(bool is_slave_recovery);
|
||||
~Master_info();
|
||||
bool shall_ignore_server_id(ulong s_id);
|
||||
|
||||
|
|
@ -102,6 +102,12 @@ class Master_info : public Slave_reporting_capability
|
|||
|
||||
*/
|
||||
long clock_diff_with_master;
|
||||
/*
|
||||
Keeps track of the number of events before fsyncing.
|
||||
The option --sync-master-info determines how many
|
||||
events should happen before fsyncing.
|
||||
*/
|
||||
uint sync_counter;
|
||||
float heartbeat_period; // interface with CHANGE MASTER or master.info
|
||||
ulonglong received_heartbeats; // counter of received heartbeat events
|
||||
DYNAMIC_ARRAY ignore_server_ids;
|
||||
|
|
|
|||
|
|
@ -180,7 +180,8 @@ int
|
|||
unpack_row(Relay_log_info const *rli,
|
||||
TABLE *table, uint const colcnt,
|
||||
uchar const *const row_data, MY_BITMAP const *cols,
|
||||
uchar const **const row_end, ulong *const master_reclength)
|
||||
uchar const **const row_end, ulong *const master_reclength,
|
||||
const bool abort_on_warning, const bool first_row)
|
||||
{
|
||||
DBUG_ENTER("unpack_row");
|
||||
DBUG_ASSERT(row_data);
|
||||
|
|
@ -224,8 +225,35 @@ unpack_row(Relay_log_info const *rli,
|
|||
/* Field...::unpack() cannot return 0 */
|
||||
DBUG_ASSERT(pack_ptr != NULL);
|
||||
|
||||
if ((null_bits & null_mask) && f->maybe_null())
|
||||
if (null_bits & null_mask)
|
||||
{
|
||||
if (f->maybe_null())
|
||||
{
|
||||
DBUG_PRINT("debug", ("Was NULL; null mask: 0x%x; null bits: 0x%x",
|
||||
null_mask, null_bits));
|
||||
f->set_null();
|
||||
}
|
||||
else
|
||||
{
|
||||
MYSQL_ERROR::enum_warning_level error_type=
|
||||
MYSQL_ERROR::WARN_LEVEL_NOTE;
|
||||
if (abort_on_warning && (table->file->has_transactions() ||
|
||||
first_row))
|
||||
{
|
||||
error = HA_ERR_ROWS_EVENT_APPLY;
|
||||
error_type= MYSQL_ERROR::WARN_LEVEL_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
f->set_default();
|
||||
error_type= MYSQL_ERROR::WARN_LEVEL_WARN;
|
||||
}
|
||||
push_warning_printf(current_thd, error_type,
|
||||
ER_BAD_NULL_ERROR,
|
||||
ER(ER_BAD_NULL_ERROR),
|
||||
f->field_name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
f->set_notnull();
|
||||
|
|
@ -305,13 +333,17 @@ unpack_row(Relay_log_info const *rli,
|
|||
@param table Table whose record[0] buffer is prepared.
|
||||
@param skip Number of columns for which default/nullable check
|
||||
should be skipped.
|
||||
@param check Indicates if errors should be raised when checking
|
||||
default/nullable field properties.
|
||||
@param check Specifies if lack of default error needs checking.
|
||||
@param abort_on_warning
|
||||
Controls how to react on lack of a field's default.
|
||||
The parameter mimics the master side one for
|
||||
@c check_that_all_fields_are_given_values.
|
||||
|
||||
@returns 0 on success or a handler level error code
|
||||
*/
|
||||
int prepare_record(TABLE *const table,
|
||||
const uint skip, const bool check)
|
||||
const uint skip, const bool check,
|
||||
const bool abort_on_warning, const bool first_row)
|
||||
{
|
||||
DBUG_ENTER("prepare_record");
|
||||
|
||||
|
|
@ -326,17 +358,37 @@ int prepare_record(TABLE *const table,
|
|||
if (skip >= table->s->fields || !check)
|
||||
DBUG_RETURN(0);
|
||||
|
||||
/* Checking if exists default/nullable fields in the default values. */
|
||||
|
||||
/*
|
||||
For fields the extra fields on the slave, we check if they have a default.
|
||||
The check follows the same rules as the INSERT query without specifying an
|
||||
explicit value for a field not having the explicit default
|
||||
(@c check_that_all_fields_are_given_values()).
|
||||
*/
|
||||
for (Field **field_ptr= table->field+skip; *field_ptr; ++field_ptr)
|
||||
{
|
||||
uint32 const mask= NOT_NULL_FLAG | NO_DEFAULT_VALUE_FLAG;
|
||||
Field *const f= *field_ptr;
|
||||
|
||||
if (((f->flags & mask) == mask))
|
||||
if ((f->flags & NO_DEFAULT_VALUE_FLAG) &&
|
||||
(f->real_type() != MYSQL_TYPE_ENUM))
|
||||
{
|
||||
|
||||
MYSQL_ERROR::enum_warning_level error_type=
|
||||
MYSQL_ERROR::WARN_LEVEL_NOTE;
|
||||
if (abort_on_warning && (table->file->has_transactions() ||
|
||||
first_row))
|
||||
{
|
||||
my_error(ER_NO_DEFAULT_FOR_FIELD, MYF(0), f->field_name);
|
||||
error= HA_ERR_ROWS_EVENT_APPLY;
|
||||
error_type= MYSQL_ERROR::WARN_LEVEL_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
f->set_default();
|
||||
error_type= MYSQL_ERROR::WARN_LEVEL_WARN;
|
||||
}
|
||||
push_warning_printf(current_thd, error_type,
|
||||
ER_NO_DEFAULT_FOR_FIELD,
|
||||
ER(ER_NO_DEFAULT_FOR_FIELD),
|
||||
f->field_name);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,10 +27,13 @@ size_t pack_row(TABLE* table, MY_BITMAP const* cols,
|
|||
int unpack_row(Relay_log_info const *rli,
|
||||
TABLE *table, uint const colcnt,
|
||||
uchar const *const row_data, MY_BITMAP const *cols,
|
||||
uchar const **const row_end, ulong *const master_reclength);
|
||||
uchar const **const row_end, ulong *const master_reclength,
|
||||
const bool abort_on_warning= TRUE, const bool first_row= TRUE);
|
||||
|
||||
// Fill table's record[0] with default values.
|
||||
int prepare_record(TABLE *const, const uint =0, const bool =FALSE);
|
||||
int prepare_record(TABLE *const table, const uint skip, const bool check,
|
||||
const bool abort_on_warning= TRUE,
|
||||
const bool first_row= TRUE);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -28,11 +28,12 @@ int init_intvar_from_file(int* var, IO_CACHE* f, int default_val);
|
|||
int init_strvar_from_file(char *var, int max_size, IO_CACHE *f,
|
||||
const char *default_val);
|
||||
|
||||
|
||||
Relay_log_info::Relay_log_info()
|
||||
Relay_log_info::Relay_log_info(bool is_slave_recovery)
|
||||
:Slave_reporting_capability("SQL"),
|
||||
no_storage(FALSE), replicate_same_server_id(::replicate_same_server_id),
|
||||
info_fd(-1), cur_log_fd(-1), save_temporary_tables(0),
|
||||
info_fd(-1), cur_log_fd(-1), relay_log(&sync_relaylog_period),
|
||||
sync_counter(0), is_relay_log_recovery(is_slave_recovery),
|
||||
save_temporary_tables(0),
|
||||
#if HAVE_purify
|
||||
is_fake(FALSE),
|
||||
#endif
|
||||
|
|
@ -258,6 +259,9 @@ Failed to open the existing relay log info file '%s' (errno %d)",
|
|||
rli->group_relay_log_pos= rli->event_relay_log_pos= relay_log_pos;
|
||||
rli->group_master_log_pos= master_log_pos;
|
||||
|
||||
if (rli->is_relay_log_recovery && init_recovery(rli->mi, &msg))
|
||||
goto err;
|
||||
|
||||
if (init_relay_log_pos(rli,
|
||||
rli->group_relay_log_name,
|
||||
rli->group_relay_log_pos,
|
||||
|
|
@ -289,7 +293,10 @@ Failed to open the existing relay log info file '%s' (errno %d)",
|
|||
*/
|
||||
reinit_io_cache(&rli->info_file, WRITE_CACHE,0L,0,1);
|
||||
if ((error= flush_relay_log_info(rli)))
|
||||
sql_print_error("Failed to flush relay log info file");
|
||||
{
|
||||
msg= "Failed to flush relay log info file";
|
||||
goto err;
|
||||
}
|
||||
if (count_relay_log_space(rli))
|
||||
{
|
||||
msg="Error counting relay log space";
|
||||
|
|
|
|||
|
|
@ -96,6 +96,19 @@ public:
|
|||
LOG_INFO linfo;
|
||||
IO_CACHE cache_buf,*cur_log;
|
||||
|
||||
/*
|
||||
Keeps track of the number of transactions that commits
|
||||
before fsyncing. The option --sync-relay-log-info determines
|
||||
how many transactions should commit before fsyncing.
|
||||
*/
|
||||
uint sync_counter;
|
||||
|
||||
/*
|
||||
Identifies when the recovery process is going on.
|
||||
See sql/slave.cc:init_recovery for further details.
|
||||
*/
|
||||
bool is_relay_log_recovery;
|
||||
|
||||
/* The following variables are safe to read any time */
|
||||
|
||||
/* IO_CACHE of the info file - set only during init or end */
|
||||
|
|
@ -267,7 +280,7 @@ public:
|
|||
char slave_patternload_file[FN_REFLEN];
|
||||
size_t slave_patternload_file_size;
|
||||
|
||||
Relay_log_info();
|
||||
Relay_log_info(bool is_slave_recovery);
|
||||
~Relay_log_info();
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -1534,6 +1534,23 @@ static bool get_unsigned(THD *thd, set_var *var, ulonglong user_max,
|
|||
}
|
||||
|
||||
|
||||
bool sys_var_uint_ptr::check(THD *thd, set_var *var)
|
||||
{
|
||||
var->save_result.ulong_value= (ulong) var->value->val_uint();
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool sys_var_uint_ptr::update(THD *thd, set_var *var)
|
||||
{
|
||||
*value= (uint) var->save_result.ulong_value;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sys_var_uint_ptr::set_default(THD *thd, enum_var_type type)
|
||||
{
|
||||
*value= (uint) option_limits->def_value;
|
||||
}
|
||||
|
||||
sys_var_long_ptr::
|
||||
sys_var_long_ptr(sys_var_chain *chain, const char *name_arg, ulong *value_ptr_arg,
|
||||
sys_after_update_func after_update_arg)
|
||||
|
|
|
|||
|
|
@ -175,6 +175,27 @@ public:
|
|||
{ return (uchar*) value; }
|
||||
};
|
||||
|
||||
/**
|
||||
Unsigned int system variable class
|
||||
*/
|
||||
class sys_var_uint_ptr :public sys_var
|
||||
{
|
||||
public:
|
||||
sys_var_uint_ptr(sys_var_chain *chain, const char *name_arg,
|
||||
uint *value_ptr_arg,
|
||||
sys_after_update_func after_update_arg= NULL)
|
||||
:sys_var(name_arg, after_update_arg),
|
||||
value(value_ptr_arg)
|
||||
{ chain_sys_var(chain); }
|
||||
bool check(THD *thd, set_var *var);
|
||||
bool update(THD *thd, set_var *var);
|
||||
void set_default(THD *thd, enum_var_type type);
|
||||
SHOW_TYPE show_type() { return SHOW_INT; }
|
||||
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
|
||||
{ return (uchar*) value; }
|
||||
private:
|
||||
uint *value;
|
||||
};
|
||||
|
||||
/*
|
||||
A global ulong variable that is protected by LOCK_global_system_variables
|
||||
|
|
|
|||
73
sql/slave.cc
73
sql/slave.cc
|
|
@ -220,6 +220,7 @@ void unlock_slave_threads(Master_info* mi)
|
|||
int init_slave()
|
||||
{
|
||||
DBUG_ENTER("init_slave");
|
||||
int error= 0;
|
||||
|
||||
/*
|
||||
This is called when mysqld starts. Before client connections are
|
||||
|
|
@ -231,7 +232,7 @@ int init_slave()
|
|||
TODO: re-write this to interate through the list of files
|
||||
for multi-master
|
||||
*/
|
||||
active_mi= new Master_info;
|
||||
active_mi= new Master_info(relay_log_recovery);
|
||||
|
||||
/*
|
||||
If --slave-skip-errors=... was not used, the string value for the
|
||||
|
|
@ -250,6 +251,7 @@ int init_slave()
|
|||
if (!active_mi)
|
||||
{
|
||||
sql_print_error("Failed to allocate memory for the master info structure");
|
||||
error= 1;
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
|
@ -257,6 +259,7 @@ int init_slave()
|
|||
!master_host, (SLAVE_IO | SLAVE_SQL)))
|
||||
{
|
||||
sql_print_error("Failed to initialize the master info structure");
|
||||
error= 1;
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
|
@ -275,17 +278,68 @@ int init_slave()
|
|||
SLAVE_IO | SLAVE_SQL))
|
||||
{
|
||||
sql_print_error("Failed to create slave threads");
|
||||
error= 1;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock(&LOCK_active_mi);
|
||||
DBUG_RETURN(0);
|
||||
|
||||
err:
|
||||
pthread_mutex_unlock(&LOCK_active_mi);
|
||||
DBUG_RETURN(1);
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
/*
|
||||
Updates the master info based on the information stored in the
|
||||
relay info and ignores relay logs previously retrieved by the IO
|
||||
thread, which thus starts fetching again based on to the
|
||||
group_master_log_pos and group_master_log_name. Eventually, the old
|
||||
relay logs will be purged by the normal purge mechanism.
|
||||
|
||||
In the feature, we should improve this routine in order to avoid throwing
|
||||
away logs that are safely stored in the disk. Note also that this recovery
|
||||
routine relies on the correctness of the relay-log.info and only tolerates
|
||||
coordinate problems in master.info.
|
||||
|
||||
In this function, there is no need for a mutex as the caller
|
||||
(i.e. init_slave) already has one acquired.
|
||||
|
||||
Specifically, the following structures are updated:
|
||||
|
||||
1 - mi->master_log_pos <-- rli->group_master_log_pos
|
||||
2 - mi->master_log_name <-- rli->group_master_log_name
|
||||
3 - It moves the relay log to the new relay log file, by
|
||||
rli->group_relay_log_pos <-- BIN_LOG_HEADER_SIZE;
|
||||
rli->event_relay_log_pos <-- BIN_LOG_HEADER_SIZE;
|
||||
rli->group_relay_log_name <-- rli->relay_log.get_log_fname();
|
||||
rli->event_relay_log_name <-- rli->relay_log.get_log_fname();
|
||||
|
||||
If there is an error, it returns (1), otherwise returns (0).
|
||||
*/
|
||||
int init_recovery(Master_info* mi, const char** errmsg)
|
||||
{
|
||||
DBUG_ENTER("init_recovery");
|
||||
|
||||
Relay_log_info *rli= &mi->rli;
|
||||
if (rli->group_master_log_name[0])
|
||||
{
|
||||
mi->master_log_pos= max(BIN_LOG_HEADER_SIZE,
|
||||
rli->group_master_log_pos);
|
||||
strmake(mi->master_log_name, rli->group_master_log_name,
|
||||
sizeof(mi->master_log_name)-1);
|
||||
|
||||
sql_print_warning("Recovery from master pos %ld and file %s.",
|
||||
(ulong) mi->master_log_pos, mi->master_log_name);
|
||||
|
||||
strmake(rli->group_relay_log_name, rli->relay_log.get_log_fname(),
|
||||
sizeof(rli->group_relay_log_name)-1);
|
||||
strmake(rli->event_relay_log_name, rli->relay_log.get_log_fname(),
|
||||
sizeof(mi->rli.event_relay_log_name)-1);
|
||||
|
||||
rli->group_relay_log_pos= rli->event_relay_log_pos= BIN_LOG_HEADER_SIZE;
|
||||
}
|
||||
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
/**
|
||||
Convert slave skip errors bitmap into a printable string.
|
||||
|
|
@ -4203,7 +4257,14 @@ bool flush_relay_log_info(Relay_log_info* rli)
|
|||
error=1;
|
||||
if (flush_io_cache(file))
|
||||
error=1;
|
||||
|
||||
if (sync_relayloginfo_period &&
|
||||
!error &&
|
||||
++(rli->sync_counter) >= sync_relayloginfo_period)
|
||||
{
|
||||
if (my_sync(rli->info_fd, MYF(MY_WME)))
|
||||
error=1;
|
||||
rli->sync_counter= 0;
|
||||
}
|
||||
/* Flushing the relay log is done by the slave I/O thread */
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
|
@ -4610,6 +4671,8 @@ void rotate_relay_log(Master_info* mi)
|
|||
DBUG_ENTER("rotate_relay_log");
|
||||
Relay_log_info* rli= &mi->rli;
|
||||
|
||||
DBUG_EXECUTE_IF("crash_before_rotate_relaylog", abort(););
|
||||
|
||||
/* We don't lock rli->run_lock. This would lead to deadlocks. */
|
||||
pthread_mutex_lock(&mi->run_lock);
|
||||
|
||||
|
|
|
|||
|
|
@ -144,6 +144,7 @@ extern ulonglong relay_log_space_limit;
|
|||
#define SLAVE_FORCE_ALL 4
|
||||
|
||||
int init_slave();
|
||||
int init_recovery(Master_info* mi, const char** errmsg);
|
||||
void init_slave_skip_errors(const char* arg);
|
||||
bool flush_relay_log_info(Relay_log_info* rli);
|
||||
int register_slave_on_master(MYSQL* mysql);
|
||||
|
|
|
|||
|
|
@ -174,6 +174,7 @@ sp_get_flags_for_command(LEX *lex)
|
|||
case SQLCOM_SHOW_AUTHORS:
|
||||
case SQLCOM_SHOW_BINLOGS:
|
||||
case SQLCOM_SHOW_BINLOG_EVENTS:
|
||||
case SQLCOM_SHOW_RELAYLOG_EVENTS:
|
||||
case SQLCOM_SHOW_CHARSETS:
|
||||
case SQLCOM_SHOW_COLLATIONS:
|
||||
case SQLCOM_SHOW_COLUMN_TYPES:
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ void mysql_client_binlog_statement(THD* thd)
|
|||
my_bool have_fd_event= TRUE;
|
||||
if (!thd->rli_fake)
|
||||
{
|
||||
thd->rli_fake= new Relay_log_info;
|
||||
thd->rli_fake= new Relay_log_info(FALSE);
|
||||
#ifdef HAVE_purify
|
||||
thd->rli_fake->is_fake= TRUE;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -586,9 +586,6 @@ THD::THD()
|
|||
limit_found_rows= 0;
|
||||
row_count_func= -1;
|
||||
statement_id_counter= 0UL;
|
||||
#ifdef ERROR_INJECT_SUPPORT
|
||||
error_inject_value= 0UL;
|
||||
#endif
|
||||
// Must be reset to handle error with THD's created for init of mysqld
|
||||
lex->current_select= 0;
|
||||
start_time=(time_t) 0;
|
||||
|
|
|
|||
|
|
@ -1720,9 +1720,6 @@ public:
|
|||
query_id_t query_id, warn_id;
|
||||
ulong col_access;
|
||||
|
||||
#ifdef ERROR_INJECT_SUPPORT
|
||||
ulong error_inject_value;
|
||||
#endif
|
||||
/* Statement id is thread-wide. This counter is used to generate ids */
|
||||
ulong statement_id_counter;
|
||||
ulong rand_saved_seed1, rand_saved_seed2;
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ enum enum_sql_command {
|
|||
SQLCOM_SHOW_CREATE_TRIGGER,
|
||||
SQLCOM_ALTER_DB_UPGRADE,
|
||||
SQLCOM_SHOW_PROFILE, SQLCOM_SHOW_PROFILES,
|
||||
|
||||
SQLCOM_SHOW_RELAYLOG_EVENTS,
|
||||
/*
|
||||
When a command is added here, be sure it's also added in mysqld.cc
|
||||
in "struct show_var_st status_vars[]= {" ...
|
||||
|
|
|
|||
|
|
@ -1615,9 +1615,9 @@ void log_slow_statement(THD *thd)
|
|||
|
||||
/*
|
||||
Do not log administrative statements unless the appropriate option is
|
||||
set; do not log into slow log if reading from backup.
|
||||
set.
|
||||
*/
|
||||
if (thd->enable_slow_log && !thd->user_time)
|
||||
if (thd->enable_slow_log)
|
||||
{
|
||||
ulonglong end_utime_of_query= thd->current_utime();
|
||||
thd_proc_info(thd, "logging slow query");
|
||||
|
|
@ -2319,6 +2319,7 @@ mysql_execute_command(THD *thd)
|
|||
res = show_slave_hosts(thd);
|
||||
break;
|
||||
}
|
||||
case SQLCOM_SHOW_RELAYLOG_EVENTS: /* fall through */
|
||||
case SQLCOM_SHOW_BINLOG_EVENTS:
|
||||
{
|
||||
if (check_global_access(thd, REPL_SLAVE_ACL))
|
||||
|
|
|
|||
|
|
@ -40,6 +40,10 @@
|
|||
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
#include "ha_partition.h"
|
||||
|
||||
#define ERROR_INJECT_CRASH(code) \
|
||||
DBUG_EVALUATE_IF(code, (abort(), 0), 0)
|
||||
|
||||
/*
|
||||
Partition related functions declarations and some static constants;
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1280,6 +1280,19 @@ bool change_master(THD* thd, Master_info* mi)
|
|||
}
|
||||
|
||||
thd_proc_info(thd, "Changing master");
|
||||
/*
|
||||
We need to check if there is an empty master_host. Otherwise
|
||||
change master succeeds, a master.info file is created containing
|
||||
empty master_host string and when issuing: start slave; an error
|
||||
is thrown stating that the server is not configured as slave.
|
||||
(See BUG#28796).
|
||||
*/
|
||||
if(lex_mi->host && !*lex_mi->host)
|
||||
{
|
||||
my_error(ER_WRONG_ARGUMENTS, MYF(0), "MASTER_HOST");
|
||||
unlock_slave_threads(mi);
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
// TODO: see if needs re-write
|
||||
if (init_master_info(mi, master_info_file, relay_log_info_file, 0,
|
||||
thread_mask))
|
||||
|
|
@ -1567,6 +1580,7 @@ bool mysql_show_binlog_events(THD* thd)
|
|||
bool ret = TRUE;
|
||||
IO_CACHE log;
|
||||
File file = -1;
|
||||
MYSQL_BIN_LOG *binary_log= NULL;
|
||||
DBUG_ENTER("mysql_show_binlog_events");
|
||||
|
||||
Log_event::init_show_field_list(&field_list);
|
||||
|
|
@ -1577,6 +1591,12 @@ bool mysql_show_binlog_events(THD* thd)
|
|||
Format_description_log_event *description_event= new
|
||||
Format_description_log_event(3); /* MySQL 4.0 by default */
|
||||
|
||||
DBUG_ASSERT(thd->lex->sql_command == SQLCOM_SHOW_BINLOG_EVENTS ||
|
||||
thd->lex->sql_command == SQLCOM_SHOW_RELAYLOG_EVENTS);
|
||||
|
||||
/* select wich binary log to use: binlog or relay */
|
||||
if ( thd->lex->sql_command == SQLCOM_SHOW_BINLOG_EVENTS )
|
||||
{
|
||||
/*
|
||||
Wait for handlers to insert any pending information
|
||||
into the binlog. For e.g. ndb which updates the binlog asynchronously
|
||||
|
|
@ -1584,7 +1604,17 @@ bool mysql_show_binlog_events(THD* thd)
|
|||
*/
|
||||
ha_binlog_wait(thd);
|
||||
|
||||
if (mysql_bin_log.is_open())
|
||||
binary_log= &mysql_bin_log;
|
||||
}
|
||||
else /* showing relay log contents */
|
||||
{
|
||||
if (!active_mi)
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
binary_log= &(active_mi->rli.relay_log);
|
||||
}
|
||||
|
||||
if (binary_log->is_open())
|
||||
{
|
||||
LEX_MASTER_INFO *lex_mi= &thd->lex->mi;
|
||||
SELECT_LEX_UNIT *unit= &thd->lex->unit;
|
||||
|
|
@ -1592,7 +1622,7 @@ bool mysql_show_binlog_events(THD* thd)
|
|||
my_off_t pos = max(BIN_LOG_HEADER_SIZE, lex_mi->pos); // user-friendly
|
||||
char search_file_name[FN_REFLEN], *name;
|
||||
const char *log_file_name = lex_mi->log_file_name;
|
||||
pthread_mutex_t *log_lock = mysql_bin_log.get_log_lock();
|
||||
pthread_mutex_t *log_lock = binary_log->get_log_lock();
|
||||
LOG_INFO linfo;
|
||||
Log_event* ev;
|
||||
|
||||
|
|
@ -1602,13 +1632,13 @@ bool mysql_show_binlog_events(THD* thd)
|
|||
|
||||
name= search_file_name;
|
||||
if (log_file_name)
|
||||
mysql_bin_log.make_log_name(search_file_name, log_file_name);
|
||||
binary_log->make_log_name(search_file_name, log_file_name);
|
||||
else
|
||||
name=0; // Find first log
|
||||
|
||||
linfo.index_file_offset = 0;
|
||||
|
||||
if (mysql_bin_log.find_log_pos(&linfo, name, 1))
|
||||
if (binary_log->find_log_pos(&linfo, name, 1))
|
||||
{
|
||||
errmsg = "Could not find target log";
|
||||
goto err;
|
||||
|
|
@ -1947,6 +1977,16 @@ static sys_var_const sys_relay_log_info_file(&vars, "relay_log_info_file",
|
|||
(uchar*) &relay_log_info_file);
|
||||
static sys_var_bool_ptr sys_relay_log_purge(&vars, "relay_log_purge",
|
||||
&relay_log_purge);
|
||||
static sys_var_bool_ptr sys_relay_log_recovery(&vars, "relay_log_recovery",
|
||||
&relay_log_recovery);
|
||||
static sys_var_uint_ptr sys_sync_binlog_period(&vars, "sync_binlog",
|
||||
&sync_binlog_period);
|
||||
static sys_var_uint_ptr sys_sync_relaylog_period(&vars, "sync_relay_log",
|
||||
&sync_relaylog_period);
|
||||
static sys_var_uint_ptr sys_sync_relayloginfo_period(&vars, "sync_relay_log_info",
|
||||
&sync_relayloginfo_period);
|
||||
static sys_var_uint_ptr sys_sync_masterinfo_period(&vars, "sync_master_info",
|
||||
&sync_masterinfo_period);
|
||||
static sys_var_const sys_relay_log_space_limit(&vars,
|
||||
"relay_log_space_limit",
|
||||
OPT_GLOBAL, SHOW_LONGLONG,
|
||||
|
|
@ -1963,7 +2003,6 @@ static sys_var_const sys_slave_skip_errors(&vars, "slave_skip_errors",
|
|||
(uchar*) slave_skip_error_names);
|
||||
static sys_var_long_ptr sys_slave_trans_retries(&vars, "slave_transaction_retries",
|
||||
&slave_trans_retries);
|
||||
static sys_var_sync_binlog_period sys_sync_binlog_period(&vars, "sync_binlog", &sync_binlog_period);
|
||||
static sys_var_slave_skip_counter sys_slave_skip_counter(&vars, "sql_slave_skip_counter");
|
||||
|
||||
|
||||
|
|
@ -2005,12 +2044,6 @@ bool sys_var_slave_skip_counter::update(THD *thd, set_var *var)
|
|||
}
|
||||
|
||||
|
||||
bool sys_var_sync_binlog_period::update(THD *thd, set_var *var)
|
||||
{
|
||||
sync_binlog_period= (ulong) var->save_result.ulonglong_value;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int init_replication_sys_vars()
|
||||
{
|
||||
if (mysql_add_sys_var_chain(vars.first, my_long_options))
|
||||
|
|
|
|||
|
|
@ -932,6 +932,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
|||
%token REDUNDANT_SYM
|
||||
%token REFERENCES /* SQL-2003-R */
|
||||
%token REGEXP
|
||||
%token RELAYLOG_SYM
|
||||
%token RELAY_LOG_FILE_SYM
|
||||
%token RELAY_LOG_POS_SYM
|
||||
%token RELAY_THREAD
|
||||
|
|
@ -10013,6 +10014,11 @@ show_param:
|
|||
LEX *lex= Lex;
|
||||
lex->sql_command= SQLCOM_SHOW_BINLOG_EVENTS;
|
||||
} opt_limit_clause_init
|
||||
| RELAYLOG_SYM EVENTS_SYM binlog_in binlog_from
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
lex->sql_command= SQLCOM_SHOW_RELAYLOG_EVENTS;
|
||||
} opt_limit_clause_init
|
||||
| keys_or_index from_or_in table_ident opt_db where_clause
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
|
|
@ -11654,6 +11660,7 @@ keyword_sp:
|
|||
| REDO_BUFFER_SIZE_SYM {}
|
||||
| REDOFILE_SYM {}
|
||||
| REDUNDANT_SYM {}
|
||||
| RELAYLOG_SYM {}
|
||||
| RELAY_LOG_FILE_SYM {}
|
||||
| RELAY_LOG_POS_SYM {}
|
||||
| RELAY_THREAD {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue