mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
MBug#702303: Spurious use
statements in output from mysqlbinlog --rewrite-db="a->b"
This commit is contained in:
parent
acb3095386
commit
108e9ee84e
4 changed files with 126 additions and 7 deletions
|
@ -636,11 +636,16 @@ static bool shall_skip_database(const char *log_dbname)
|
||||||
producing USE statements by corresponding log event print-functions.
|
producing USE statements by corresponding log event print-functions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void print_use_stmt(PRINT_EVENT_INFO* pinfo, const char* db, size_t db_len)
|
static void
|
||||||
|
print_use_stmt(PRINT_EVENT_INFO* pinfo, const Query_log_event *ev)
|
||||||
{
|
{
|
||||||
|
const char* db= ev->db;
|
||||||
|
const size_t db_len= ev->db_len;
|
||||||
|
|
||||||
// pinfo->db is the current db.
|
// pinfo->db is the current db.
|
||||||
// If current db is the same as required db, do nothing.
|
// If current db is the same as required db, do nothing.
|
||||||
if (!db || !memcmp(pinfo->db, db, db_len + 1))
|
if ((ev->flags & LOG_EVENT_SUPPRESS_USE_F) || !db ||
|
||||||
|
!memcmp(pinfo->db, db, db_len + 1))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Current db and required db are different.
|
// Current db and required db are different.
|
||||||
|
@ -779,7 +784,7 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
|
||||||
Query_log_event *qe= (Query_log_event*)ev;
|
Query_log_event *qe= (Query_log_event*)ev;
|
||||||
if (!qe->is_trans_keyword() && shall_skip_database(qe->db))
|
if (!qe->is_trans_keyword() && shall_skip_database(qe->db))
|
||||||
goto end;
|
goto end;
|
||||||
print_use_stmt(print_event_info, qe->db, qe->db_len);
|
print_use_stmt(print_event_info, qe);
|
||||||
if (opt_base64_output_mode == BASE64_OUTPUT_ALWAYS)
|
if (opt_base64_output_mode == BASE64_OUTPUT_ALWAYS)
|
||||||
{
|
{
|
||||||
if ((retval= write_event_header_and_base64(ev, result_file,
|
if ((retval= write_event_header_and_base64(ev, result_file,
|
||||||
|
@ -912,7 +917,7 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
|
||||||
|
|
||||||
if (!shall_skip_database(exlq->db))
|
if (!shall_skip_database(exlq->db))
|
||||||
{
|
{
|
||||||
print_use_stmt(print_event_info, exlq->db, exlq->db_len);
|
print_use_stmt(print_event_info, exlq);
|
||||||
if (fname)
|
if (fname)
|
||||||
{
|
{
|
||||||
convert_path_to_forward_slashes(fname);
|
convert_path_to_forward_slashes(fname);
|
||||||
|
@ -1491,7 +1496,7 @@ static int parse_args(int *argc, char*** argv)
|
||||||
*/
|
*/
|
||||||
static Exit_status safe_connect()
|
static Exit_status safe_connect()
|
||||||
{
|
{
|
||||||
/* Close and old connections to MySQL */
|
/* Close any old connections to MySQL */
|
||||||
if (mysql)
|
if (mysql)
|
||||||
mysql_close(mysql);
|
mysql_close(mysql);
|
||||||
|
|
||||||
|
|
85
mysql-test/r/mysqlbinlog-innodb.result
Normal file
85
mysql-test/r/mysqlbinlog-innodb.result
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
SET TIMESTAMP=1000000000;
|
||||||
|
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=innodb;
|
||||||
|
CREATE DATABASE test2;
|
||||||
|
RESET MASTER;
|
||||||
|
USE test2;
|
||||||
|
BEGIN;
|
||||||
|
USE test;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
USE test2;
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
USE test;
|
||||||
|
INSERT INTO t1 VALUES (2);
|
||||||
|
USE test2;
|
||||||
|
COMMIT;
|
||||||
|
USE test;
|
||||||
|
SELECT * FROM t1 ORDER BY a;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
FLUSH LOGS;
|
||||||
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
|
DELIMITER /*!*/;
|
||||||
|
ROLLBACK/*!*/;
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
SET @@session.pseudo_thread_id=999999999/*!*/;
|
||||||
|
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/*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
use test/*!*/;
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
INSERT INTO t1 VALUES (1)
|
||||||
|
/*!*/;
|
||||||
|
COMMIT/*!*/;
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
INSERT INTO t1 VALUES (2)
|
||||||
|
/*!*/;
|
||||||
|
COMMIT/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
|
# End of log file
|
||||||
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
|
DELIMITER /*!*/;
|
||||||
|
ROLLBACK/*!*/;
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
SET @@session.pseudo_thread_id=999999999/*!*/;
|
||||||
|
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/*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
use foo/*!*/;
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
INSERT INTO t1 VALUES (1)
|
||||||
|
/*!*/;
|
||||||
|
COMMIT/*!*/;
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
INSERT INTO t1 VALUES (2)
|
||||||
|
/*!*/;
|
||||||
|
COMMIT/*!*/;
|
||||||
|
DELIMITER ;
|
||||||
|
# End of log file
|
||||||
|
ROLLBACK /* added by mysqlbinlog */;
|
||||||
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
|
DROP DATABASE test2;
|
||||||
|
DROP TABLE t1;
|
|
@ -159,7 +159,6 @@ SET TIMESTAMP=1000000000/*!*/;
|
||||||
COMMIT
|
COMMIT
|
||||||
/*!*/;
|
/*!*/;
|
||||||
# at #
|
# at #
|
||||||
use new_test1/*!*/;
|
|
||||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
BEGIN
|
BEGIN
|
||||||
|
@ -354,7 +353,6 @@ SET TIMESTAMP=1000000000/*!*/;
|
||||||
COMMIT
|
COMMIT
|
||||||
/*!*/;
|
/*!*/;
|
||||||
# at #
|
# at #
|
||||||
use new_test1/*!*/;
|
|
||||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
31
mysql-test/t/mysqlbinlog-innodb.test
Normal file
31
mysql-test/t/mysqlbinlog-innodb.test
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
-- source include/have_binlog_format_statement.inc
|
||||||
|
-- source include/have_log_bin.inc
|
||||||
|
-- source include/have_innodb.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# MBug#702303: Spurious `use` statements in output from mysqlbinlog --rewrite-db="a->b"
|
||||||
|
#
|
||||||
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||||
|
SET TIMESTAMP=1000000000;
|
||||||
|
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=innodb;
|
||||||
|
CREATE DATABASE test2;
|
||||||
|
|
||||||
|
RESET MASTER;
|
||||||
|
USE test2;
|
||||||
|
BEGIN;
|
||||||
|
USE test;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
USE test2;
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
USE test;
|
||||||
|
INSERT INTO t1 VALUES (2);
|
||||||
|
USE test2;
|
||||||
|
COMMIT;
|
||||||
|
USE test;
|
||||||
|
SELECT * FROM t1 ORDER BY a;
|
||||||
|
FLUSH LOGS;
|
||||||
|
--exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 --short-form
|
||||||
|
--exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 --short-form --rewrite-db="test->foo" --rewrite-db="test2->bar"
|
||||||
|
DROP DATABASE test2;
|
||||||
|
DROP TABLE t1;
|
Loading…
Reference in a new issue