mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MWL#36: Add a mysqlbinlog option to change the used database.
Post-review changes: * modify mysqlbinlog's --help message for --rewrite-db option. * add test for mysqlbinlog with --read-from-remote-server option.
This commit is contained in:
@ -38,8 +38,8 @@
|
|||||||
/* Needed for Rpl_filter */
|
/* Needed for Rpl_filter */
|
||||||
CHARSET_INFO* system_charset_info= &my_charset_utf8_general_ci;
|
CHARSET_INFO* system_charset_info= &my_charset_utf8_general_ci;
|
||||||
|
|
||||||
#include "sql_string.h" // needed for Rpl_filter
|
#include "sql_string.h" // needed for Rpl_filter
|
||||||
#include "sql_list.h" // needed for Rpl_filter
|
#include "sql_list.h" // needed for Rpl_filter
|
||||||
#include "rpl_filter.h"
|
#include "rpl_filter.h"
|
||||||
|
|
||||||
Rpl_filter *binlog_filter;
|
Rpl_filter *binlog_filter;
|
||||||
@ -1190,7 +1190,8 @@ that may lead to an endless loop.",
|
|||||||
(uchar**) &open_files_limit, (uchar**) &open_files_limit, 0, GET_ULONG,
|
(uchar**) &open_files_limit, (uchar**) &open_files_limit, 0, GET_ULONG,
|
||||||
REQUIRED_ARG, MY_NFILE, 8, OS_FILE_LIMIT, 0, 1, 0},
|
REQUIRED_ARG, MY_NFILE, 8, OS_FILE_LIMIT, 0, 1, 0},
|
||||||
{"rewrite-db", OPT_REWRITE_DB,
|
{"rewrite-db", OPT_REWRITE_DB,
|
||||||
"Updates to a database with a different name than the original.",
|
"Updates to a database with a different name than the original. \
|
||||||
|
Example: rewrite-db='from->to'.",
|
||||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
@ -216,6 +216,201 @@ DELIMITER ;
|
|||||||
# End of log file
|
# End of log file
|
||||||
ROLLBACK /* added by mysqlbinlog */;
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
|
#
|
||||||
|
# mysqlbinlog output
|
||||||
|
# --base64-output = decode-rows
|
||||||
|
# --rewrite-db = test1->new_test1
|
||||||
|
# --rewrite-db = test3->new_test3
|
||||||
|
# --read-from-remote-server
|
||||||
|
#
|
||||||
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
|
DELIMITER /*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Start: binlog v 4, server v #.##.## created 010909 4:46:40 at startup
|
||||||
|
ROLLBACK/*!*/;
|
||||||
|
# at #
|
||||||
|
use new_test1/*!*/;
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
SET @@session.pseudo_thread_id=#/*!*/;
|
||||||
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
|
||||||
|
SET @@session.sql_mode=0/*!*/;
|
||||||
|
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
|
||||||
|
/*!\C latin1 *//*!*/;
|
||||||
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
|
SET @@session.lc_time_names=0/*!*/;
|
||||||
|
SET @@session.collation_database=DEFAULT/*!*/;
|
||||||
|
CREATE TABLE t1 (a INT, b INT)
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Table_map: `new_test1`.`t1` mapped to number #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||||
|
### INSERT INTO new_test1.t1
|
||||||
|
### SET
|
||||||
|
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### @2=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### INSERT INTO new_test1.t1
|
||||||
|
### SET
|
||||||
|
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### @2=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
COMMIT
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
use test2/*!*/;
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
CREATE TABLE t2 (a INT)
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Table_map: `test2`.`t2` mapped to number #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||||
|
### INSERT INTO test2.t2
|
||||||
|
### SET
|
||||||
|
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### INSERT INTO test2.t2
|
||||||
|
### SET
|
||||||
|
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
COMMIT
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Table_map: `new_test1`.`t1` mapped to number #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Delete_rows: table id # flags: STMT_END_F
|
||||||
|
### DELETE FROM new_test1.t1
|
||||||
|
### WHERE
|
||||||
|
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### @2=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
COMMIT
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
use new_test3/*!*/;
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
CREATE TABLE t3 (a INT)
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Table_map: `new_test3`.`t3` mapped to number #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||||
|
### INSERT INTO new_test3.t3
|
||||||
|
### SET
|
||||||
|
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### INSERT INTO new_test3.t3
|
||||||
|
### SET
|
||||||
|
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
COMMIT
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Table_map: `new_test1`.`t1` mapped to number #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||||
|
### INSERT INTO new_test1.t1
|
||||||
|
### SET
|
||||||
|
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### @2=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
COMMIT
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
use new_test1/*!*/;
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Table_map: `new_test1`.`t1` mapped to number #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||||
|
### INSERT INTO new_test1.t1
|
||||||
|
### SET
|
||||||
|
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### @2=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### INSERT INTO new_test1.t1
|
||||||
|
### SET
|
||||||
|
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### @2=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### INSERT INTO new_test1.t1
|
||||||
|
### SET
|
||||||
|
### @1=4 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### @2=4 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### INSERT INTO new_test1.t1
|
||||||
|
### SET
|
||||||
|
### @1=5 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### @2=5 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### INSERT INTO new_test1.t1
|
||||||
|
### SET
|
||||||
|
### @1=6 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
### @2=6 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
COMMIT
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Table_map: `new_test3`.`t3` mapped to number #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Delete_rows: table id # flags: STMT_END_F
|
||||||
|
### DELETE FROM new_test3.t3
|
||||||
|
### WHERE
|
||||||
|
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
COMMIT
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id # end_log_pos # Rotate to master-bin.000002 pos: 4
|
||||||
|
DELIMITER ;
|
||||||
|
# End of log file
|
||||||
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
DROP DATABASE test1;
|
DROP DATABASE test1;
|
||||||
DROP DATABASE test2;
|
DROP DATABASE test2;
|
||||||
DROP DATABASE test3;
|
DROP DATABASE test3;
|
||||||
|
@ -62,6 +62,17 @@ let $MYSQLD_DATADIR= `select @@datadir`;
|
|||||||
--replace_regex /server id [0-9]*/server id #/ /server v [^ ]*/server v #.##.##/ /exec_time=[0-9]*/exec_time=#/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/
|
--replace_regex /server id [0-9]*/server id #/ /server v [^ ]*/server v #.##.##/ /exec_time=[0-9]*/exec_time=#/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/
|
||||||
--exec $MYSQL_BINLOG --base64-output=decode-rows --rewrite-db="test1->new_test1" --rewrite-db="test3->new_test3" -v -v $MYSQLD_DATADIR/master-bin.000001
|
--exec $MYSQL_BINLOG --base64-output=decode-rows --rewrite-db="test1->new_test1" --rewrite-db="test3->new_test3" -v -v $MYSQLD_DATADIR/master-bin.000001
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # mysqlbinlog output
|
||||||
|
--echo # --base64-output = decode-rows
|
||||||
|
--echo # --rewrite-db = test1->new_test1
|
||||||
|
--echo # --rewrite-db = test3->new_test3
|
||||||
|
--echo # --read-from-remote-server
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--replace_regex /server id [0-9]*/server id #/ /server v [^ ]*/server v #.##.##/ /exec_time=[0-9]*/exec_time=#/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/
|
||||||
|
--exec $MYSQL_BINLOG --base64-output=decode-rows --rewrite-db="test1->new_test1" --rewrite-db="test3->new_test3" -v -v --read-from-remote-server --user=root --host=localhost --port=$MASTER_MYPORT master-bin.000001
|
||||||
|
|
||||||
DROP DATABASE test1;
|
DROP DATABASE test1;
|
||||||
DROP DATABASE test2;
|
DROP DATABASE test2;
|
||||||
DROP DATABASE test3;
|
DROP DATABASE test3;
|
||||||
|
Reference in New Issue
Block a user