forked from facebook/mysql-5.6
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add trx meta data in the binlog using comments in rows query event
Summary: If enabled, For every trx before the commit event is written we write a rows query event which contains meta data in JSON format wrapped inside a comment. Storing timestamps in the meta data to calculate slave lag in millisecond granularity. Reviewed By: tianx Differential Revision: D5220355 fbshipit-source-id: a336f92
- Loading branch information
1 parent
d26efe0
commit 316e0e5
Showing
17 changed files
with
463 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
include/master-slave.inc | ||
Warnings: | ||
Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. | ||
Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. | ||
[connection master] | ||
set @save.binlog_trx_meta_data= @@global.binlog_trx_meta_data; | ||
set @@global.binlog_trx_meta_data= true; | ||
set @save.binlog_trx_meta_data= @@global.binlog_trx_meta_data; | ||
set @@global.binlog_trx_meta_data= true; | ||
include/sync_slave_sql_with_master.inc | ||
include/sync_slave_sql_with_master.inc | ||
meta count(*) | ||
# /*::TRX_META_DATA::{"timestamps":[ts]}*/ 134 | ||
meta count(*) | ||
# /*::TRX_META_DATA::{"timestamps":[ts,ts]}*/ 134 | ||
include/rpl_end.inc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
source include/master-slave.inc; | ||
source include/have_binlog_format_row.inc; | ||
|
||
# Enable trx meta data | ||
connection master; | ||
set @save.binlog_trx_meta_data= @@global.binlog_trx_meta_data; | ||
set @@global.binlog_trx_meta_data= true; | ||
|
||
connection slave; | ||
set @save.binlog_trx_meta_data= @@global.binlog_trx_meta_data; | ||
set @@global.binlog_trx_meta_data= true; | ||
|
||
# Generate load | ||
connection master; | ||
let $skip_cleanup= 1; | ||
let $sync_with_master= 1; | ||
let $databases=2; | ||
let $iter=5; | ||
source extra/rpl_tests/rpl_parallel_simple_load.test; | ||
enable_result_log; | ||
|
||
# Check binlogs for meta data | ||
connection master; | ||
let $MYSQLD_DATADIR = `select @@datadir`; | ||
let $MYSQLD_SECURE_FILE_DIR = `select @@secure_file_priv`; | ||
exec $MYSQL_BINLOG -v -v $MYSQLD_DATADIR/master-bin.0* | grep "::TRX_META_DATA::" | sed 's/\"[0-9]*\"/ts/g' > $MYSQLD_SECURE_FILE_DIR/meta_data.dat; | ||
set sql_log_bin=0; | ||
create table test.meta_data(meta text); | ||
eval load data infile '$MYSQLD_SECURE_FILE_DIR/meta_data.dat' into table test.meta_data; | ||
select meta, count(*) from test.meta_data; | ||
drop table test.meta_data; | ||
set sql_log_bin=1; | ||
remove_file $MYSQLD_SECURE_FILE_DIR/meta_data.dat; | ||
|
||
connection slave; | ||
let $MYSQLD_DATADIR = `select @@datadir`; | ||
let $MYSQLD_SECURE_FILE_DIR = `select @@secure_file_priv`; | ||
exec $MYSQL_BINLOG -v -v $MYSQLD_DATADIR/slave-bin.0* | grep "::TRX_META_DATA::" | sed 's/\"[0-9]*\"/ts/g' > $MYSQLD_SECURE_FILE_DIR/meta_data.dat; | ||
set sql_log_bin=0; | ||
create table test.meta_data(meta text); | ||
eval load data infile '$MYSQLD_SECURE_FILE_DIR/meta_data.dat' into table test.meta_data; | ||
select meta, count(*) from test.meta_data; | ||
drop table test.meta_data; | ||
set sql_log_bin=1; | ||
remove_file $MYSQLD_SECURE_FILE_DIR/meta_data.dat; | ||
|
||
# Consistency check | ||
connection master; | ||
let $include_silent=1; | ||
source extra/rpl_tests/rpl_parallel_simple_load_consistency.test; | ||
let $include_silent=; | ||
|
||
# Cleanup | ||
connection master; | ||
source extra/rpl_tests/rpl_parallel_simple_load_cleanup.test; | ||
connection slave; | ||
set @@global.binlog_trx_meta_data= @save.binlog_trx_meta_data; | ||
connection master; | ||
set @@global.binlog_trx_meta_data= @save.binlog_trx_meta_data; | ||
|
||
source include/rpl_end.inc; |
85 changes: 85 additions & 0 deletions
85
mysql-test/suite/sys_vars/r/binlog_trx_meta_data_basic.result
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
SET @start_value = @@global.binlog_trx_meta_data; | ||
SELECT @start_value; | ||
@start_value | ||
0 | ||
SET @@global.binlog_trx_meta_data = DEFAULT; | ||
SELECT @@global.binlog_trx_meta_data = TRUE; | ||
@@global.binlog_trx_meta_data = TRUE | ||
0 | ||
SET @@global.binlog_trx_meta_data = ON; | ||
SELECT @@global.binlog_trx_meta_data; | ||
@@global.binlog_trx_meta_data | ||
1 | ||
SET @@global.binlog_trx_meta_data = OFF; | ||
SELECT @@global.binlog_trx_meta_data; | ||
@@global.binlog_trx_meta_data | ||
0 | ||
SET @@global.binlog_trx_meta_data = 2; | ||
ERROR 42000: Variable 'binlog_trx_meta_data' can't be set to the value of '2' | ||
SET @@global.binlog_trx_meta_data = -1; | ||
ERROR 42000: Variable 'binlog_trx_meta_data' can't be set to the value of '-1' | ||
SET @@global.binlog_trx_meta_data = TRUEF; | ||
ERROR 42000: Variable 'binlog_trx_meta_data' can't be set to the value of 'TRUEF' | ||
SET @@global.binlog_trx_meta_data = TRUE_F; | ||
ERROR 42000: Variable 'binlog_trx_meta_data' can't be set to the value of 'TRUE_F' | ||
SET @@global.binlog_trx_meta_data = FALSE0; | ||
ERROR 42000: Variable 'binlog_trx_meta_data' can't be set to the value of 'FALSE0' | ||
SET @@global.binlog_trx_meta_data = OON; | ||
ERROR 42000: Variable 'binlog_trx_meta_data' can't be set to the value of 'OON' | ||
SET @@global.binlog_trx_meta_data = ONN; | ||
ERROR 42000: Variable 'binlog_trx_meta_data' can't be set to the value of 'ONN' | ||
SET @@global.binlog_trx_meta_data = OOFF; | ||
ERROR 42000: Variable 'binlog_trx_meta_data' can't be set to the value of 'OOFF' | ||
SET @@global.binlog_trx_meta_data = 0FF; | ||
ERROR 42000: Variable 'binlog_trx_meta_data' can't be set to the value of '0FF' | ||
SET @@global.binlog_trx_meta_data = ' '; | ||
ERROR 42000: Variable 'binlog_trx_meta_data' can't be set to the value of ' ' | ||
SET @@global.binlog_trx_meta_data = " "; | ||
ERROR 42000: Variable 'binlog_trx_meta_data' can't be set to the value of ' ' | ||
SET @@global.binlog_trx_meta_data = ''; | ||
ERROR 42000: Variable 'binlog_trx_meta_data' can't be set to the value of '' | ||
SET @@session.binlog_trx_meta_data = OFF; | ||
ERROR HY000: Variable 'binlog_trx_meta_data' is a GLOBAL variable and should be set with SET GLOBAL | ||
SELECT @@session.binlog_trx_meta_data; | ||
ERROR HY000: Variable 'binlog_trx_meta_data' is a GLOBAL variable | ||
SELECT IF(@@global.binlog_trx_meta_data, "ON", "OFF") = VARIABLE_VALUE | ||
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES | ||
WHERE VARIABLE_NAME='binlog_trx_meta_data'; | ||
IF(@@global.binlog_trx_meta_data, "ON", "OFF") = VARIABLE_VALUE | ||
1 | ||
SET @@global.binlog_trx_meta_data = 0; | ||
SELECT @@global.binlog_trx_meta_data; | ||
@@global.binlog_trx_meta_data | ||
0 | ||
SET @@global.binlog_trx_meta_data = 1; | ||
SELECT @@global.binlog_trx_meta_data; | ||
@@global.binlog_trx_meta_data | ||
1 | ||
SET @@global.binlog_trx_meta_data = TRUE; | ||
SELECT @@global.binlog_trx_meta_data; | ||
@@global.binlog_trx_meta_data | ||
1 | ||
SET @@global.binlog_trx_meta_data = FALSE; | ||
SELECT @@global.binlog_trx_meta_data; | ||
@@global.binlog_trx_meta_data | ||
0 | ||
SET @@global.binlog_trx_meta_data = ON; | ||
SELECT @@binlog_trx_meta_data = @@global.binlog_trx_meta_data; | ||
@@binlog_trx_meta_data = @@global.binlog_trx_meta_data | ||
1 | ||
SET binlog_trx_meta_data = ON; | ||
ERROR HY000: Variable 'binlog_trx_meta_data' is a GLOBAL variable and should be set with SET GLOBAL | ||
SET local.binlog_trx_meta_data = OFF; | ||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'binlog_trx_meta_data = OFF' at line 1 | ||
SELECT local.binlog_trx_meta_data; | ||
ERROR 42S02: Unknown table 'local' in field list | ||
SET global.binlog_trx_meta_data = ON; | ||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'binlog_trx_meta_data = ON' at line 1 | ||
SELECT global.binlog_trx_meta_data; | ||
ERROR 42S02: Unknown table 'global' in field list | ||
SELECT binlog_trx_meta_data = @@session.binlog_trx_meta_data; | ||
ERROR 42S22: Unknown column 'binlog_trx_meta_data' in 'field list' | ||
SET @@global.binlog_trx_meta_data = @start_value; | ||
SELECT @@global.binlog_trx_meta_data; | ||
@@global.binlog_trx_meta_data | ||
0 |
81 changes: 81 additions & 0 deletions
81
mysql-test/suite/sys_vars/t/binlog_trx_meta_data_basic.test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
--source include/have_innodb.inc | ||
--source include/load_sysvars.inc | ||
|
||
SET @start_value = @@global.binlog_trx_meta_data; | ||
SELECT @start_value; | ||
|
||
|
||
SET @@global.binlog_trx_meta_data = DEFAULT; | ||
SELECT @@global.binlog_trx_meta_data = TRUE; | ||
|
||
|
||
SET @@global.binlog_trx_meta_data = ON; | ||
SELECT @@global.binlog_trx_meta_data; | ||
SET @@global.binlog_trx_meta_data = OFF; | ||
SELECT @@global.binlog_trx_meta_data; | ||
|
||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@global.binlog_trx_meta_data = 2; | ||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@global.binlog_trx_meta_data = -1; | ||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@global.binlog_trx_meta_data = TRUEF; | ||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@global.binlog_trx_meta_data = TRUE_F; | ||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@global.binlog_trx_meta_data = FALSE0; | ||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@global.binlog_trx_meta_data = OON; | ||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@global.binlog_trx_meta_data = ONN; | ||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@global.binlog_trx_meta_data = OOFF; | ||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@global.binlog_trx_meta_data = 0FF; | ||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@global.binlog_trx_meta_data = ' '; | ||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@global.binlog_trx_meta_data = " "; | ||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@global.binlog_trx_meta_data = ''; | ||
|
||
|
||
--Error ER_GLOBAL_VARIABLE | ||
SET @@session.binlog_trx_meta_data = OFF; | ||
--Error ER_INCORRECT_GLOBAL_LOCAL_VAR | ||
SELECT @@session.binlog_trx_meta_data; | ||
|
||
|
||
SELECT IF(@@global.binlog_trx_meta_data, "ON", "OFF") = VARIABLE_VALUE | ||
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES | ||
WHERE VARIABLE_NAME='binlog_trx_meta_data'; | ||
|
||
|
||
SET @@global.binlog_trx_meta_data = 0; | ||
SELECT @@global.binlog_trx_meta_data; | ||
SET @@global.binlog_trx_meta_data = 1; | ||
SELECT @@global.binlog_trx_meta_data; | ||
|
||
SET @@global.binlog_trx_meta_data = TRUE; | ||
SELECT @@global.binlog_trx_meta_data; | ||
SET @@global.binlog_trx_meta_data = FALSE; | ||
SELECT @@global.binlog_trx_meta_data; | ||
|
||
SET @@global.binlog_trx_meta_data = ON; | ||
SELECT @@binlog_trx_meta_data = @@global.binlog_trx_meta_data; | ||
|
||
--Error ER_GLOBAL_VARIABLE | ||
SET binlog_trx_meta_data = ON; | ||
--Error ER_PARSE_ERROR | ||
SET local.binlog_trx_meta_data = OFF; | ||
--Error ER_UNKNOWN_TABLE | ||
SELECT local.binlog_trx_meta_data; | ||
--Error ER_PARSE_ERROR | ||
SET global.binlog_trx_meta_data = ON; | ||
--Error ER_UNKNOWN_TABLE | ||
SELECT global.binlog_trx_meta_data; | ||
--Error ER_BAD_FIELD_ERROR | ||
SELECT binlog_trx_meta_data = @@session.binlog_trx_meta_data; | ||
|
||
SET @@global.binlog_trx_meta_data = @start_value; | ||
SELECT @@global.binlog_trx_meta_data; |
Oops, something went wrong.