WL#342 heartbeat
backporting from 6.0 code base to 5.1.
This commit is contained in:
parent
14cf09c12a
commit
c03549bf05
@ -43,10 +43,10 @@ commit;
|
||||
drop table t1;
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
|
||||
show binlog events in 'master-bin.000001' from 106;
|
||||
show binlog events in 'master-bin.000001' from 107;
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
|
||||
show binlog events in 'master-bin.000002' from 106;
|
||||
show binlog events in 'master-bin.000002' from 107;
|
||||
|
||||
|
||||
#
|
||||
|
@ -323,12 +323,12 @@ let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
# and does not make slave to stop)
|
||||
if (`select @@binlog_format = 'ROW'`)
|
||||
{
|
||||
--exec $MYSQL_BINLOG --start-position=524 $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output
|
||||
--exec $MYSQL_BINLOG --start-position=525 $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output
|
||||
}
|
||||
|
||||
if (`select @@binlog_format = 'STATEMENT' || @@binlog_format = 'MIXED'`)
|
||||
{
|
||||
--exec $MYSQL_BINLOG --start-position=555 $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output
|
||||
--exec $MYSQL_BINLOG --start-position=556 $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output
|
||||
}
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
|
@ -72,7 +72,7 @@ start slave;
|
||||
sync_with_master;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
--query_vertical show slave status;
|
||||
|
||||
# Trigger error again to test CHANGE MASTER
|
||||
|
||||
@ -94,7 +94,7 @@ change master to master_user='test';
|
||||
change master to master_user='root';
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
--query_vertical show slave status;
|
||||
|
||||
# Trigger error again to test RESET SLAVE
|
||||
|
||||
@ -116,7 +116,7 @@ stop slave;
|
||||
reset slave;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
--query_vertical show slave status;
|
||||
|
||||
# Finally, see if logging is done ok on master for a failing LOAD DATA INFILE
|
||||
|
||||
|
@ -37,13 +37,13 @@ select count(*) from t1;
|
||||
show binlog events;
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
show binlog events from 106 limit 1;
|
||||
show binlog events from 107 limit 1;
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
show binlog events from 106 limit 2;
|
||||
show binlog events from 107 limit 2;
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
show binlog events from 106 limit 2,1;
|
||||
show binlog events from 107 limit 2,1;
|
||||
flush logs;
|
||||
|
||||
# We need an extra update before doing save_master_pos.
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
if (!$binlog_start)
|
||||
{
|
||||
let $binlog_start=106;
|
||||
let $binlog_start=107;
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $binlog_start <binlog_start>
|
||||
--replace_column 2 # 4 # 5 #
|
||||
|
@ -1,4 +1,4 @@
|
||||
--let $binlog_start=106
|
||||
--let $binlog_start=107
|
||||
--replace_result $binlog_start <binlog_start>
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
|
@ -14,13 +14,13 @@ end|
|
||||
reset master|
|
||||
insert into t2 values (bug23333(),1)|
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
show binlog events from 106 /* with fixes for #23333 will show there is the query */|
|
||||
show binlog events from <binlog_start>|
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # #
|
||||
master-bin.000001 # Table_map 1 # #
|
||||
master-bin.000001 # Table_map 1 # #
|
||||
master-bin.000001 # Write_rows 1 # #
|
||||
master-bin.000001 # Query 1 # #
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
select count(*),@a from t1 /* must be 1,1 */|
|
||||
count(*) @a
|
||||
1 1
|
||||
|
@ -156,9 +156,10 @@ select * from t2 /* must be (3,1), (4,4) */;
|
||||
a b
|
||||
1 1
|
||||
4 4
|
||||
show master status /* there must no UPDATE in binlog */;
|
||||
there must no UPDATE in binlog
|
||||
show master status;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 106
|
||||
master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB>
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
insert into t1 values (1,2),(3,4),(4,4);
|
||||
@ -166,8 +167,9 @@ insert into t2 values (1,2),(3,4),(4,4);
|
||||
reset master;
|
||||
UPDATE t2,t1 SET t2.a=t2.b where t2.a=t1.a;
|
||||
ERROR 23000: Duplicate entry '4' for key 'PRIMARY'
|
||||
show master status /* there must be no UPDATE query event */;
|
||||
there must no UPDATE in binlog
|
||||
show master status;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 106
|
||||
master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB>
|
||||
drop table t1, t2;
|
||||
End of tests
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -36,7 +36,7 @@ create table t1 (n int) engine=innodb;
|
||||
begin;
|
||||
commit;
|
||||
drop table t1;
|
||||
show binlog events in 'master-bin.000001' from 106;
|
||||
show binlog events in 'master-bin.000001' from 107;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1 (n int) engine=innodb
|
||||
master-bin.000001 # Query 1 # BEGIN
|
||||
@ -142,7 +142,7 @@ master-bin.000001 # Query 1 # use `test`; insert into t1 values(2 + 4)
|
||||
master-bin.000001 # Query 1 # use `test`; insert into t1 values(1 + 4)
|
||||
master-bin.000001 # Xid 1 # COMMIT /* xid= */
|
||||
master-bin.000001 # Rotate 1 # master-bin.000002;pos=4
|
||||
show binlog events in 'master-bin.000002' from 106;
|
||||
show binlog events in 'master-bin.000002' from 107;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000002 # Query 1 # use `test`; drop table t1
|
||||
set @ac = @@autocommit;
|
||||
@ -764,14 +764,14 @@ drop table if exists t3;
|
||||
create table t3 (a int(11) NOT NULL AUTO_INCREMENT, b text, PRIMARY KEY (a) ) engine=innodb;
|
||||
show master status;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 346
|
||||
master-bin.000001 347
|
||||
insert into t3(b) values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
|
||||
insert into t3(b) values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
|
||||
insert into t3(b) values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
|
||||
insert into t3(b) values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
|
||||
show master status /* must show new binlog index after rotating */;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000002 106
|
||||
master-bin.000002 107
|
||||
drop table t3;
|
||||
#
|
||||
# Bug #45998: database crashes when running "create as select"
|
||||
|
@ -155,7 +155,8 @@ reset master;
|
||||
UPDATE t2,t1 SET t2.a=t1.a+2;
|
||||
# check
|
||||
select * from t2 /* must be (3,1), (4,4) */;
|
||||
show master status /* there must no UPDATE in binlog */;
|
||||
--echo there must no UPDATE in binlog
|
||||
source include/show_master_status.inc;
|
||||
|
||||
# B. testing multi_update::send_error() execution branch
|
||||
delete from t1;
|
||||
@ -165,7 +166,8 @@ insert into t2 values (1,2),(3,4),(4,4);
|
||||
reset master;
|
||||
--error ER_DUP_ENTRY
|
||||
UPDATE t2,t1 SET t2.a=t2.b where t2.a=t1.a;
|
||||
show master status /* there must be no UPDATE query event */;
|
||||
--echo there must no UPDATE in binlog
|
||||
source include/show_master_status.inc;
|
||||
|
||||
# cleanup bug#27716
|
||||
drop table t1, t2;
|
||||
|
@ -51,7 +51,7 @@ reap;
|
||||
let $rows= `select count(*) from t2 /* must be 2 or 0 */`;
|
||||
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
--exec $MYSQL_BINLOG --force-if-open --start-position=134 $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog
|
||||
--exec $MYSQL_BINLOG --force-if-open --start-position=135 $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval select
|
||||
(@a:=load_file("$MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog"))
|
||||
|
@ -24,7 +24,7 @@ update t1 set a=2 /* will be "killed" after work has been done */;
|
||||
# for some constants like the offset of the first real event
|
||||
# that is different between severs versions.
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
--exec $MYSQL_BINLOG --force-if-open --start-position=106 $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
|
||||
--exec $MYSQL_BINLOG --force-if-open --start-position=107 $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval select
|
||||
(@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
@ -52,7 +52,7 @@ load data infile '../../std_data/rpl_loaddata.dat' into table t2 /* will be "kil
|
||||
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
--exec $MYSQL_BINLOG --force-if-open --start-position=98 $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
|
||||
--exec $MYSQL_BINLOG --force-if-open --start-position=107 $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval select
|
||||
(@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
|
@ -17,16 +17,15 @@ show grants for x@y;
|
||||
Grants for x@y
|
||||
GRANT USAGE ON *.* TO 'x'@'y'
|
||||
GRANT SELECT ON `d1`.`t` TO 'x'@'y'
|
||||
show binlog events;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 4 Format_desc 1 106 Server ver: VERSION, Binlog ver: 4
|
||||
master-bin.000001 106 Query 1 193 drop database if exists d1
|
||||
master-bin.000001 193 Query 1 272 create database d1
|
||||
master-bin.000001 272 Query 1 370 use `d1`; create table t (s1 int) engine=innodb
|
||||
master-bin.000001 370 Query 1 436 BEGIN
|
||||
master-bin.000001 436 Query 1 521 use `d1`; insert into t values (1)
|
||||
master-bin.000001 521 Xid 1 548 COMMIT /* XID */
|
||||
master-bin.000001 548 Query 1 633 use `d1`; grant select on t to x@y
|
||||
master-bin.000001 # Query # # drop database if exists d1
|
||||
master-bin.000001 # Query # # create database d1
|
||||
master-bin.000001 # Query # # use `d1`; create table t (s1 int) engine=innodb
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Query # # use `d1`; insert into t values (1)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `d1`; grant select on t to x@y
|
||||
start transaction;
|
||||
insert into t values (2);
|
||||
revoke select on t from x@y;
|
||||
@ -38,19 +37,18 @@ s1
|
||||
show grants for x@y;
|
||||
Grants for x@y
|
||||
GRANT USAGE ON *.* TO 'x'@'y'
|
||||
show binlog events;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 4 Format_desc 1 106 Server ver: VERSION, Binlog ver: 4
|
||||
master-bin.000001 106 Query 1 193 drop database if exists d1
|
||||
master-bin.000001 193 Query 1 272 create database d1
|
||||
master-bin.000001 272 Query 1 370 use `d1`; create table t (s1 int) engine=innodb
|
||||
master-bin.000001 370 Query 1 436 BEGIN
|
||||
master-bin.000001 436 Query 1 521 use `d1`; insert into t values (1)
|
||||
master-bin.000001 521 Xid 1 548 COMMIT /* XID */
|
||||
master-bin.000001 548 Query 1 633 use `d1`; grant select on t to x@y
|
||||
master-bin.000001 633 Query 1 699 BEGIN
|
||||
master-bin.000001 699 Query 1 784 use `d1`; insert into t values (2)
|
||||
master-bin.000001 784 Xid 1 811 COMMIT /* XID */
|
||||
master-bin.000001 811 Query 1 899 use `d1`; revoke select on t from x@y
|
||||
master-bin.000001 # Query # # drop database if exists d1
|
||||
master-bin.000001 # Query # # create database d1
|
||||
master-bin.000001 # Query # # use `d1`; create table t (s1 int) engine=innodb
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Query # # use `d1`; insert into t values (1)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `d1`; grant select on t to x@y
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Query # # use `d1`; insert into t values (2)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `d1`; revoke select on t from x@y
|
||||
drop user x@y;
|
||||
drop database d1;
|
||||
|
@ -157,7 +157,7 @@ SET @my_max_relay_log_size= @@global.max_relay_log_size;
|
||||
SET global max_relay_log_size=0;
|
||||
include/stop_slave.inc
|
||||
DELETE FROM t2;
|
||||
CHANGE MASTER TO MASTER_LOG_POS=440;
|
||||
CHANGE MASTER TO MASTER_LOG_POS=441;
|
||||
BEGIN;
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
a
|
||||
|
@ -435,7 +435,7 @@ 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 330
|
||||
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 #
|
||||
@ -453,7 +453,7 @@ 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 330
|
||||
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
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
*** Create t10 on slave ***
|
||||
|
@ -435,7 +435,7 @@ 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 330
|
||||
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 #
|
||||
@ -453,7 +453,7 @@ 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 330
|
||||
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
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
*** Create t10 on slave ***
|
||||
|
@ -33,7 +33,7 @@ Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1105
|
||||
Last_Error Error 'master may suffer from http://bugs.mysql.com/bug.php?id=24432 so slave stops; check error log on slave for more info' on query. Default database: 'test'. Query: 'INSERT INTO t1(b) VALUES(1),(1),(2) ON DUPLICATE KEY UPDATE t1.b=10'
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 246
|
||||
Exec_Master_Log_Pos 247
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
@ -120,7 +120,7 @@ FROM t2
|
||||
ON DUPLICATE KEY UPDATE
|
||||
t1.field_3 = t2.field_c'
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 1278
|
||||
Exec_Master_Log_Pos 1279
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
|
@ -34,9 +34,45 @@ insert into t1 values(1,10);
|
||||
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
set global sql_slave_skip_counter=1;
|
||||
start slave;
|
||||
show slave status;
|
||||
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed 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 Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error
|
||||
# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 1797 # # master-bin.000001 Yes Yes # 0 0 1797 # None 0 No # No 0 0
|
||||
show slave status;;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 1798
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running Yes
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 1798
|
||||
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 0
|
||||
Last_IO_Error
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
set sql_log_bin=0;
|
||||
delete from t1;
|
||||
set sql_log_bin=1;
|
||||
@ -44,9 +80,45 @@ load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
stop slave;
|
||||
change master to master_user='test';
|
||||
change master to master_user='root';
|
||||
show slave status;
|
||||
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed 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 Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error
|
||||
# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 1832 # # master-bin.000001 No No # 0 0 1832 # None 0 No # No 0 0
|
||||
show slave status;;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 1833
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running No
|
||||
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 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 1833
|
||||
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 0
|
||||
Last_IO_Error
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
set global sql_slave_skip_counter=1;
|
||||
start slave;
|
||||
set sql_log_bin=0;
|
||||
@ -55,9 +127,45 @@ set sql_log_bin=1;
|
||||
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
stop slave;
|
||||
reset slave;
|
||||
show slave status;
|
||||
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed 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 Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error
|
||||
# 127.0.0.1 root MASTER_PORT 1 4 # # No No # 0 0 0 # None 0 No # No 0 0
|
||||
show slave status;;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File
|
||||
Read_Master_Log_Pos 4
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File
|
||||
Slave_IO_Running No
|
||||
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 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 0
|
||||
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 0
|
||||
Last_IO_Error
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
reset master;
|
||||
create table t2 (day date,id int(9),category enum('a','b','c'),name varchar(60),
|
||||
unique(day)) engine=MyISAM;
|
||||
|
@ -13,7 +13,7 @@ Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 290
|
||||
Read_Master_Log_Pos 291
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
@ -28,7 +28,7 @@ Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 290
|
||||
Exec_Master_Log_Pos 291
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
@ -53,7 +53,7 @@ Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 465
|
||||
Read_Master_Log_Pos 466
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
@ -68,7 +68,7 @@ Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1593
|
||||
Last_Error Fatal error: Not enough memory
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 325
|
||||
Exec_Master_Log_Pos 326
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
|
@ -31,7 +31,7 @@ Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 594
|
||||
Read_Master_Log_Pos 595
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
@ -46,7 +46,7 @@ Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 594
|
||||
Exec_Master_Log_Pos 595
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
|
@ -58,12 +58,12 @@ DELETE FROM t1 WHERE a = 0;
|
||||
UPDATE t1 SET a=99 WHERE a = 0;
|
||||
SHOW BINLOG EVENTS;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 4 Format_desc 1 106 Server ver: SERVER_VERSION, Binlog ver: 4
|
||||
master-bin.000001 106 Query 1 192 use `test`; CREATE TABLE t1 (a INT)
|
||||
master-bin.000001 192 Query 1 260 BEGIN
|
||||
master-bin.000001 260 Table_map 1 301 table_id: # (test.t1)
|
||||
master-bin.000001 301 Write_rows 1 340 table_id: # flags: STMT_END_F
|
||||
master-bin.000001 340 Query 1 409 COMMIT
|
||||
master-bin.000001 4 Format_desc 1 107 Server ver: SERVER_VERSION, Binlog ver: 4
|
||||
master-bin.000001 107 Query 1 193 use `test`; CREATE TABLE t1 (a INT)
|
||||
master-bin.000001 193 Query 1 261 BEGIN
|
||||
master-bin.000001 261 Table_map 1 302 table_id: # (test.t1)
|
||||
master-bin.000001 302 Write_rows 1 341 table_id: # flags: STMT_END_F
|
||||
master-bin.000001 341 Query 1 410 COMMIT
|
||||
DROP TABLE t1;
|
||||
================ Test for BUG#17620 ================
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
|
@ -24,7 +24,7 @@ a
|
||||
1
|
||||
[on slave]
|
||||
---- Wait until slave stops with an error ----
|
||||
Last_SQL_Error = Could not execute Write_rows event on table test.t1; Duplicate entry '1' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log master-bin.000001, end_log_pos 346 (expected "duplicate key" error)
|
||||
Last_SQL_Error = Could not execute Write_rows event on table test.t1; Duplicate entry '1' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log master-bin.000001, end_log_pos 347 (expected "duplicate key" error)
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
@ -50,7 +50,7 @@ SELECT * FROM t1;
|
||||
a
|
||||
[on slave]
|
||||
---- Wait until slave stops with an error ----
|
||||
Last_SQL_Error = Could not execute Delete_rows event on table test.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log master-bin.000001, end_log_pos 982 (expected "can't find record" error)
|
||||
Last_SQL_Error = Could not execute Delete_rows event on table test.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log master-bin.000001, end_log_pos 983 (expected "can't find record" error)
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
---- Resolve the conflict on the slave and restart SQL thread ----
|
||||
|
@ -13,30 +13,30 @@ CREATE TABLE t1 (a INT, b INT);
|
||||
CREATE TABLE t2 (a INT, b INT) ENGINE=Merge;
|
||||
CREATE TABLE t3 (a INT, b INT) CHARSET=utf8;
|
||||
CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8;
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
Log_name #
|
||||
Pos 106
|
||||
Pos 107
|
||||
Event_type Query
|
||||
Server_id #
|
||||
End_log_pos 199
|
||||
End_log_pos 200
|
||||
Info use `test`; CREATE TABLE t1 (a INT, b INT)
|
||||
Log_name #
|
||||
Pos 199
|
||||
Pos 200
|
||||
Event_type Query
|
||||
Server_id #
|
||||
End_log_pos 305
|
||||
End_log_pos 306
|
||||
Info use `test`; CREATE TABLE t2 (a INT, b INT) ENGINE=Merge
|
||||
Log_name #
|
||||
Pos 305
|
||||
Pos 306
|
||||
Event_type Query
|
||||
Server_id #
|
||||
End_log_pos 411
|
||||
End_log_pos 412
|
||||
Info use `test`; CREATE TABLE t3 (a INT, b INT) CHARSET=utf8
|
||||
Log_name #
|
||||
Pos 411
|
||||
Pos 412
|
||||
Event_type Query
|
||||
Server_id #
|
||||
End_log_pos 530
|
||||
End_log_pos 531
|
||||
Info use `test`; CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8
|
||||
**** On Master ****
|
||||
SHOW CREATE TABLE t1;
|
||||
@ -137,7 +137,7 @@ RESET MASTER;
|
||||
include/start_slave.inc
|
||||
CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3;
|
||||
ERROR 23000: Duplicate entry '2' for key 'b'
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
CREATE TABLE t7 (a INT, b INT UNIQUE);
|
||||
INSERT INTO t7 SELECT a,b FROM tt3;
|
||||
@ -147,13 +147,13 @@ a b
|
||||
1 2
|
||||
2 4
|
||||
3 6
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
# 106 Query # 206 use `test`; CREATE TABLE t7 (a INT, b INT UNIQUE)
|
||||
# 206 Query # 274 BEGIN
|
||||
# 274 Table_map # 316 table_id: # (test.t7)
|
||||
# 316 Write_rows # 372 table_id: # flags: STMT_END_F
|
||||
# 372 Query # 443 ROLLBACK
|
||||
# 107 Query # 207 use `test`; CREATE TABLE t7 (a INT, b INT UNIQUE)
|
||||
# 207 Query # 275 BEGIN
|
||||
# 275 Table_map # 317 table_id: # (test.t7)
|
||||
# 317 Write_rows # 373 table_id: # flags: STMT_END_F
|
||||
# 373 Query # 444 ROLLBACK
|
||||
SELECT * FROM t7 ORDER BY a,b;
|
||||
a b
|
||||
1 2
|
||||
@ -171,12 +171,12 @@ INSERT INTO t7 SELECT a,b FROM tt4;
|
||||
ROLLBACK;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
# 106 Query # 174 BEGIN
|
||||
# 174 Table_map # 216 table_id: # (test.t7)
|
||||
# 216 Write_rows # 272 table_id: # flags: STMT_END_F
|
||||
# 272 Query # 343 ROLLBACK
|
||||
# 107 Query # 175 BEGIN
|
||||
# 175 Table_map # 217 table_id: # (test.t7)
|
||||
# 217 Write_rows # 273 table_id: # flags: STMT_END_F
|
||||
# 273 Query # 344 ROLLBACK
|
||||
SELECT * FROM t7 ORDER BY a,b;
|
||||
a b
|
||||
1 2
|
||||
@ -216,10 +216,10 @@ Create Table CREATE TABLE `t9` (
|
||||
`a` int(11) DEFAULT NULL,
|
||||
`b` int(11) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
# 106 Query # 192 use `test`; CREATE TABLE t8 LIKE t4
|
||||
# 192 Query # 331 use `test`; CREATE TABLE `t9` (
|
||||
# 107 Query # 193 use `test`; CREATE TABLE t8 LIKE t4
|
||||
# 193 Query # 332 use `test`; CREATE TABLE `t9` (
|
||||
`a` int(11) DEFAULT NULL,
|
||||
`b` int(11) DEFAULT NULL
|
||||
)
|
||||
@ -296,38 +296,38 @@ a
|
||||
1
|
||||
2
|
||||
3
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
# 106 Query # 192 use `test`; CREATE TABLE t1 (a INT)
|
||||
# 192 Query # 260 BEGIN
|
||||
# 260 Table_map # 301 table_id: # (test.t1)
|
||||
# 301 Write_rows # 345 table_id: # flags: STMT_END_F
|
||||
# 345 Query # 414 COMMIT
|
||||
# 414 Query # 482 BEGIN
|
||||
# 482 Query # 607 use `test`; CREATE TABLE `t2` (
|
||||
# 107 Query # 193 use `test`; CREATE TABLE t1 (a INT)
|
||||
# 193 Query # 261 BEGIN
|
||||
# 261 Table_map # 302 table_id: # (test.t1)
|
||||
# 302 Write_rows # 346 table_id: # flags: STMT_END_F
|
||||
# 346 Query # 415 COMMIT
|
||||
# 415 Query # 483 BEGIN
|
||||
# 483 Query # 608 use `test`; CREATE TABLE `t2` (
|
||||
`a` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB
|
||||
# 607 Table_map # 648 table_id: # (test.t2)
|
||||
# 648 Write_rows # 692 table_id: # flags: STMT_END_F
|
||||
# 692 Xid # 719 COMMIT /* XID */
|
||||
# 719 Query # 787 BEGIN
|
||||
# 787 Query # 912 use `test`; CREATE TABLE `t3` (
|
||||
# 608 Table_map # 649 table_id: # (test.t2)
|
||||
# 649 Write_rows # 693 table_id: # flags: STMT_END_F
|
||||
# 693 Xid # 720 COMMIT /* XID */
|
||||
# 720 Query # 788 BEGIN
|
||||
# 788 Query # 913 use `test`; CREATE TABLE `t3` (
|
||||
`a` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB
|
||||
# 912 Table_map # 953 table_id: # (test.t3)
|
||||
# 953 Write_rows # 997 table_id: # flags: STMT_END_F
|
||||
# 997 Xid # 1024 COMMIT /* XID */
|
||||
# 1024 Query # 1092 BEGIN
|
||||
# 1092 Query # 1217 use `test`; CREATE TABLE `t4` (
|
||||
# 913 Table_map # 954 table_id: # (test.t3)
|
||||
# 954 Write_rows # 998 table_id: # flags: STMT_END_F
|
||||
# 998 Xid # 1025 COMMIT /* XID */
|
||||
# 1025 Query # 1093 BEGIN
|
||||
# 1093 Query # 1218 use `test`; CREATE TABLE `t4` (
|
||||
`a` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB
|
||||
# 1217 Table_map # 1258 table_id: # (test.t4)
|
||||
# 1258 Write_rows # 1302 table_id: # flags: STMT_END_F
|
||||
# 1302 Xid # 1329 COMMIT /* XID */
|
||||
# 1329 Query # 1397 BEGIN
|
||||
# 1397 Table_map # 1438 table_id: # (test.t1)
|
||||
# 1438 Write_rows # 1482 table_id: # flags: STMT_END_F
|
||||
# 1482 Query # 1553 ROLLBACK
|
||||
# 1218 Table_map # 1259 table_id: # (test.t4)
|
||||
# 1259 Write_rows # 1303 table_id: # flags: STMT_END_F
|
||||
# 1303 Xid # 1330 COMMIT /* XID */
|
||||
# 1330 Query # 1398 BEGIN
|
||||
# 1398 Table_map # 1439 table_id: # (test.t1)
|
||||
# 1439 Write_rows # 1483 table_id: # flags: STMT_END_F
|
||||
# 1483 Query # 1554 ROLLBACK
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
t1
|
||||
@ -390,20 +390,20 @@ a
|
||||
4
|
||||
6
|
||||
9
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
# 106 Query # 192 use `test`; CREATE TABLE t1 (a INT)
|
||||
# 192 Query # 260 BEGIN
|
||||
# 260 Table_map # 301 table_id: # (test.t1)
|
||||
# 301 Write_rows # 345 table_id: # flags: STMT_END_F
|
||||
# 345 Query # 414 COMMIT
|
||||
# 414 Query # 514 use `test`; CREATE TABLE t2 (a INT) ENGINE=INNODB
|
||||
# 514 Query # 582 BEGIN
|
||||
# 582 Table_map # 623 table_id: # (test.t2)
|
||||
# 623 Write_rows # 667 table_id: # flags: STMT_END_F
|
||||
# 667 Table_map # 708 table_id: # (test.t2)
|
||||
# 708 Write_rows # 747 table_id: # flags: STMT_END_F
|
||||
# 747 Xid # 774 COMMIT /* XID */
|
||||
# 107 Query # 193 use `test`; CREATE TABLE t1 (a INT)
|
||||
# 193 Query # 261 BEGIN
|
||||
# 261 Table_map # 302 table_id: # (test.t1)
|
||||
# 302 Write_rows # 346 table_id: # flags: STMT_END_F
|
||||
# 346 Query # 415 COMMIT
|
||||
# 415 Query # 515 use `test`; CREATE TABLE t2 (a INT) ENGINE=INNODB
|
||||
# 515 Query # 583 BEGIN
|
||||
# 583 Table_map # 624 table_id: # (test.t2)
|
||||
# 624 Write_rows # 668 table_id: # flags: STMT_END_F
|
||||
# 668 Table_map # 709 table_id: # (test.t2)
|
||||
# 709 Write_rows # 748 table_id: # flags: STMT_END_F
|
||||
# 748 Xid # 775 COMMIT /* XID */
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a
|
||||
1
|
||||
@ -429,14 +429,14 @@ Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
# 106 Query # 174 BEGIN
|
||||
# 174 Table_map # 215 table_id: # (test.t2)
|
||||
# 215 Write_rows # 259 table_id: # flags: STMT_END_F
|
||||
# 259 Table_map # 300 table_id: # (test.t2)
|
||||
# 300 Write_rows # 339 table_id: # flags: STMT_END_F
|
||||
# 339 Query # 410 ROLLBACK
|
||||
# 107 Query # 175 BEGIN
|
||||
# 175 Table_map # 216 table_id: # (test.t2)
|
||||
# 216 Write_rows # 260 table_id: # flags: STMT_END_F
|
||||
# 260 Table_map # 301 table_id: # (test.t2)
|
||||
# 301 Write_rows # 340 table_id: # flags: STMT_END_F
|
||||
# 340 Query # 411 ROLLBACK
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a
|
||||
DROP TABLE t1,t2;
|
||||
|
@ -43,10 +43,10 @@ t2
|
||||
DROP TABLE t1,t2;
|
||||
SHOW BINLOG EVENTS;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 4 Format_desc 1 106 Server ver: VERSION, Binlog ver: 4
|
||||
master-bin.000001 106 Query 1 192 use `test`; CREATE TABLE t1 (a int)
|
||||
master-bin.000001 192 Query 1 278 use `test`; CREATE TABLE t2 (a int)
|
||||
master-bin.000001 278 Query 1 382 use `test`; DROP TABLE `t1` /* generated by server */
|
||||
master-bin.000001 4 Format_desc 1 107 Server ver: VERSION, Binlog ver: 4
|
||||
master-bin.000001 107 Query 1 193 use `test`; CREATE TABLE t1 (a int)
|
||||
master-bin.000001 193 Query 1 279 use `test`; CREATE TABLE t2 (a int)
|
||||
master-bin.000001 279 Query 1 383 use `test`; DROP TABLE `t1` /* generated by server */
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
t2
|
||||
|
@ -12,13 +12,13 @@ create table t4 (a int);
|
||||
insert into t4 select * from t3;
|
||||
rename table t1 to t5, t2 to t1;
|
||||
flush no_write_to_binlog tables;
|
||||
SHOW BINLOG EVENTS FROM 897 ;
|
||||
SHOW BINLOG EVENTS FROM 898 ;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; rename table t1 to t5, t2 to t1
|
||||
select * from t3;
|
||||
a
|
||||
flush tables;
|
||||
SHOW BINLOG EVENTS FROM 897 ;
|
||||
SHOW BINLOG EVENTS FROM 898 ;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; rename table t1 to t5, t2 to t1
|
||||
master-bin.000001 # Query 1 # use `test`; flush tables
|
||||
|
@ -30,14 +30,14 @@ master-bin.000001 # Query 1 # BEGIN
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query 1 # COMMIT
|
||||
show binlog events from 106 limit 1;
|
||||
show binlog events from 107 limit 1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1(n int not null auto_increment primary key)ENGINE=MyISAM
|
||||
show binlog events from 106 limit 2;
|
||||
show binlog events from 107 limit 2;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1(n int not null auto_increment primary key)ENGINE=MyISAM
|
||||
master-bin.000001 # Query 1 # BEGIN
|
||||
show binlog events from 106 limit 2,1;
|
||||
show binlog events from 107 limit 2,1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
flush logs;
|
||||
@ -251,7 +251,7 @@ Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000002
|
||||
Read_Master_Log_Pos 516
|
||||
Read_Master_Log_Pos 517
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000002
|
||||
@ -266,7 +266,7 @@ Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 516
|
||||
Exec_Master_Log_Pos 517
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
|
@ -30,14 +30,14 @@ master-bin.000001 # Query 1 # BEGIN
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid 1 # COMMIT /* XID */
|
||||
show binlog events from 106 limit 1;
|
||||
show binlog events from 107 limit 1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1(n int not null auto_increment primary key)ENGINE=InnoDB
|
||||
show binlog events from 106 limit 2;
|
||||
show binlog events from 107 limit 2;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1(n int not null auto_increment primary key)ENGINE=InnoDB
|
||||
master-bin.000001 # Query 1 # BEGIN
|
||||
show binlog events from 106 limit 2,1;
|
||||
show binlog events from 107 limit 2,1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
flush logs;
|
||||
@ -251,7 +251,7 @@ Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000002
|
||||
Read_Master_Log_Pos 474
|
||||
Read_Master_Log_Pos 475
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000002
|
||||
@ -266,7 +266,7 @@ Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 474
|
||||
Exec_Master_Log_Pos 475
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
|
@ -50,7 +50,7 @@ Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 1115
|
||||
Read_Master_Log_Pos 1116
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
@ -65,7 +65,7 @@ Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 762
|
||||
Exec_Master_Log_Pos 763
|
||||
Relay_Log_Space #
|
||||
Until_Condition Master
|
||||
Until_Log_File master-bin.000001
|
||||
@ -114,7 +114,7 @@ Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 248
|
||||
Read_Master_Log_Pos 249
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
@ -129,7 +129,7 @@ Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 248
|
||||
Exec_Master_Log_Pos 249
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
|
@ -409,110 +409,110 @@ return 0;
|
||||
end|
|
||||
use mysqltest;
|
||||
set @a:= mysqltest2.f1();
|
||||
show binlog events in 'master-bin.000001' from 106;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # drop database if exists mysqltest1
|
||||
master-bin.000001 # Query 1 # create database mysqltest1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a varchar(100))
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`()
|
||||
master-bin.000001 # Query # # drop database if exists mysqltest1
|
||||
master-bin.000001 # Query # # create database mysqltest1
|
||||
master-bin.000001 # Query # # use `mysqltest1`; create table t1 (a varchar(100))
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`()
|
||||
begin
|
||||
declare b int;
|
||||
set b = 8;
|
||||
insert into t1 values (b);
|
||||
insert into t1 values (unix_timestamp());
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values ( NAME_CONST('b',8))
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (unix_timestamp())
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo2`()
|
||||
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values ( NAME_CONST('b',8))
|
||||
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values (unix_timestamp())
|
||||
master-bin.000001 # Query # # use `mysqltest1`; delete from t1
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo2`()
|
||||
select * from mysqltest1.t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; alter procedure foo2 contains sql
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t2 like t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo3`()
|
||||
master-bin.000001 # Query # # use `mysqltest1`; alter procedure foo2 contains sql
|
||||
master-bin.000001 # Query # # use `mysqltest1`; drop table t1
|
||||
master-bin.000001 # Query # # use `mysqltest1`; create table t1 (a int)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; create table t2 like t1
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo3`()
|
||||
DETERMINISTIC
|
||||
insert into t1 values (15)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; grant CREATE ROUTINE, EXECUTE on mysqltest1.* to "zedjzlcsjhd"@127.0.0.1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; grant SELECT on mysqltest1.t1 to "zedjzlcsjhd"@127.0.0.1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; grant SELECT, INSERT on mysqltest1.t2 to "zedjzlcsjhd"@127.0.0.1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` PROCEDURE `foo4`()
|
||||
master-bin.000001 # Query # # use `mysqltest1`; grant CREATE ROUTINE, EXECUTE on mysqltest1.* to "zedjzlcsjhd"@127.0.0.1
|
||||
master-bin.000001 # Query # # use `mysqltest1`; grant SELECT on mysqltest1.t1 to "zedjzlcsjhd"@127.0.0.1
|
||||
master-bin.000001 # Query # # use `mysqltest1`; grant SELECT, INSERT on mysqltest1.t2 to "zedjzlcsjhd"@127.0.0.1
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` PROCEDURE `foo4`()
|
||||
DETERMINISTIC
|
||||
begin
|
||||
insert into t2 values(3);
|
||||
insert into t1 values (5);
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(3)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (15)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(3)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; alter procedure foo4 sql security invoker
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(3)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (5)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t2
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; alter table t2 add unique (a)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo4
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo4`()
|
||||
master-bin.000001 # Query # # use `mysqltest1`; insert into t2 values(3)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values (15)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; insert into t2 values(3)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; alter procedure foo4 sql security invoker
|
||||
master-bin.000001 # Query # # use `mysqltest1`; insert into t2 values(3)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values (5)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; delete from t2
|
||||
master-bin.000001 # Query # # use `mysqltest1`; alter table t2 add unique (a)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; drop procedure foo4
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo4`()
|
||||
DETERMINISTIC
|
||||
begin
|
||||
insert into t2 values(20),(20);
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(20),(20)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo4
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo2
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo3
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; insert into t2 values(20),(20)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; drop procedure foo4
|
||||
master-bin.000001 # Query # # use `mysqltest1`; drop procedure foo
|
||||
master-bin.000001 # Query # # use `mysqltest1`; drop procedure foo2
|
||||
master-bin.000001 # Query # # use `mysqltest1`; drop procedure foo3
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
|
||||
DETERMINISTIC
|
||||
begin
|
||||
insert into t1 values (x);
|
||||
return x+2;
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete t1,t2 from t1,t2
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(20)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(fn1(21))
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`() RETURNS int(11)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; delete t1,t2 from t1,t2
|
||||
master-bin.000001 # Query # # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(20)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; insert into t2 values(fn1(21))
|
||||
master-bin.000001 # Query # # use `mysqltest1`; drop function fn1
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`() RETURNS int(11)
|
||||
NO SQL
|
||||
begin
|
||||
return unix_timestamp();
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values(fn1())
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` FUNCTION `fn2`() RETURNS int(11)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; delete from t1
|
||||
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values(fn1())
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` FUNCTION `fn2`() RETURNS int(11)
|
||||
NO SQL
|
||||
begin
|
||||
return unix_timestamp();
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn3`() RETURNS int(11)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn3`() RETURNS int(11)
|
||||
READS SQL DATA
|
||||
begin
|
||||
return 0;
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t2
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; alter table t2 add unique (a)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; delete from t2
|
||||
master-bin.000001 # Query # # use `mysqltest1`; alter table t2 add unique (a)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; drop function fn1
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
|
||||
begin
|
||||
insert into t2 values(x),(x);
|
||||
return 10;
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(100)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(20)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` trigger trg before insert on t1 for each row set new.a= 10
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (1)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop trigger trg
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (1)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`()
|
||||
master-bin.000001 # Query # # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(100)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(20)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; delete from t1
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` trigger trg before insert on t1 for each row set new.a= 10
|
||||
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values (1)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; delete from t1
|
||||
master-bin.000001 # Query # # use `mysqltest1`; drop trigger trg
|
||||
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values (1)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`()
|
||||
READS SQL DATA
|
||||
select * from t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
|
||||
master-bin.000001 # Query 1 # drop database mysqltest1
|
||||
master-bin.000001 # Query 1 # drop user "zedjzlcsjhd"@127.0.0.1
|
||||
master-bin.000001 # Query 1 # use `test`; drop function if exists f1
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
|
||||
master-bin.000001 # Query # # use `mysqltest1`; drop procedure foo
|
||||
master-bin.000001 # Query # # use `mysqltest1`; drop function fn1
|
||||
master-bin.000001 # Query # # drop database mysqltest1
|
||||
master-bin.000001 # Query # # drop user "zedjzlcsjhd"@127.0.0.1
|
||||
master-bin.000001 # Query # # use `test`; drop function if exists f1
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
|
||||
READS SQL DATA
|
||||
begin
|
||||
declare var integer;
|
||||
@ -522,41 +522,41 @@ fetch c into var;
|
||||
close c;
|
||||
return var;
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 as a
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1 (a int)
|
||||
master-bin.000001 # Query 1 # use `test`; insert into t1 (a) values (f1())
|
||||
master-bin.000001 # Query 1 # use `test`; drop view v1
|
||||
master-bin.000001 # Query 1 # use `test`; drop function f1
|
||||
master-bin.000001 # Query 1 # use `test`; DROP PROCEDURE IF EXISTS p1
|
||||
master-bin.000001 # Query 1 # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE TABLE t1(col VARCHAR(10))
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(arg VARCHAR(10))
|
||||
master-bin.000001 # Query # # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 as a
|
||||
master-bin.000001 # Query # # use `test`; create table t1 (a int)
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 (a) values (f1())
|
||||
master-bin.000001 # Query # # use `test`; drop view v1
|
||||
master-bin.000001 # Query # # use `test`; drop function f1
|
||||
master-bin.000001 # Query # # use `test`; DROP PROCEDURE IF EXISTS p1
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1(col VARCHAR(10))
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(arg VARCHAR(10))
|
||||
INSERT INTO t1 VALUES(arg)
|
||||
master-bin.000001 # Query 1 # use `test`; INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test' COLLATE 'latin1_swedish_ci'))
|
||||
master-bin.000001 # Query 1 # use `test`; DROP PROCEDURE p1
|
||||
master-bin.000001 # Query 1 # use `test`; DROP PROCEDURE IF EXISTS p1
|
||||
master-bin.000001 # Query 1 # use `test`; DROP FUNCTION IF EXISTS f1
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test' COLLATE 'latin1_swedish_ci'))
|
||||
master-bin.000001 # Query # # use `test`; DROP PROCEDURE p1
|
||||
master-bin.000001 # Query # # use `test`; DROP PROCEDURE IF EXISTS p1
|
||||
master-bin.000001 # Query # # use `test`; DROP FUNCTION IF EXISTS f1
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
|
||||
SET @a = 1
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
|
||||
RETURN 0
|
||||
master-bin.000001 # Query 1 # use `test`; DROP PROCEDURE p1
|
||||
master-bin.000001 # Query 1 # use `test`; DROP FUNCTION f1
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t1
|
||||
master-bin.000001 # Query 1 # drop database if exists mysqltest
|
||||
master-bin.000001 # Query 1 # drop database if exists mysqltest2
|
||||
master-bin.000001 # Query 1 # create database mysqltest
|
||||
master-bin.000001 # Query 1 # create database mysqltest2
|
||||
master-bin.000001 # Query 1 # use `mysqltest2`; create table t ( t integer )
|
||||
master-bin.000001 # Query 1 # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltest`.`test`()
|
||||
master-bin.000001 # Query # # use `test`; DROP PROCEDURE p1
|
||||
master-bin.000001 # Query # # use `test`; DROP FUNCTION f1
|
||||
master-bin.000001 # Query # # use `test`; drop table t1
|
||||
master-bin.000001 # Query # # drop database if exists mysqltest
|
||||
master-bin.000001 # Query # # drop database if exists mysqltest2
|
||||
master-bin.000001 # Query # # create database mysqltest
|
||||
master-bin.000001 # Query # # create database mysqltest2
|
||||
master-bin.000001 # Query # # use `mysqltest2`; create table t ( t integer )
|
||||
master-bin.000001 # Query # # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltest`.`test`()
|
||||
begin end
|
||||
master-bin.000001 # Query 1 # use `mysqltest2`; insert into t values ( 1 )
|
||||
master-bin.000001 # Query 1 # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
|
||||
master-bin.000001 # Query # # use `mysqltest2`; insert into t values ( 1 )
|
||||
master-bin.000001 # Query # # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
|
||||
begin
|
||||
insert into t values (1);
|
||||
return 0;
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `mysqltest`; SELECT `mysqltest2`.`f1`()
|
||||
master-bin.000001 # Query # # use `mysqltest`; SELECT `mysqltest2`.`f1`()
|
||||
set @@global.log_bin_trust_routine_creators= @old_log_bin_trust_routine_creators;
|
||||
Warnings:
|
||||
Warning 1287 The syntax '@@log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 6.0. Please use '@@log_bin_trust_function_creators' instead
|
||||
|
@ -12,13 +12,13 @@ create table t4 (a int);
|
||||
insert into t4 select * from t3;
|
||||
rename table t1 to t5, t2 to t1;
|
||||
flush no_write_to_binlog tables;
|
||||
SHOW BINLOG EVENTS FROM 656 ;
|
||||
SHOW BINLOG EVENTS FROM 657 ;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; rename table t1 to t5, t2 to t1
|
||||
select * from t3;
|
||||
a
|
||||
flush tables;
|
||||
SHOW BINLOG EVENTS FROM 656 ;
|
||||
SHOW BINLOG EVENTS FROM 657 ;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; rename table t1 to t5, t2 to t1
|
||||
master-bin.000001 # Query 1 # use `test`; flush tables
|
||||
|
@ -26,14 +26,14 @@ master-bin.000001 # Query 1 # use `test`; drop table t1
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1 (word char(20) not null)ENGINE=MyISAM
|
||||
master-bin.000001 # Begin_load_query 1 # ;file_id=1;block_len=581
|
||||
master-bin.000001 # Execute_load_query 1 # use `test`; load data infile '../../std_data/words.dat' into table t1 ignore 1 lines ;file_id=1
|
||||
show binlog events from 106 limit 1;
|
||||
show binlog events from 107 limit 1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1(n int not null auto_increment primary key)ENGINE=MyISAM
|
||||
show binlog events from 106 limit 2;
|
||||
show binlog events from 107 limit 2;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1(n int not null auto_increment primary key)ENGINE=MyISAM
|
||||
master-bin.000001 # Intvar 1 # INSERT_ID=1
|
||||
show binlog events from 106 limit 2,1;
|
||||
show binlog events from 107 limit 2,1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; insert into t1 values (NULL)
|
||||
flush logs;
|
||||
@ -233,7 +233,7 @@ Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000002
|
||||
Read_Master_Log_Pos 392
|
||||
Read_Master_Log_Pos 393
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000002
|
||||
@ -248,7 +248,7 @@ Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 392
|
||||
Exec_Master_Log_Pos 393
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
|
@ -25,9 +25,7 @@ grant select on t to x@y;
|
||||
#
|
||||
rollback;
|
||||
show grants for x@y;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\//
|
||||
show binlog events;
|
||||
source include/show_binlog_events.inc;
|
||||
start transaction;
|
||||
insert into t values (2);
|
||||
revoke select on t from x@y;
|
||||
@ -37,9 +35,7 @@ revoke select on t from x@y;
|
||||
commit;
|
||||
select * from t;
|
||||
show grants for x@y;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\//
|
||||
show binlog events;
|
||||
source include/show_binlog_events.inc;
|
||||
drop user x@y;
|
||||
drop database d1;
|
||||
--sync_slave_with_master
|
||||
|
@ -38,7 +38,7 @@ CREATE TABLE t3 (a INT, b INT) CHARSET=utf8;
|
||||
CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8;
|
||||
--replace_column 1 # 4 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
--query_vertical SHOW BINLOG EVENTS FROM 106
|
||||
--query_vertical SHOW BINLOG EVENTS FROM 107
|
||||
--echo **** On Master ****
|
||||
--query_vertical SHOW CREATE TABLE t1
|
||||
--query_vertical SHOW CREATE TABLE t2
|
||||
@ -76,7 +76,7 @@ CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3;
|
||||
# Shouldn't be written to the binary log
|
||||
--replace_column 1 # 4 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
|
||||
# Test that INSERT-SELECT works the same way as for SBR.
|
||||
CREATE TABLE t7 (a INT, b INT UNIQUE);
|
||||
@ -86,7 +86,7 @@ SELECT * FROM t7 ORDER BY a,b;
|
||||
# Should be written to the binary log
|
||||
--replace_column 1 # 4 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t7 ORDER BY a,b;
|
||||
|
||||
@ -100,7 +100,7 @@ INSERT INTO t7 SELECT a,b FROM tt4;
|
||||
ROLLBACK;
|
||||
--replace_column 1 # 4 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
SELECT * FROM t7 ORDER BY a,b;
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t7 ORDER BY a,b;
|
||||
@ -118,7 +118,7 @@ CREATE TEMPORARY TABLE tt7 SELECT 1;
|
||||
--query_vertical SHOW CREATE TABLE t9
|
||||
--replace_column 1 # 4 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
sync_slave_with_master;
|
||||
--echo **** On Slave ****
|
||||
--query_vertical SHOW CREATE TABLE t8
|
||||
@ -170,7 +170,7 @@ SELECT * FROM t3 ORDER BY a;
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
--replace_column 1 # 4 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /Server ver: .*, Binlog ver: .*/Server ver: #, Binlog ver: #/ /table_id: [0-9]+/table_id: #/
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
sync_slave_with_master;
|
||||
SHOW TABLES;
|
||||
SELECT TABLE_NAME,ENGINE
|
||||
@ -216,7 +216,7 @@ COMMIT;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
--replace_column 1 # 4 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /Server ver: .*, Binlog ver: .*/Server ver: #, Binlog ver: #/ /table_id: [0-9]+/table_id: #/
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
@ -239,7 +239,7 @@ ROLLBACK;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
--replace_column 1 # 4 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /Server ver: .*, Binlog ver: .*/Server ver: #, Binlog ver: #/ /table_id: [0-9]+/table_id: #/
|
||||
SHOW BINLOG EVENTS FROM 106;
|
||||
SHOW BINLOG EVENTS FROM 107;
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
# depends on the binlog output
|
||||
-- source include/have_binlog_format_row.inc
|
||||
|
||||
let $rename_event_pos= 897;
|
||||
let $rename_event_pos= 898;
|
||||
|
||||
# Bug#18326: Do not lock table for writing during prepare of statement
|
||||
# The use of the ps protocol causes extra table maps in the binlog, so
|
||||
|
@ -164,13 +164,13 @@ remove_file $MYSQLTEST_VARDIR/tmp/master.sql;
|
||||
|
||||
|
||||
# this test for position option
|
||||
# By setting this position to 416, we should only get the create of t3
|
||||
# By setting this position to 417, we should only get the create of t3
|
||||
--disable_query_log
|
||||
select "--- Test 2 position test --" as "";
|
||||
--enable_query_log
|
||||
let $MYSQLD_DATADIR= `select @@datadir;`;
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --position=416 --stop-position=569 $MYSQLD_DATADIR/master-bin.000001
|
||||
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --position=417 --stop-position=570 $MYSQLD_DATADIR/master-bin.000001
|
||||
|
||||
# These are tests for remote binlog.
|
||||
# They should return the same as previous test.
|
||||
@ -181,7 +181,7 @@ select "--- Test 3 First Remote test --" as "";
|
||||
|
||||
# This is broken now
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --stop-position=569 --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001
|
||||
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --stop-position=570 --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001
|
||||
|
||||
# This part is disabled due to bug #17654
|
||||
|
||||
@ -272,7 +272,7 @@ let $MYSQLD_DATADIR= `select @@datadir;`;
|
||||
select "--- Test 7 reading stdin w/position --" as "";
|
||||
--enable_query_log
|
||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
--exec $MYSQL_BINLOG --short-form --position=416 --stop-position=569 - < $MYSQLD_DATADIR/master-bin.000001
|
||||
--exec $MYSQL_BINLOG --short-form --position=417 --stop-position=569 - < $MYSQLD_DATADIR/master-bin.000001
|
||||
|
||||
# Bug#16217 (mysql client did not know how not switch its internal charset)
|
||||
--disable_query_log
|
||||
|
@ -568,9 +568,7 @@ connection master;
|
||||
|
||||
# Final inspection which verifies how all statements of this test file
|
||||
# were written to the binary log.
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
||||
show binlog events in 'master-bin.000001' from 106;
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
|
||||
# Restore log_bin_trust_function_creators to its original value.
|
||||
|
@ -1,7 +1,7 @@
|
||||
# depends on the binlog output
|
||||
--source include/have_binlog_format_mixed_or_statement.inc
|
||||
|
||||
let $rename_event_pos= 656;
|
||||
let $rename_event_pos= 657;
|
||||
-- source extra/rpl_tests/rpl_flsh_tbls.test
|
||||
|
||||
# End of 4.1 tests
|
||||
|
@ -34,14 +34,14 @@ master-bin.000001 # Table_map 1 # table_id: # (mysql.ndb_apply_status)
|
||||
master-bin.000001 # Write_rows 1 # table_id: #
|
||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query 1 # COMMIT
|
||||
show binlog events from 106 limit 1;
|
||||
show binlog events from 107 limit 1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1(n int not null auto_increment primary key)ENGINE=NDB
|
||||
show binlog events from 106 limit 2;
|
||||
show binlog events from 107 limit 2;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1(n int not null auto_increment primary key)ENGINE=NDB
|
||||
master-bin.000001 # Query 1 # BEGIN
|
||||
show binlog events from 106 limit 2,1;
|
||||
show binlog events from 107 limit 2,1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
flush logs;
|
||||
@ -267,7 +267,7 @@ Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000002
|
||||
Read_Master_Log_Pos 623
|
||||
Read_Master_Log_Pos 624
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000002
|
||||
@ -282,7 +282,7 @@ Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 623
|
||||
Exec_Master_Log_Pos 624
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
|
@ -29,16 +29,16 @@ a b
|
||||
DROP TABLE t1;
|
||||
SHOW BINLOG EVENTS;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 4 Format_desc 1 106 Server ver: SERVER_VERSION, Binlog ver: 4
|
||||
master-bin.000001 106 Query 1 223 use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB
|
||||
master-bin.000001 223 Query 1 287 BEGIN
|
||||
master-bin.000001 287 Table_map 1 330 table_id: # (test.t1)
|
||||
master-bin.000001 330 Table_map 1 392 table_id: # (mysql.ndb_apply_status)
|
||||
master-bin.000001 392 Write_rows 1 451 table_id: #
|
||||
master-bin.000001 451 Write_rows 1 498 table_id: # flags: STMT_END_F
|
||||
master-bin.000001 498 Query 1 563 COMMIT
|
||||
master-bin.000001 563 Query 1 643 use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 643 Query 1 719 use `test`; DROP TABLE t1
|
||||
master-bin.000001 4 Format_desc 1 107 Server ver: SERVER_VERSION, Binlog ver: 4
|
||||
master-bin.000001 107 Query 1 224 use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB
|
||||
master-bin.000001 224 Query 1 288 BEGIN
|
||||
master-bin.000001 288 Table_map 1 331 table_id: # (test.t1)
|
||||
master-bin.000001 331 Table_map 1 393 table_id: # (mysql.ndb_apply_status)
|
||||
master-bin.000001 393 Write_rows 1 452 table_id: #
|
||||
master-bin.000001 452 Write_rows 1 499 table_id: # flags: STMT_END_F
|
||||
master-bin.000001 499 Query 1 564 COMMIT
|
||||
master-bin.000001 564 Query 1 644 use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 644 Query 1 720 use `test`; DROP TABLE t1
|
||||
**** On Master ****
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,1), (2,2);
|
||||
@ -65,27 +65,27 @@ a b
|
||||
DROP TABLE t1;
|
||||
SHOW BINLOG EVENTS;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 4 Format_desc 1 106 Server ver: SERVER_VERSION, Binlog ver: 4
|
||||
master-bin.000001 106 Query 1 223 use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB
|
||||
master-bin.000001 223 Query 1 287 BEGIN
|
||||
master-bin.000001 287 Table_map 1 330 table_id: # (test.t1)
|
||||
master-bin.000001 330 Table_map 1 392 table_id: # (mysql.ndb_apply_status)
|
||||
master-bin.000001 392 Write_rows 1 451 table_id: #
|
||||
master-bin.000001 451 Write_rows 1 498 table_id: # flags: STMT_END_F
|
||||
master-bin.000001 498 Query 1 563 COMMIT
|
||||
master-bin.000001 563 Query 1 643 use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 643 Query 1 719 use `test`; DROP TABLE t1
|
||||
master-bin.000001 719 Query 1 836 use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB
|
||||
master-bin.000001 836 Query 1 900 BEGIN
|
||||
master-bin.000001 900 Table_map 1 943 table_id: # (test.t1)
|
||||
master-bin.000001 943 Table_map 1 1005 table_id: # (mysql.ndb_apply_status)
|
||||
master-bin.000001 1005 Write_rows 1 1064 table_id: #
|
||||
master-bin.000001 1064 Write_rows 1 1111 table_id: # flags: STMT_END_F
|
||||
master-bin.000001 1111 Query 1 1176 COMMIT
|
||||
master-bin.000001 1176 Query 1 1240 BEGIN
|
||||
master-bin.000001 1240 Table_map 1 1283 table_id: # (test.t1)
|
||||
master-bin.000001 1283 Table_map 1 1345 table_id: # (mysql.ndb_apply_status)
|
||||
master-bin.000001 1345 Write_rows 1 1404 table_id: #
|
||||
master-bin.000001 1404 Delete_rows 1 1443 table_id: # flags: STMT_END_F
|
||||
master-bin.000001 1443 Query 1 1508 COMMIT
|
||||
master-bin.000001 1508 Query 1 1584 use `test`; DROP TABLE t1
|
||||
master-bin.000001 4 Format_desc 1 107 Server ver: SERVER_VERSION, Binlog ver: 4
|
||||
master-bin.000001 107 Query 1 224 use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB
|
||||
master-bin.000001 224 Query 1 288 BEGIN
|
||||
master-bin.000001 288 Table_map 1 331 table_id: # (test.t1)
|
||||
master-bin.000001 331 Table_map 1 393 table_id: # (mysql.ndb_apply_status)
|
||||
master-bin.000001 393 Write_rows 1 452 table_id: #
|
||||
master-bin.000001 452 Write_rows 1 499 table_id: # flags: STMT_END_F
|
||||
master-bin.000001 499 Query 1 564 COMMIT
|
||||
master-bin.000001 564 Query 1 644 use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 644 Query 1 720 use `test`; DROP TABLE t1
|
||||
master-bin.000001 720 Query 1 837 use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB
|
||||
master-bin.000001 837 Query 1 901 BEGIN
|
||||
master-bin.000001 901 Table_map 1 944 table_id: # (test.t1)
|
||||
master-bin.000001 944 Table_map 1 1006 table_id: # (mysql.ndb_apply_status)
|
||||
master-bin.000001 1006 Write_rows 1 1065 table_id: #
|
||||
master-bin.000001 1065 Write_rows 1 1112 table_id: # flags: STMT_END_F
|
||||
master-bin.000001 1112 Query 1 1177 COMMIT
|
||||
master-bin.000001 1177 Query 1 1241 BEGIN
|
||||
master-bin.000001 1241 Table_map 1 1284 table_id: # (test.t1)
|
||||
master-bin.000001 1284 Table_map 1 1346 table_id: # (mysql.ndb_apply_status)
|
||||
master-bin.000001 1346 Write_rows 1 1405 table_id: #
|
||||
master-bin.000001 1405 Delete_rows 1 1444 table_id: # flags: STMT_END_F
|
||||
master-bin.000001 1444 Query 1 1509 COMMIT
|
||||
master-bin.000001 1509 Query 1 1585 use `test`; DROP TABLE t1
|
||||
|
@ -22,14 +22,14 @@ CALL bug18293("Foo's a Bar", _cp932 0xED40ED41ED42, 47.93)|
|
||||
SELECT HEX(s1),HEX(s2),d FROM t4|
|
||||
DROP PROCEDURE bug18293|
|
||||
DROP TABLE t4|
|
||||
SHOW BINLOG EVENTS FROM 370|
|
||||
SHOW BINLOG EVENTS FROM 371|
|
||||
delimiter ;|
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
# #28436: Incorrect position in SHOW BINLOG EVENTS causes server coredump
|
||||
# Note: 364 is a magic position (found experimentally, depends on
|
||||
# Note: 365 is a magic position (found experimentally, depends on
|
||||
# the log's contents) that caused the server crash.
|
||||
|
||||
--error 1220
|
||||
|
@ -71,7 +71,7 @@ select "--- --position --" as "";
|
||||
--enable_query_log
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
|
||||
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --position=239 $MYSQLD_DATADIR/master-bin.000002
|
||||
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --position=240 $MYSQLD_DATADIR/master-bin.000002
|
||||
|
||||
# These are tests for remote binlog.
|
||||
# They should return the same as previous test.
|
||||
@ -107,7 +107,7 @@ select "--- --position --" as "";
|
||||
--enable_query_log
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
|
||||
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --read-from-remote-server --position=239 --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000002
|
||||
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --read-from-remote-server --position=240 --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000002
|
||||
|
||||
# Bug#7853 mysqlbinlog does not accept input from stdin
|
||||
--disable_query_log
|
||||
@ -119,7 +119,7 @@ select "--- reading stdin --" as "";
|
||||
|
||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
|
||||
--exec $MYSQL_BINLOG --short-form --position=79 - < $MYSQL_TEST_DIR/std_data/trunc_binlog.000001
|
||||
--exec $MYSQL_BINLOG --short-form --position=80 - < $MYSQL_TEST_DIR/std_data/trunc_binlog.000001
|
||||
drop table t1,t2;
|
||||
|
||||
#
|
||||
|
@ -50,15 +50,15 @@ select "--- offset --" as "";
|
||||
--disable_query_log
|
||||
select "--- start-position --" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --start-position=608 $MYSQLD_DATADIR/master-bin.000001
|
||||
--exec $MYSQL_BINLOG --short-form --start-position=609 $MYSQLD_DATADIR/master-bin.000001
|
||||
--disable_query_log
|
||||
select "--- stop-position --" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --stop-position=608 $MYSQLD_DATADIR/master-bin.000001
|
||||
--exec $MYSQL_BINLOG --short-form --stop-position=609 $MYSQLD_DATADIR/master-bin.000001
|
||||
--disable_query_log
|
||||
select "--- start and stop positions ---" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --start-position=608 --stop-position 725 $MYSQLD_DATADIR/master-bin.000001
|
||||
--exec $MYSQL_BINLOG --short-form --start-position=609 --stop-position 726 $MYSQLD_DATADIR/master-bin.000001
|
||||
--disable_query_log
|
||||
select "--- start-datetime --" as "";
|
||||
--enable_query_log
|
||||
@ -84,11 +84,11 @@ select "--- offset --" as "";
|
||||
--disable_query_log
|
||||
select "--- start-position --" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --start-position=608 $MYSQLD_DATADIR/master-bin.000001 $MYSQLD_DATADIR/master-bin.000002
|
||||
--exec $MYSQL_BINLOG --short-form --start-position=609 $MYSQLD_DATADIR/master-bin.000001 $MYSQLD_DATADIR/master-bin.000002
|
||||
--disable_query_log
|
||||
select "--- stop-position --" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --stop-position=134 $MYSQLD_DATADIR/master-bin.000001 $MYSQLD_DATADIR/master-bin.000002
|
||||
--exec $MYSQL_BINLOG --short-form --stop-position=135 $MYSQLD_DATADIR/master-bin.000001 $MYSQLD_DATADIR/master-bin.000002
|
||||
--disable_query_log
|
||||
select "--- start-datetime --" as "";
|
||||
--enable_query_log
|
||||
@ -111,15 +111,15 @@ select "--- offset --" as "";
|
||||
--disable_query_log
|
||||
select "--- start-position --" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --start-position=608 --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001
|
||||
--exec $MYSQL_BINLOG --short-form --start-position=609 --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001
|
||||
--disable_query_log
|
||||
select "--- stop-position --" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --stop-position=608 --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001
|
||||
--exec $MYSQL_BINLOG --short-form --stop-position=609 --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001
|
||||
--disable_query_log
|
||||
select "--- start and stop positions ---" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --start-position=608 --stop-position 725 --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001
|
||||
--exec $MYSQL_BINLOG --short-form --start-position=609 --stop-position 726 --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001
|
||||
--disable_query_log
|
||||
select "--- start-datetime --" as "";
|
||||
--enable_query_log
|
||||
@ -142,11 +142,11 @@ select "--- offset --" as "";
|
||||
--disable_query_log
|
||||
select "--- start-position --" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --start-position=608 --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001 master-bin.000002
|
||||
--exec $MYSQL_BINLOG --short-form --start-position=609 --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001 master-bin.000002
|
||||
--disable_query_log
|
||||
select "--- stop-position --" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --stop-position=134 --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001 master-bin.000002
|
||||
--exec $MYSQL_BINLOG --short-form --stop-position=135 --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001 master-bin.000002
|
||||
--disable_query_log
|
||||
select "--- start-datetime --" as "";
|
||||
--enable_query_log
|
||||
|
@ -35,7 +35,8 @@ reset master|
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t2 values (bug23333(),1)|
|
||||
--replace_column 2 # 5 # 6 #
|
||||
show binlog events from 106 /* with fixes for #23333 will show there is the query */|
|
||||
# the following must show there is (are) events after the query */
|
||||
source include/show_binlog_events.inc|
|
||||
select count(*),@a from t1 /* must be 1,1 */|
|
||||
|
||||
delimiter ;|
|
||||
|
@ -323,6 +323,7 @@ static SYMBOL symbols[] = {
|
||||
{ "MASTER_SSL_KEY", SYM(MASTER_SSL_KEY_SYM)},
|
||||
{ "MASTER_SSL_VERIFY_SERVER_CERT", SYM(MASTER_SSL_VERIFY_SERVER_CERT_SYM)},
|
||||
{ "MASTER_USER", SYM(MASTER_USER_SYM)},
|
||||
{ "MASTER_HEARTBEAT_PERIOD", SYM(MASTER_HEARTBEAT_PERIOD_SYM)},
|
||||
{ "MATCH", SYM(MATCH)},
|
||||
{ "MAX_CONNECTIONS_PER_HOUR", SYM(MAX_CONNECTIONS_PER_HOUR)},
|
||||
{ "MAX_QUERIES_PER_HOUR", SYM(MAX_QUERIES_PER_HOUR)},
|
||||
|
53
sql/log.cc
53
sql/log.cc
@ -2413,7 +2413,7 @@ const char *MYSQL_LOG::generate_name(const char *log_name,
|
||||
MYSQL_BIN_LOG::MYSQL_BIN_LOG()
|
||||
:bytes_written(0), prepared_xids(0), file_id(1), open_count(1),
|
||||
need_start_event(TRUE), m_table_map_version(0),
|
||||
is_relay_log(0),
|
||||
is_relay_log(0), signal_cnt(0),
|
||||
description_event_for_exec(0), description_event_for_queue(0)
|
||||
{
|
||||
/*
|
||||
@ -4605,12 +4605,9 @@ err:
|
||||
|
||||
|
||||
/**
|
||||
Wait until we get a signal that the binary log has been updated.
|
||||
Wait until we get a signal that the relay log has been updated.
|
||||
|
||||
@param thd Thread variable
|
||||
@param is_slave If 0, the caller is the Binlog_dump thread from master;
|
||||
if 1, the caller is the SQL thread from the slave. This
|
||||
influences only thd->proc_info.
|
||||
|
||||
@note
|
||||
One must have a lock on LOCK_log before calling this function.
|
||||
@ -4618,22 +4615,53 @@ err:
|
||||
THD::enter_cond() (see NOTES in sql_class.h).
|
||||
*/
|
||||
|
||||
void MYSQL_BIN_LOG::wait_for_update(THD* thd, bool is_slave)
|
||||
void MYSQL_BIN_LOG::wait_for_update_relay_log(THD* thd)
|
||||
{
|
||||
const char *old_msg;
|
||||
DBUG_ENTER("wait_for_update");
|
||||
DBUG_ENTER("wait_for_update_relay_log");
|
||||
|
||||
old_msg= thd->enter_cond(&update_cond, &LOCK_log,
|
||||
is_slave ?
|
||||
"Has read all relay log; waiting for the slave I/O "
|
||||
"thread to update it" :
|
||||
"Has sent all binlog to slave; waiting for binlog "
|
||||
"to be updated");
|
||||
"Slave has read all relay log; "
|
||||
"waiting for the slave I/O "
|
||||
"thread to update it" );
|
||||
pthread_cond_wait(&update_cond, &LOCK_log);
|
||||
thd->exit_cond(old_msg);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
/**
|
||||
Wait until we get a signal that the binary log has been updated.
|
||||
Applies to master only.
|
||||
|
||||
NOTES
|
||||
@param[in] thd a THD struct
|
||||
@param[in] timeout a pointer to a timespec;
|
||||
NULL means to wait w/o timeout.
|
||||
@retval 0 if got signalled on update
|
||||
@retval non-0 if wait timeout elapsed
|
||||
@note
|
||||
LOCK_log must be taken before calling this function.
|
||||
LOCK_log is being released while the thread is waiting.
|
||||
LOCK_log is released by the caller.
|
||||
*/
|
||||
|
||||
int MYSQL_BIN_LOG::wait_for_update_bin_log(THD* thd,
|
||||
const struct timespec *timeout)
|
||||
{
|
||||
int ret= 0;
|
||||
const char* old_msg = thd->proc_info;
|
||||
DBUG_ENTER("wait_for_update_bin_log");
|
||||
old_msg= thd->enter_cond(&update_cond, &LOCK_log,
|
||||
"Master has sent all binlog to slave; "
|
||||
"waiting for binlog to be updated");
|
||||
if (!timeout)
|
||||
pthread_cond_wait(&update_cond, &LOCK_log);
|
||||
else
|
||||
ret= pthread_cond_timedwait(&update_cond, &LOCK_log,
|
||||
const_cast<struct timespec *>(timeout));
|
||||
DBUG_RETURN(ret);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Close the log file.
|
||||
@ -4846,6 +4874,7 @@ bool flush_error_log()
|
||||
void MYSQL_BIN_LOG::signal_update()
|
||||
{
|
||||
DBUG_ENTER("MYSQL_BIN_LOG::signal_update");
|
||||
signal_cnt++;
|
||||
pthread_cond_broadcast(&update_cond);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
@ -284,7 +284,7 @@ public:
|
||||
|
||||
/* This is relay log */
|
||||
bool is_relay_log;
|
||||
|
||||
ulong signal_cnt; // update of the counter is checked by heartbeat
|
||||
/*
|
||||
These describe the log's format. This is used only for relay logs.
|
||||
_for_exec is used by the SQL thread, _for_queue by the I/O thread. It's
|
||||
@ -339,7 +339,8 @@ public:
|
||||
}
|
||||
void set_max_size(ulong max_size_arg);
|
||||
void signal_update();
|
||||
void wait_for_update(THD* thd, bool master_or_slave);
|
||||
void wait_for_update_relay_log(THD* thd);
|
||||
int wait_for_update_bin_log(THD* thd, const struct timespec * timeout);
|
||||
void set_need_start_event() { need_start_event = 1; }
|
||||
void init(bool no_auto_events_arg, ulong max_size);
|
||||
void init_pthread_objects();
|
||||
|
@ -3643,6 +3643,7 @@ Format_description_log_event(uint8 binlog_ver, const char* server_ver)
|
||||
post_header_len[UPDATE_ROWS_EVENT-1]=
|
||||
post_header_len[DELETE_ROWS_EVENT-1]= 6;);
|
||||
post_header_len[INCIDENT_EVENT-1]= INCIDENT_HEADER_LEN;
|
||||
post_header_len[HEARTBEAT_LOG_EVENT-1]= 0;
|
||||
|
||||
// Sanity-check that all post header lengths are initialized.
|
||||
IF_DBUG({
|
||||
@ -9427,3 +9428,16 @@ st_print_event_info::st_print_event_info()
|
||||
open_cached_file(&body_cache, NULL, NULL, 0, flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
|
||||
Heartbeat_log_event::Heartbeat_log_event(const char* buf, uint event_len,
|
||||
const Format_description_log_event* description_event)
|
||||
:Log_event(buf, description_event)
|
||||
{
|
||||
uint8 header_size= description_event->common_header_len;
|
||||
ident_len = event_len - header_size;
|
||||
set_if_smaller(ident_len,FN_REFLEN-1);
|
||||
log_ident= buf + header_size;
|
||||
}
|
||||
#endif
|
||||
|
@ -250,6 +250,7 @@ struct sql_ex_info
|
||||
#define EXECUTE_LOAD_QUERY_EXTRA_HEADER_LEN (4 + 4 + 4 + 1)
|
||||
#define EXECUTE_LOAD_QUERY_HEADER_LEN (QUERY_HEADER_LEN + EXECUTE_LOAD_QUERY_EXTRA_HEADER_LEN)
|
||||
#define INCIDENT_HEADER_LEN 2
|
||||
#define HEARTBEAT_HEADER_LEN 0
|
||||
/*
|
||||
Max number of possible extra bytes in a replication event compared to a
|
||||
packet (i.e. a query) sent from client to master;
|
||||
@ -574,6 +575,12 @@ enum Log_event_type
|
||||
*/
|
||||
INCIDENT_EVENT= 26,
|
||||
|
||||
/*
|
||||
Heartbeat event to be send by master at its idle time
|
||||
to ensure master's online status to slave
|
||||
*/
|
||||
HEARTBEAT_LOG_EVENT= 27,
|
||||
|
||||
/*
|
||||
Add new events here - right above this comment!
|
||||
Existing events (except ENUM_END_EVENT) should never change their numbers
|
||||
@ -689,6 +696,20 @@ typedef struct st_print_event_info
|
||||
} PRINT_EVENT_INFO;
|
||||
#endif
|
||||
|
||||
/**
|
||||
the struct aggregates two paramenters that identify an event
|
||||
uniquely in scope of communication of a particular master and slave couple.
|
||||
I.e there can not be 2 events from the same staying connected master which
|
||||
have the same coordinates.
|
||||
@note
|
||||
Such identifier is not yet unique generally as the event originating master
|
||||
is resetable. Also the crashed master can be replaced with some other.
|
||||
*/
|
||||
struct event_coordinates
|
||||
{
|
||||
char * file_name; // binlog file name (directories stripped)
|
||||
my_off_t pos; // event's position in the binlog file
|
||||
};
|
||||
|
||||
/**
|
||||
@class Log_event
|
||||
@ -3916,6 +3937,42 @@ static inline bool copy_event_cache_to_file_and_reinit(IO_CACHE *cache,
|
||||
reinit_io_cache(cache, WRITE_CACHE, 0, FALSE, TRUE);
|
||||
}
|
||||
|
||||
#ifndef MYSQL_CLIENT
|
||||
/*****************************************************************************
|
||||
|
||||
Heartbeat Log Event class
|
||||
|
||||
Replication event to ensure to slave that master is alive.
|
||||
The event is originated by master's dump thread and sent straight to
|
||||
slave without being logged. Slave itself does not store it in relay log
|
||||
but rather uses a data for immediate checks and throws away the event.
|
||||
|
||||
Two members of the class log_ident and Log_event::log_pos comprise
|
||||
@see the event_coordinates instance. The coordinates that a heartbeat
|
||||
instance carries correspond to the last event master has sent from
|
||||
its binlog.
|
||||
|
||||
****************************************************************************/
|
||||
class Heartbeat_log_event: public Log_event
|
||||
{
|
||||
public:
|
||||
Heartbeat_log_event(const char* buf, uint event_len,
|
||||
const Format_description_log_event* description_event);
|
||||
Log_event_type get_type_code() { return HEARTBEAT_LOG_EVENT; }
|
||||
bool is_valid() const
|
||||
{
|
||||
return (log_ident != NULL &&
|
||||
log_pos >= BIN_LOG_HEADER_SIZE);
|
||||
}
|
||||
const char * get_log_ident() { return log_ident; }
|
||||
uint get_ident_len() { return ident_len; }
|
||||
|
||||
private:
|
||||
const char* log_ident;
|
||||
uint ident_len;
|
||||
};
|
||||
#endif
|
||||
|
||||
/**
|
||||
@} (end of group Replication)
|
||||
*/
|
||||
|
@ -7068,6 +7068,40 @@ static int show_slave_retried_trans(THD *thd, SHOW_VAR *var, char *buff)
|
||||
pthread_mutex_unlock(&LOCK_active_mi);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int show_slave_received_heartbeats(THD *thd, SHOW_VAR *var, char *buff)
|
||||
{
|
||||
pthread_mutex_lock(&LOCK_active_mi);
|
||||
if (active_mi)
|
||||
{
|
||||
var->type= SHOW_LONGLONG;
|
||||
var->value= buff;
|
||||
pthread_mutex_lock(&active_mi->rli.data_lock);
|
||||
*((longlong *)buff)= active_mi->received_heartbeats;
|
||||
pthread_mutex_unlock(&active_mi->rli.data_lock);
|
||||
}
|
||||
else
|
||||
var->type= SHOW_UNDEF;
|
||||
pthread_mutex_unlock(&LOCK_active_mi);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int show_heartbeat_period(THD *thd, SHOW_VAR *var, char *buff)
|
||||
{
|
||||
pthread_mutex_lock(&LOCK_active_mi);
|
||||
if (active_mi)
|
||||
{
|
||||
var->type= SHOW_CHAR;
|
||||
var->value= buff;
|
||||
my_sprintf(buff, (buff, "%.3f",active_mi->heartbeat_period));
|
||||
}
|
||||
else
|
||||
var->type= SHOW_UNDEF;
|
||||
pthread_mutex_unlock(&LOCK_active_mi);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#endif /* HAVE_REPLICATION */
|
||||
|
||||
static int show_open_tables(THD *thd, SHOW_VAR *var, char *buff)
|
||||
@ -7432,6 +7466,8 @@ SHOW_VAR status_vars[]= {
|
||||
{"Slave_open_temp_tables", (char*) &slave_open_temp_tables, SHOW_LONG},
|
||||
#ifdef HAVE_REPLICATION
|
||||
{"Slave_retried_transactions",(char*) &show_slave_retried_trans, SHOW_FUNC},
|
||||
{"Slave_heartbeat_period", (char*) &show_heartbeat_period, SHOW_FUNC},
|
||||
{"Slave_received_heartbeats",(char*) &show_slave_received_heartbeats, SHOW_FUNC},
|
||||
{"Slave_running", (char*) &show_slave_running, SHOW_FUNC},
|
||||
#endif
|
||||
{"Slow_launch_threads", (char*) &slow_launch_threads, SHOW_LONG},
|
||||
|
@ -26,12 +26,13 @@
|
||||
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);
|
||||
int init_floatvar_from_file(float* var, IO_CACHE* f, float default_val);
|
||||
|
||||
Master_info::Master_info()
|
||||
: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)
|
||||
abort_slave(0),slave_running(0), slave_run_id(0),
|
||||
heartbeat_period(0), received_heartbeats(0)
|
||||
{
|
||||
host[0] = 0; user[0] = 0; password[0] = 0;
|
||||
ssl_ca[0]= 0; ssl_capath[0]= 0; ssl_cert[0]= 0;
|
||||
@ -84,6 +85,17 @@ void init_master_info_with_options(Master_info* mi)
|
||||
strmake(mi->ssl_key, master_ssl_key, sizeof(mi->ssl_key)-1);
|
||||
/* Intentionally init ssl_verify_server_cert to 0, no option available */
|
||||
mi->ssl_verify_server_cert= 0;
|
||||
/*
|
||||
always request heartbeat unless master_heartbeat_period is set
|
||||
explicitly zero. Here is the default value for heartbeat period
|
||||
if CHANGE MASTER did not specify it. (no data loss in conversion
|
||||
as hb period has a max)
|
||||
*/
|
||||
mi->heartbeat_period= (float) min(SLAVE_MAX_HEARTBEAT_PERIOD,
|
||||
(slave_net_timeout/2.0));
|
||||
DBUG_ASSERT(mi->heartbeat_period > (float) 0.001
|
||||
|| mi->heartbeat_period == 0);
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
@ -94,8 +106,11 @@ enum {
|
||||
/* 5.1.16 added value of master_ssl_verify_server_cert */
|
||||
LINE_FOR_MASTER_SSL_VERIFY_SERVER_CERT= 15,
|
||||
|
||||
/* 6.0 added value of master_heartbeat_period */
|
||||
LINE_FOR_MASTER_HEARTBEAT_PERIOD= 16,
|
||||
|
||||
/* Number of lines currently used when saving master info file */
|
||||
LINES_IN_MASTER_INFO= LINE_FOR_MASTER_SSL_VERIFY_SERVER_CERT
|
||||
LINES_IN_MASTER_INFO= LINE_FOR_MASTER_HEARTBEAT_PERIOD
|
||||
};
|
||||
|
||||
int init_master_info(Master_info* mi, const char* master_info_fname,
|
||||
@ -197,6 +212,7 @@ file '%s')", fname);
|
||||
mi->fd = fd;
|
||||
int port, connect_retry, master_log_pos, lines;
|
||||
int ssl= 0, ssl_verify_server_cert= 0;
|
||||
float master_heartbeat_period= 0.0;
|
||||
char *first_non_digit;
|
||||
|
||||
/*
|
||||
@ -281,7 +297,13 @@ file '%s')", fname);
|
||||
if (lines >= LINE_FOR_MASTER_SSL_VERIFY_SERVER_CERT &&
|
||||
init_intvar_from_file(&ssl_verify_server_cert, &mi->file, 0))
|
||||
goto errwithmsg;
|
||||
|
||||
/*
|
||||
Starting from 6.0 master_heartbeat_period might be
|
||||
in the file
|
||||
*/
|
||||
if (lines >= LINE_FOR_MASTER_HEARTBEAT_PERIOD &&
|
||||
init_floatvar_from_file(&master_heartbeat_period, &mi->file, 0.0))
|
||||
goto errwithmsg;
|
||||
}
|
||||
|
||||
#ifndef HAVE_OPENSSL
|
||||
@ -300,6 +322,7 @@ file '%s')", fname);
|
||||
mi->connect_retry= (uint) connect_retry;
|
||||
mi->ssl= (my_bool) ssl;
|
||||
mi->ssl_verify_server_cert= ssl_verify_server_cert;
|
||||
mi->heartbeat_period= master_heartbeat_period;
|
||||
}
|
||||
DBUG_PRINT("master_info",("log_file_name: %s position: %ld",
|
||||
mi->master_log_name,
|
||||
@ -378,16 +401,18 @@ int flush_master_info(Master_info* mi, bool flush_relay_log_cache)
|
||||
contents of file). But because of number of lines in the first line
|
||||
of file we don't care about this garbage.
|
||||
*/
|
||||
|
||||
char heartbeat_buf[sizeof(mi->heartbeat_period) * 4]; // buffer to suffice always
|
||||
my_sprintf(heartbeat_buf, (heartbeat_buf, "%.3f", mi->heartbeat_period));
|
||||
my_b_seek(file, 0L);
|
||||
my_b_printf(file,
|
||||
"%u\n%s\n%s\n%s\n%s\n%s\n%d\n%d\n%d\n%s\n%s\n%s\n%s\n%s\n%d\n",
|
||||
"%u\n%s\n%s\n%s\n%s\n%s\n%d\n%d\n%d\n%s\n%s\n%s\n%s\n%s\n%d\n%s\n",
|
||||
LINES_IN_MASTER_INFO,
|
||||
mi->master_log_name, llstr(mi->master_log_pos, lbuf),
|
||||
mi->host, mi->user,
|
||||
mi->password, mi->port, mi->connect_retry,
|
||||
(int)(mi->ssl), mi->ssl_ca, mi->ssl_capath, mi->ssl_cert,
|
||||
mi->ssl_cipher, mi->ssl_key, mi->ssl_verify_server_cert);
|
||||
mi->ssl_cipher, mi->ssl_key, mi->ssl_verify_server_cert,
|
||||
heartbeat_buf);
|
||||
DBUG_RETURN(-flush_io_cache(file));
|
||||
}
|
||||
|
||||
|
@ -83,6 +83,8 @@ class Master_info : public Slave_reporting_capability
|
||||
Relay_log_info rli;
|
||||
uint port;
|
||||
uint connect_retry;
|
||||
float heartbeat_period; // interface with CHANGE MASTER or master.info
|
||||
ulonglong received_heartbeats; // counter of received heartbeat events
|
||||
#ifndef DBUG_OFF
|
||||
int events_till_disconnect;
|
||||
#endif
|
||||
|
139
sql/slave.cc
139
sql/slave.cc
@ -770,7 +770,6 @@ static bool sql_slave_killed(THD* thd, Relay_log_info* rli)
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
skip_load_data_infile()
|
||||
|
||||
@ -860,6 +859,37 @@ int init_intvar_from_file(int* var, IO_CACHE* f, int default_val)
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
int init_floatvar_from_file(float* var, IO_CACHE* f, float default_val)
|
||||
{
|
||||
char buf[16];
|
||||
DBUG_ENTER("init_floatvar_from_file");
|
||||
|
||||
|
||||
if (my_b_gets(f, buf, sizeof(buf)))
|
||||
{
|
||||
if (sscanf(buf, "%f", var) != 1)
|
||||
DBUG_RETURN(1);
|
||||
else
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
else if (default_val != 0.0)
|
||||
{
|
||||
*var = default_val;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
static bool check_io_slave_killed(THD *thd, Master_info *mi, const char *info)
|
||||
{
|
||||
if (io_slave_killed(thd, mi))
|
||||
{
|
||||
if (info && global_system_variables.log_warnings)
|
||||
sql_print_information(info);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
Check if the error is caused by network.
|
||||
@ -1189,6 +1219,32 @@ when it try to get the value of TIME_ZONE global variable from master.";
|
||||
}
|
||||
}
|
||||
|
||||
if (mi->heartbeat_period != 0.0)
|
||||
{
|
||||
char llbuf[22];
|
||||
const char query_format[]= "SET @master_heartbeat_period= %s";
|
||||
char query[sizeof(query_format) - 2 + sizeof(llbuf)];
|
||||
/*
|
||||
the period is an ulonglong of nano-secs.
|
||||
*/
|
||||
llstr((ulonglong) (mi->heartbeat_period*1000000000UL), llbuf);
|
||||
my_sprintf(query, (query, query_format, llbuf));
|
||||
|
||||
if (mysql_real_query(mysql, query, strlen(query))
|
||||
&& !check_io_slave_killed(mi->io_thd, mi, NULL))
|
||||
{
|
||||
errmsg= "The slave I/O thread stops because querying master with '%s' "
|
||||
"failed; error: '%s' ";
|
||||
err_code= ER_SLAVE_FATAL_ERROR;
|
||||
sprintf(err_buff, "%s Error: %s", errmsg,
|
||||
query, mysql_error(mysql));
|
||||
mysql_free_result(mysql_store_result(mysql));
|
||||
goto err;
|
||||
}
|
||||
mysql_free_result(mysql_store_result(mysql));
|
||||
}
|
||||
|
||||
|
||||
err:
|
||||
if (errmsg)
|
||||
{
|
||||
@ -2381,18 +2437,6 @@ on this slave.\
|
||||
}
|
||||
|
||||
|
||||
static bool check_io_slave_killed(THD *thd, Master_info *mi, const char *info)
|
||||
{
|
||||
if (io_slave_killed(thd, mi))
|
||||
{
|
||||
if (info && global_system_variables.log_warnings)
|
||||
sql_print_information(info);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@brief Try to reconnect slave IO thread.
|
||||
|
||||
@ -3552,6 +3596,7 @@ static int queue_old_event(Master_info *mi, const char *buf,
|
||||
static int queue_event(Master_info* mi,const char* buf, ulong event_len)
|
||||
{
|
||||
int error= 0;
|
||||
String error_msg;
|
||||
ulong inc_pos;
|
||||
Relay_log_info *rli= &mi->rli;
|
||||
pthread_mutex_t *log_lock= rli->relay_log.get_log_lock();
|
||||
@ -3586,7 +3631,7 @@ static int queue_event(Master_info* mi,const char* buf, ulong event_len)
|
||||
Rotate_log_event rev(buf,event_len,mi->rli.relay_log.description_event_for_queue);
|
||||
if (unlikely(process_io_rotate(mi,&rev)))
|
||||
{
|
||||
error= 1;
|
||||
error= ER_SLAVE_RELAY_LOG_WRITE_FAILURE;
|
||||
goto err;
|
||||
}
|
||||
/*
|
||||
@ -3613,7 +3658,7 @@ static int queue_event(Master_info* mi,const char* buf, ulong event_len)
|
||||
Log_event::read_log_event(buf, event_len, &errmsg,
|
||||
mi->rli.relay_log.description_event_for_queue)))
|
||||
{
|
||||
error= 2;
|
||||
error= ER_SLAVE_RELAY_LOG_WRITE_FAILURE;
|
||||
goto err;
|
||||
}
|
||||
delete mi->rli.relay_log.description_event_for_queue;
|
||||
@ -3632,6 +3677,56 @@ static int queue_event(Master_info* mi,const char* buf, ulong event_len)
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case HEARTBEAT_LOG_EVENT:
|
||||
{
|
||||
/*
|
||||
HB (heartbeat) cannot come before RL (Relay)
|
||||
*/
|
||||
char llbuf[22];
|
||||
Heartbeat_log_event hb(buf, event_len, mi->rli.relay_log.description_event_for_queue);
|
||||
if (!hb.is_valid())
|
||||
{
|
||||
error= ER_SLAVE_HEARTBEAT_FAILURE;
|
||||
error_msg.append(STRING_WITH_LEN("inconsistent heartbeat event content;"));
|
||||
error_msg.append(STRING_WITH_LEN("the event's data: log_file_name "));
|
||||
error_msg.append(hb.get_log_ident(), (uint) strlen(hb.get_log_ident()));
|
||||
error_msg.append(STRING_WITH_LEN(" log_pos "));
|
||||
llstr(hb.log_pos, llbuf);
|
||||
error_msg.append(llbuf, strlen(llbuf));
|
||||
goto err;
|
||||
}
|
||||
mi->received_heartbeats++;
|
||||
/*
|
||||
compare local and event's versions of log_file, log_pos.
|
||||
|
||||
Heartbeat is sent only after an event corresponding to the corrdinates
|
||||
the heartbeat carries.
|
||||
Slave can not have a difference in coordinates except in the only
|
||||
special case when mi->master_log_name, master_log_pos have never
|
||||
been updated by Rotate event i.e when slave does not have any history
|
||||
with the master (and thereafter mi->master_log_pos is NULL).
|
||||
|
||||
TODO: handling `when' for SHOW SLAVE STATUS' snds behind
|
||||
*/
|
||||
if ((memcmp(mi->master_log_name, hb.get_log_ident(), hb.get_ident_len())
|
||||
&& mi->master_log_name != NULL)
|
||||
|| mi->master_log_pos != hb.log_pos)
|
||||
{
|
||||
/* missed events of heartbeat from the past */
|
||||
error= ER_SLAVE_HEARTBEAT_FAILURE;
|
||||
error_msg.append(STRING_WITH_LEN("heartbeat is not compatible with local info;"));
|
||||
error_msg.append(STRING_WITH_LEN("the event's data: log_file_name "));
|
||||
error_msg.append(hb.get_log_ident(), (uint) strlen(hb.get_log_ident()));
|
||||
error_msg.append(STRING_WITH_LEN(" log_pos "));
|
||||
llstr(hb.log_pos, llbuf);
|
||||
error_msg.append(llbuf, strlen(llbuf));
|
||||
goto err;
|
||||
}
|
||||
goto skip_relay_logging;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
inc_pos= event_len;
|
||||
break;
|
||||
@ -3692,15 +3787,23 @@ static int queue_event(Master_info* mi,const char* buf, ulong event_len)
|
||||
rli->relay_log.harvest_bytes_written(&rli->log_space_total);
|
||||
}
|
||||
else
|
||||
error= 3;
|
||||
{
|
||||
error= ER_SLAVE_RELAY_LOG_WRITE_FAILURE;
|
||||
}
|
||||
rli->ign_master_log_name_end[0]= 0; // last event is not ignored
|
||||
}
|
||||
pthread_mutex_unlock(log_lock);
|
||||
|
||||
skip_relay_logging:
|
||||
|
||||
err:
|
||||
pthread_mutex_unlock(&mi->data_lock);
|
||||
DBUG_PRINT("info", ("error: %d", error));
|
||||
if (error)
|
||||
mi->report(ERROR_LEVEL, error, ER(error),
|
||||
(error == ER_SLAVE_RELAY_LOG_WRITE_FAILURE)?
|
||||
"could not queue event from master" :
|
||||
error_msg.ptr());
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
@ -4208,8 +4311,8 @@ static Log_event* next_event(Relay_log_info* rli)
|
||||
*/
|
||||
pthread_mutex_unlock(&rli->log_space_lock);
|
||||
pthread_cond_broadcast(&rli->log_space_cond);
|
||||
// Note that wait_for_update unlocks lock_log !
|
||||
rli->relay_log.wait_for_update(rli->sql_thd, 1);
|
||||
// Note that wait_for_update_relay_log unlocks lock_log !
|
||||
rli->relay_log.wait_for_update_relay_log(rli->sql_thd);
|
||||
// re-acquire data lock since we released it earlier
|
||||
pthread_mutex_lock(&rli->data_lock);
|
||||
rli->last_master_timestamp= save_timestamp;
|
||||
|
12
sql/slave.h
12
sql/slave.h
@ -22,6 +22,17 @@
|
||||
|
||||
@file
|
||||
*/
|
||||
|
||||
/**
|
||||
Some of defines are need in parser even though replication is not
|
||||
compiled in (embedded).
|
||||
*/
|
||||
|
||||
/**
|
||||
The maximum is defined as (ULONG_MAX/1000) with 4 bytes ulong
|
||||
*/
|
||||
#define SLAVE_MAX_HEARTBEAT_PERIOD 4294967
|
||||
|
||||
#ifdef HAVE_REPLICATION
|
||||
|
||||
#include "log.h"
|
||||
@ -33,7 +44,6 @@
|
||||
|
||||
#define MAX_SLAVE_ERROR 2000
|
||||
|
||||
|
||||
// Forward declarations
|
||||
class Relay_log_info;
|
||||
class Master_info;
|
||||
|
@ -206,14 +206,15 @@ typedef struct st_lex_master_info
|
||||
{
|
||||
char *host, *user, *password, *log_file_name;
|
||||
uint port, connect_retry;
|
||||
float heartbeat_period;
|
||||
ulonglong pos;
|
||||
ulong server_id;
|
||||
/*
|
||||
Enum is used for making it possible to detect if the user
|
||||
changed variable or if it should be left at old value
|
||||
*/
|
||||
enum {SSL_UNCHANGED, SSL_DISABLE, SSL_ENABLE}
|
||||
ssl, ssl_verify_server_cert;
|
||||
enum {LEX_MI_UNCHANGED, LEX_MI_DISABLE, LEX_MI_ENABLE}
|
||||
ssl, ssl_verify_server_cert, heartbeat_opt;
|
||||
char *ssl_key, *ssl_cert, *ssl_ca, *ssl_capath, *ssl_cipher;
|
||||
char *relay_log_name;
|
||||
ulong relay_log_pos;
|
||||
|
178
sql/sql_repl.cc
178
sql/sql_repl.cc
@ -336,6 +336,74 @@ Increase max_allowed_packet on master";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
An auxiliary function for calling in mysql_binlog_send
|
||||
to initialize the heartbeat timeout in waiting for a binlogged event.
|
||||
|
||||
@param[in] thd THD to access a user variable
|
||||
|
||||
@return heartbeat period an ulonglong of nanoseconds
|
||||
or zero if heartbeat was not demanded by slave
|
||||
*/
|
||||
static ulonglong get_heartbeat_period(THD * thd)
|
||||
{
|
||||
my_bool null_value;
|
||||
LEX_STRING name= { C_STRING_WITH_LEN("master_heartbeat_period")};
|
||||
user_var_entry *entry=
|
||||
(user_var_entry*) hash_search(&thd->user_vars, (uchar*) name.str,
|
||||
name.length);
|
||||
return entry? entry->val_int(&null_value) : 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Function prepares and sends repliation heartbeat event.
|
||||
|
||||
@param net net object of THD
|
||||
@param packet buffer to store the heartbeat instance
|
||||
@param event_coordinates binlog file name and position of the last
|
||||
real event master sent from binlog
|
||||
|
||||
@note
|
||||
Among three essential pieces of heartbeat data Log_event::when
|
||||
is computed locally.
|
||||
The error to send is serious and should force terminating
|
||||
the dump thread.
|
||||
*/
|
||||
static int send_heartbeat_event(NET* net, String* packet,
|
||||
const struct event_coordinates *coord)
|
||||
{
|
||||
DBUG_ENTER("send_heartbeat_event");
|
||||
char header[LOG_EVENT_HEADER_LEN];
|
||||
/*
|
||||
'when' (the timestamp) is set to 0 so that slave could distinguish between
|
||||
real and fake Rotate events (if necessary)
|
||||
*/
|
||||
memset(header, 0, 4); // when
|
||||
|
||||
header[EVENT_TYPE_OFFSET] = HEARTBEAT_LOG_EVENT;
|
||||
|
||||
char* p= coord->file_name + dirname_length(coord->file_name);
|
||||
|
||||
uint ident_len = strlen(p);
|
||||
ulong event_len = ident_len + LOG_EVENT_HEADER_LEN;
|
||||
int4store(header + SERVER_ID_OFFSET, server_id);
|
||||
int4store(header + EVENT_LEN_OFFSET, event_len);
|
||||
int2store(header + FLAGS_OFFSET, 0);
|
||||
|
||||
int4store(header + LOG_POS_OFFSET, coord->pos); // log_pos
|
||||
|
||||
packet->append(header, sizeof(header));
|
||||
packet->append(p, ident_len); // log_file_name
|
||||
|
||||
if (my_net_write(net, (uchar*) packet->ptr(), packet->length()) ||
|
||||
net_flush(net))
|
||||
{
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
packet->set("\0", 1, &my_charset_bin);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
/*
|
||||
TODO: Clean up loop to only have one call to send_file()
|
||||
*/
|
||||
@ -361,7 +429,22 @@ void mysql_binlog_send(THD* thd, char* log_ident, my_off_t pos,
|
||||
DBUG_PRINT("enter",("log_ident: '%s' pos: %ld", log_ident, (long) pos));
|
||||
|
||||
bzero((char*) &log,sizeof(log));
|
||||
|
||||
/*
|
||||
heartbeat_period from @master_heartbeat_period user variable
|
||||
*/
|
||||
ulonglong heartbeat_period= get_heartbeat_period(thd);
|
||||
struct timespec heartbeat_buf;
|
||||
struct event_coordinates coord_buf;
|
||||
struct timespec *heartbeat_ts= NULL;
|
||||
struct event_coordinates *coord= NULL;
|
||||
if (heartbeat_period != LL(0))
|
||||
{
|
||||
heartbeat_ts= &heartbeat_buf;
|
||||
set_timespec_nsec(*heartbeat_ts, 0);
|
||||
coord= &coord_buf;
|
||||
coord->file_name= log_file_name; // initialization basing on what slave remembers
|
||||
coord->pos= pos;
|
||||
}
|
||||
#ifndef DBUG_OFF
|
||||
if (opt_sporadic_binlog_dump_fail && (binlog_dump_count++ % 2))
|
||||
{
|
||||
@ -555,6 +638,11 @@ impossible position";
|
||||
goto err;
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
log's filename does not change while it's active
|
||||
*/
|
||||
if (coord)
|
||||
coord->pos= uint4korr(packet->ptr() + 1 + LOG_POS_OFFSET);
|
||||
|
||||
if ((*packet)[EVENT_TYPE_OFFSET+1] == FORMAT_DESCRIPTION_EVENT)
|
||||
{
|
||||
@ -650,23 +738,62 @@ impossible position";
|
||||
/* we read successfully, so we'll need to send it to the slave */
|
||||
pthread_mutex_unlock(log_lock);
|
||||
read_packet = 1;
|
||||
if (coord)
|
||||
coord->pos= uint4korr(packet->ptr() + 1 + LOG_POS_OFFSET);
|
||||
break;
|
||||
|
||||
case LOG_READ_EOF:
|
||||
{
|
||||
int ret;
|
||||
ulong signal_cnt;
|
||||
DBUG_PRINT("wait",("waiting for data in binary log"));
|
||||
if (thd->server_id==0) // for mysqlbinlog (mysqlbinlog.server_id==0)
|
||||
{
|
||||
pthread_mutex_unlock(log_lock);
|
||||
goto end;
|
||||
}
|
||||
if (!thd->killed)
|
||||
|
||||
#ifndef DBUG_OFF
|
||||
ulong hb_info_counter= 0;
|
||||
#endif
|
||||
signal_cnt= mysql_bin_log.signal_cnt;
|
||||
do
|
||||
{
|
||||
/* Note that the following call unlocks lock_log */
|
||||
mysql_bin_log.wait_for_update(thd, 0);
|
||||
if (coord)
|
||||
{
|
||||
DBUG_ASSERT(heartbeat_ts && heartbeat_period != LL(0));
|
||||
set_timespec_nsec(*heartbeat_ts, heartbeat_period);
|
||||
}
|
||||
ret= mysql_bin_log.wait_for_update_bin_log(thd, heartbeat_ts);
|
||||
DBUG_ASSERT(ret == 0 || heartbeat_period != LL(0) && coord != NULL);
|
||||
if (ret == ETIMEDOUT || ret == ETIME)
|
||||
{
|
||||
#ifndef DBUG_OFF
|
||||
if (hb_info_counter < 3)
|
||||
{
|
||||
sql_print_information("master sends heartbeat message");
|
||||
hb_info_counter++;
|
||||
if (hb_info_counter == 3)
|
||||
sql_print_information("the rest of heartbeat info skipped ...");
|
||||
}
|
||||
#endif
|
||||
if (send_heartbeat_event(net, packet, coord))
|
||||
{
|
||||
errmsg = "Failed on my_net_write()";
|
||||
my_errno= ER_UNKNOWN_ERROR;
|
||||
pthread_mutex_unlock(log_lock);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
else
|
||||
pthread_mutex_unlock(log_lock);
|
||||
{
|
||||
DBUG_ASSERT(ret == 0 && signal_cnt != mysql_bin_log.signal_cnt ||
|
||||
thd->killed);
|
||||
DBUG_PRINT("wait",("binary log received update"));
|
||||
}
|
||||
} while (signal_cnt == mysql_bin_log.signal_cnt && !thd->killed);
|
||||
pthread_mutex_unlock(log_lock);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -753,6 +880,8 @@ impossible position";
|
||||
|
||||
packet->length(0);
|
||||
packet->append('\0');
|
||||
if (coord)
|
||||
coord->file_name= log_file_name; // reset to the next
|
||||
}
|
||||
}
|
||||
|
||||
@ -1195,13 +1324,18 @@ bool change_master(THD* thd, Master_info* mi)
|
||||
mi->port = lex_mi->port;
|
||||
if (lex_mi->connect_retry)
|
||||
mi->connect_retry = lex_mi->connect_retry;
|
||||
if (lex_mi->heartbeat_opt != LEX_MASTER_INFO::LEX_MI_UNCHANGED)
|
||||
mi->heartbeat_period = lex_mi->heartbeat_period;
|
||||
else
|
||||
mi->heartbeat_period= (float) min(SLAVE_MAX_HEARTBEAT_PERIOD,
|
||||
(slave_net_timeout/2.0));
|
||||
mi->received_heartbeats= LL(0); // counter lives until master is CHANGEd
|
||||
if (lex_mi->ssl != LEX_MASTER_INFO::LEX_MI_UNCHANGED)
|
||||
mi->ssl= (lex_mi->ssl == LEX_MASTER_INFO::LEX_MI_ENABLE);
|
||||
|
||||
if (lex_mi->ssl != LEX_MASTER_INFO::SSL_UNCHANGED)
|
||||
mi->ssl= (lex_mi->ssl == LEX_MASTER_INFO::SSL_ENABLE);
|
||||
|
||||
if (lex_mi->ssl_verify_server_cert != LEX_MASTER_INFO::SSL_UNCHANGED)
|
||||
if (lex_mi->ssl_verify_server_cert != LEX_MASTER_INFO::LEX_MI_UNCHANGED)
|
||||
mi->ssl_verify_server_cert=
|
||||
(lex_mi->ssl_verify_server_cert == LEX_MASTER_INFO::SSL_ENABLE);
|
||||
(lex_mi->ssl_verify_server_cert == LEX_MASTER_INFO::LEX_MI_ENABLE);
|
||||
|
||||
if (lex_mi->ssl_ca)
|
||||
strmake(mi->ssl_ca, lex_mi->ssl_ca, sizeof(mi->ssl_ca)-1);
|
||||
@ -1745,6 +1879,26 @@ public:
|
||||
bool update(THD *thd, set_var *var);
|
||||
};
|
||||
|
||||
static void fix_slave_net_timeout(THD *thd, enum_var_type type)
|
||||
{
|
||||
DBUG_ENTER("fix_slave_net_timeout");
|
||||
#ifdef HAVE_REPLICATION
|
||||
pthread_mutex_lock(&LOCK_active_mi);
|
||||
DBUG_PRINT("info",("slave_net_timeout=%lu mi->heartbeat_period=%.3f",
|
||||
slave_net_timeout,
|
||||
(active_mi? active_mi->heartbeat_period : 0.0)));
|
||||
if (active_mi && slave_net_timeout < active_mi->heartbeat_period)
|
||||
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE,
|
||||
"The currect value for master_heartbeat_period"
|
||||
" exceeds the new value of `slave_net_timeout' sec."
|
||||
" A sensible value for the period should be"
|
||||
" less than the timeout.");
|
||||
pthread_mutex_unlock(&LOCK_active_mi);
|
||||
#endif
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
static sys_var_chain vars = { NULL, NULL };
|
||||
|
||||
static sys_var_const sys_log_slave_updates(&vars, "log_slave_updates",
|
||||
@ -1770,7 +1924,8 @@ static sys_var_const sys_slave_load_tmpdir(&vars, "slave_load_tmpdir",
|
||||
OPT_GLOBAL, SHOW_CHAR_PTR,
|
||||
(uchar*) &slave_load_tmpdir);
|
||||
static sys_var_long_ptr sys_slave_net_timeout(&vars, "slave_net_timeout",
|
||||
&slave_net_timeout);
|
||||
&slave_net_timeout,
|
||||
fix_slave_net_timeout);
|
||||
static sys_var_const sys_slave_skip_errors(&vars, "slave_skip_errors",
|
||||
OPT_GLOBAL, SHOW_CHAR,
|
||||
(uchar*) slave_skip_error_names);
|
||||
@ -1835,6 +1990,7 @@ int init_replication_sys_vars()
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#endif /* HAVE_REPLICATION */
|
||||
|
||||
|
||||
|
@ -814,6 +814,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
||||
%token MASTER_SSL_VERIFY_SERVER_CERT_SYM
|
||||
%token MASTER_SYM
|
||||
%token MASTER_USER_SYM
|
||||
%token MASTER_HEARTBEAT_PERIOD_SYM
|
||||
%token MATCH /* SQL-2003-R */
|
||||
%token MAX_CONNECTIONS_PER_HOUR
|
||||
%token MAX_QUERIES_PER_HOUR
|
||||
@ -1592,7 +1593,7 @@ master_def:
|
||||
| MASTER_SSL_SYM EQ ulong_num
|
||||
{
|
||||
Lex->mi.ssl= $3 ?
|
||||
LEX_MASTER_INFO::SSL_ENABLE : LEX_MASTER_INFO::SSL_DISABLE;
|
||||
LEX_MASTER_INFO::LEX_MI_ENABLE : LEX_MASTER_INFO::LEX_MI_DISABLE;
|
||||
}
|
||||
| MASTER_SSL_CA_SYM EQ TEXT_STRING_sys
|
||||
{
|
||||
@ -1617,9 +1618,51 @@ master_def:
|
||||
| MASTER_SSL_VERIFY_SERVER_CERT_SYM EQ ulong_num
|
||||
{
|
||||
Lex->mi.ssl_verify_server_cert= $3 ?
|
||||
LEX_MASTER_INFO::SSL_ENABLE : LEX_MASTER_INFO::SSL_DISABLE;
|
||||
LEX_MASTER_INFO::LEX_MI_ENABLE : LEX_MASTER_INFO::LEX_MI_DISABLE;
|
||||
}
|
||||
| master_file_def
|
||||
|
||||
| MASTER_HEARTBEAT_PERIOD_SYM EQ NUM_literal
|
||||
{
|
||||
Lex->mi.heartbeat_period= (float) $3->val_real();
|
||||
if (Lex->mi.heartbeat_period > SLAVE_MAX_HEARTBEAT_PERIOD ||
|
||||
Lex->mi.heartbeat_period < 0.0)
|
||||
{
|
||||
const char format[]= "%d seconds";
|
||||
char buf[4*sizeof(SLAVE_MAX_HEARTBEAT_PERIOD) + sizeof(format)];
|
||||
my_sprintf(buf, (buf, format, SLAVE_MAX_HEARTBEAT_PERIOD));
|
||||
my_error(ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE,
|
||||
MYF(0),
|
||||
" is negative or exceeds the maximum ",
|
||||
buf);
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
if (Lex->mi.heartbeat_period > slave_net_timeout)
|
||||
{
|
||||
push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE,
|
||||
ER(ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE),
|
||||
" exceeds the value of `slave_net_timeout' sec.",
|
||||
" A sensible value for the period should be"
|
||||
" less than the timeout.");
|
||||
}
|
||||
if (Lex->mi.heartbeat_period < 0.001)
|
||||
{
|
||||
if (Lex->mi.heartbeat_period != 0.0)
|
||||
{
|
||||
push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE,
|
||||
ER(ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE),
|
||||
" is less than 1 msec.",
|
||||
" The period is reset to zero which means"
|
||||
" no heartbeats will be sending");
|
||||
Lex->mi.heartbeat_period= 0.0;
|
||||
}
|
||||
Lex->mi.heartbeat_opt= LEX_MASTER_INFO::LEX_MI_DISABLE;
|
||||
}
|
||||
Lex->mi.heartbeat_opt= LEX_MASTER_INFO::LEX_MI_ENABLE;
|
||||
}
|
||||
|
|
||||
master_file_def
|
||||
;
|
||||
|
||||
master_file_def:
|
||||
|
Loading…
x
Reference in New Issue
Block a user