1
0
mirror of https://github.com/MariaDB/server.git synced 2026-01-06 05:22:24 +03:00

MDEV-23842 Atomic RENAME TABLE

- Major rewrite of ddl_log.cc and ddl_log.h
  - ddl_log.cc described in the beginning how the recovery works.
  - ddl_log.log has unique signature and is dynamic. It's easy to
    add more information to the header and other ddl blocks while still
    being able to execute old ddl entries.
  - IO_SIZE for ddl blocks is now dynamic. Can be changed without affecting
    recovery of old logs.
  - Code is more modular and is now usable outside of partition handling.
  - Renamed log file to dll_recovery.log and added option --log-ddl-recovery
    to allow one to specify the path & filename.
- Added ddl_log_entry_phase[], number of phases for each DDL action,
  which allowed me to greatly simply set_global_from_ddl_log_entry()
- Changed how strings are stored in log entries, which allows us to
  store much more information in a log entry.
- ddl log is now always created at start and deleted on normal shutdown.
  This simplices things notable.
- Added probes debug_crash_here() and debug_simulate_error() to simply
  crash testing and allow crash after a given number of times a probe
  is executed. See comments in debug_sync.cc and rename_table.test for
  how this can be used.
- Reverting failed table and view renames is done trough the ddl log.
  This ensures that the ddl log is tested also outside of recovery.
- Added helper function 'handler::needs_lower_case_filenames()'
- Extend binary log with Q_XID events. ddl log handling is using this
  to check if a ddl log entry was logged to the binary log (if yes,
  it will be deleted from the log during ddl_log_close_binlogged_events()
- If a DDL entry fails 3 time, disable it. This is to ensure that if
  we have a crash in ddl recovery code the server will not get stuck
  in a forever crash-restart-crash loop.

mysqltest.cc changes:
- --die will now replace $variables with their values
- $error will contain the error of the last failed statement

storage engine changes:
- maria_rename() was changed to be more robust against crashes during
  rename.
This commit is contained in:
Monty
2020-10-15 02:25:57 +03:00
committed by Sergei Golubchik
parent 55c771b4f3
commit 47010ccffa
69 changed files with 4121 additions and 1403 deletions

View File

@@ -8096,9 +8096,10 @@ void handle_error(struct st_command *command,
const char *err_sqlstate, DYNAMIC_STRING *ds)
{
int i;
DBUG_ENTER("handle_error");
var_set_int("$errno", err_errno);
command->used_replace= 1;
if (command->require_file)
{
@@ -9694,10 +9695,28 @@ int main(int argc, char **argv)
report_or_die("Parsing is already enabled");
break;
case Q_DIE:
{
char message[160];
const char *msg;
DYNAMIC_STRING ds_echo;
if (command->first_argument[0])
{
/* Evaluate variables in the message */
init_dynamic_string(&ds_echo, "", command->query_len, 256);
do_eval(&ds_echo, command->first_argument, command->end, FALSE);
strmake(message, ds_echo.str, MY_MIN(sizeof(message)-1,
ds_echo.length));
dynstr_free(&ds_echo);
msg= message;
}
else
msg= "Explicit --die command executed";
/* Abort test with error code and error message */
die("%s", command->first_argument[0] ? command->first_argument :
"Explicit --die command executed");
die("%s", msg);
break;
}
case Q_EXIT:
/* Stop processing any more commands */
abort_flag= 1;

View File

@@ -641,7 +641,11 @@ int init_embedded_server(int argc, char **argv, char **groups)
}
}
ddl_log_execute_recovery();
if (ddl_log_execute_recovery() > 0)
{
mysql_server_end();
return 1;
}
mysql_embedded_init= 1;
return 0;
}

View File

@@ -970,7 +970,7 @@ AAAAAAAAAAAAAAAAAAAgrgJSFzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
# b1 61 62 6c 65 20 74 65 73 74 2e 74 31 20 28 69 64 |able test.t1 (id|
# c1 20 69 6e 74 20 6e 6f 74 20 6e 75 6c 6c 29 | int not null)|
#
# Event: Query thread_id=1 exec_time=0 error_code=0
# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0
SET TIMESTAMP=1375907364/*!*/;
SET @@session.pseudo_thread_id=1/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -994,7 +994,7 @@ create table test.t1 (id int not null)
# 116 6e 74 6f 20 74 65 73 74 2e 74 31 20 28 69 64 29 |nto test.t1 (id)|
# 126 20 76 61 6c 75 65 73 20 28 31 29 | values (1)|
#
# Event: Query thread_id=1 exec_time=0 error_code=0
# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0
SET TIMESTAMP=1375907366/*!*/;
insert into test.t1 (id) values (1)
/*!*/;
@@ -1009,7 +1009,7 @@ insert into test.t1 (id) values (1)
# 168 04 08 00 08 00 08 00 00 64 72 6f 70 20 74 61 62 |........drop tab|
# 178 6c 65 20 74 65 73 74 2e 74 31 |le test.t1|
#
# Event: Query thread_id=1 exec_time=0 error_code=0
# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0
SET TIMESTAMP=1375907368/*!*/;
drop table test.t1
/*!*/;
@@ -1053,7 +1053,7 @@ AAAAAAAAAAAAAAAAAAA/rQJSGzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
# b5 61 62 6c 65 20 74 65 73 74 2e 74 31 20 28 69 64 |able test.t1 (id|
# c5 20 69 6e 74 20 6e 6f 74 20 6e 75 6c 6c 29 | int not null)|
#
# Event: Query thread_id=1 exec_time=1 error_code=0
# Event: Query thread_id=1 exec_time=1 error_code=0 xid=0
SET TIMESTAMP=1375907141/*!*/;
SET @@session.pseudo_thread_id=1/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -1077,7 +1077,7 @@ create table test.t1 (id int not null)
# 11e 6e 74 6f 20 74 65 73 74 2e 74 31 20 28 69 64 29 |nto test.t1 (id)|
# 12e 20 76 61 6c 75 65 73 20 28 31 29 | values (1)|
#
# Event: Query thread_id=1 exec_time=0 error_code=0
# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0
SET TIMESTAMP=1375907144/*!*/;
insert into test.t1 (id) values (1)
/*!*/;
@@ -1092,7 +1092,7 @@ insert into test.t1 (id) values (1)
# 174 04 08 00 08 00 08 00 00 64 72 6f 70 20 74 61 62 |........drop tab|
# 184 6c 65 20 74 65 73 74 2e 74 31 |le test.t1|
#
# Event: Query thread_id=1 exec_time=0 error_code=0
# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0
SET TIMESTAMP=1375907148/*!*/;
drop table test.t1
/*!*/;
@@ -1136,7 +1136,7 @@ AAAAAAAAAAAAAAAAAAAnrAJSHzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
# b9 61 62 6c 65 20 74 65 73 74 2e 74 31 20 28 69 64 |able test.t1 (id|
# c9 20 69 6e 74 20 6e 6f 74 20 6e 75 6c 6c 29 | int not null)|
#
# Event: Query thread_id=1 exec_time=0 error_code=0
# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0
SET TIMESTAMP=1375906879/*!*/;
SET @@session.pseudo_thread_id=1/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -1160,7 +1160,7 @@ create table test.t1 (id int not null)
# 126 6e 74 6f 20 74 65 73 74 2e 74 31 20 28 69 64 29 |nto test.t1 (id)|
# 136 20 76 61 6c 75 65 73 20 28 31 29 | values (1)|
#
# Event: Query thread_id=1 exec_time=0 error_code=0
# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0
SET TIMESTAMP=1375906891/*!*/;
insert into test.t1 (id) values (1)
/*!*/;
@@ -1175,7 +1175,7 @@ insert into test.t1 (id) values (1)
# 180 04 08 00 08 00 08 00 00 64 72 6f 70 20 74 61 62 |........drop tab|
# 190 6c 65 20 74 65 73 74 2e 74 31 |le test.t1|
#
# Event: Query thread_id=1 exec_time=0 error_code=0
# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0
SET TIMESTAMP=1375906901/*!*/;
drop table test.t1
/*!*/;
@@ -1219,7 +1219,7 @@ AAAAAAAAAAAAAAAAAABbsAJSEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
# ad 61 62 6c 65 20 74 65 73 74 2e 74 31 20 28 69 64 |able test.t1 (id|
# bd 20 69 6e 74 20 6e 6f 74 20 6e 75 6c 6c 29 | int not null)|
#
# Event: Query thread_id=1 exec_time=0 error_code=0
# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0
SET TIMESTAMP=1375907933/*!*/;
SET @@session.pseudo_thread_id=1/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -1243,7 +1243,7 @@ create table test.t1 (id int not null)
# 10e 6e 74 6f 20 74 65 73 74 2e 74 31 20 28 69 64 29 |nto test.t1 (id)|
# 11e 20 76 61 6c 75 65 73 20 28 31 29 | values (1)|
#
# Event: Query thread_id=1 exec_time=0 error_code=0
# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0
SET TIMESTAMP=1375907935/*!*/;
insert into test.t1 (id) values (1)
/*!*/;
@@ -1258,7 +1258,7 @@ insert into test.t1 (id) values (1)
# 15c 04 08 00 08 00 08 00 00 64 72 6f 70 20 74 61 62 |........drop tab|
# 16c 6c 65 20 74 65 73 74 2e 74 31 |le test.t1|
#
# Event: Query thread_id=1 exec_time=0 error_code=0
# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0
SET TIMESTAMP=1375907937/*!*/;
drop table test.t1
/*!*/;

View File

@@ -29,7 +29,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at 371
#<date> server id 1 end_log_pos 533 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 533 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=X/*!*/;
SET @@session.pseudo_thread_id=5/*!*/;
@@ -46,7 +46,7 @@ CREATE TABLE t1 (pk INT PRIMARY KEY, f1 INT, f2 INT, f3 TINYINT, f4 MEDIUMINT, f
#<date> server id 1 end_log_pos 575 CRC32 XXX GTID 0-1-2 ddl
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
# at 575
#<date> server id 1 end_log_pos 727 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 727 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
CREATE TABLE t2 (pk INT PRIMARY KEY, f1 INT, f2 INT, f3 INT, f4 INT, f5 MEDIUMINT, f6 INT, f7 INT, f8 char(1))
/*!*/;
@@ -75,7 +75,7 @@ START TRANSACTION
### @9='' /* STRING(1) meta=65025 nullable=1 is_null=0 */
# Number of rows: 1
# at 967
#<date> server id 1 end_log_pos 1040 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1040 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -104,7 +104,7 @@ START TRANSACTION
### @9=NULL /* STRING(1) meta=65025 nullable=1 is_null=1 */
# Number of rows: 1
# at 1281
#<date> server id 1 end_log_pos 1354 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1354 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -133,7 +133,7 @@ START TRANSACTION
### @9='A' /* STRING(1) meta=65025 nullable=1 is_null=0 */
# Number of rows: 1
# at 1596
#<date> server id 1 end_log_pos 1669 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1669 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -162,7 +162,7 @@ START TRANSACTION
### @9='A' /* STRING(1) meta=65025 nullable=1 is_null=0 */
# Number of rows: 1
# at 1909
#<date> server id 1 end_log_pos 1982 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1982 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -224,7 +224,7 @@ START TRANSACTION
### @9='A' /* STRING(1) meta=65025 nullable=1 is_null=0 */
# Number of rows: 4
# at 2225
#<date> server id 1 end_log_pos 2298 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 2298 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -305,7 +305,7 @@ START TRANSACTION
### @9='A' /* STRING(1) meta=65025 nullable=1 is_null=0 */
# Number of rows: 3
# at 2561
#<date> server id 1 end_log_pos 2634 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 2634 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -367,7 +367,7 @@ START TRANSACTION
### @9='A' /* STRING(1) meta=65025 nullable=1 is_null=0 */
# Number of rows: 4
# at 2861
#<date> server id 1 end_log_pos 2934 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 2934 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -429,7 +429,7 @@ START TRANSACTION
### @9='A' /* STRING(1) meta=65025 nullable=1 is_null=0 */
# Number of rows: 4
# at 3154
#<date> server id 1 end_log_pos 3227 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 3227 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;

View File

@@ -29,7 +29,7 @@ DELETE FROM t2;
FLUSH BINARY LOGS;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /\d{6} *\d*:\d\d:\d\d/<date>/ /Start:.*at startup/Start: xxx/ /SET TIMESTAMP=\d*/SET TIMESTAMP=X/ /exec_time=\d*/exec_time=x/ /mapped to number \d*/mapped to number num/ /CRC32 0x[0-9a-f]+/CRC32 XXX/ /@@session.sql_mode=\d+/@@session.sql_mode=#/ /collation_server=\d+/collation_server=#/
--replace_regex /\d{6} *\d*:\d\d:\d\d/<date>/ /Start:.*at startup/Start: xxx/ /SET TIMESTAMP=\d*/SET TIMESTAMP=X/ /exec_time=\d*/exec_time=x/ /mapped to number \d*/mapped to number num/ /CRC32 0x[0-9a-f]+/CRC32 XXX/ /@@session.sql_mode=\d+/@@session.sql_mode=#/ /collation_server=\d+/collation_server=#/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --verbose --verbose --base64-output=DECODE-ROWS $datadir/$binlog
--echo

View File

@@ -27,7 +27,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at 371
#<date> server id 1 end_log_pos 555 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 555 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=X/*!*/;
SET @@session.pseudo_thread_id=5/*!*/;
@@ -44,7 +44,7 @@ CREATE TABLE t1 (pk INT PRIMARY KEY, f1 INT, f2 INT, f3 TINYINT, f4 MEDIUMINT, f
#<date> server id 1 end_log_pos 597 CRC32 XXX GTID 0-1-2 ddl
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
# at 597
#<date> server id 1 end_log_pos 774 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 774 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
CREATE TABLE t2 (pk INT PRIMARY KEY, f1 INT, f2 INT, f3 INT, f4 INT, f5 MEDIUMINT, f6 INT, f7 INT, f8 char(1))
/*!*/;
@@ -73,7 +73,7 @@ START TRANSACTION
### @9='' /* STRING(1) meta=65025 nullable=1 is_null=0 */
# Number of rows: 1
# at 1015
#<date> server id 1 end_log_pos 1088 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1088 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -102,7 +102,7 @@ START TRANSACTION
### @9=NULL /* STRING(1) meta=65025 nullable=1 is_null=1 */
# Number of rows: 1
# at 1330
#<date> server id 1 end_log_pos 1403 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1403 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -131,7 +131,7 @@ START TRANSACTION
### @9='A' /* STRING(1) meta=65025 nullable=1 is_null=0 */
# Number of rows: 1
# at 1646
#<date> server id 1 end_log_pos 1719 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1719 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -160,7 +160,7 @@ START TRANSACTION
### @9='A' /* STRING(1) meta=65025 nullable=1 is_null=0 */
# Number of rows: 1
# at 1962
#<date> server id 1 end_log_pos 2035 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 2035 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -222,7 +222,7 @@ START TRANSACTION
### @9='A' /* STRING(1) meta=65025 nullable=1 is_null=0 */
# Number of rows: 4
# at 2354
#<date> server id 1 end_log_pos 2427 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 2427 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -255,7 +255,7 @@ START TRANSACTION
### @5=5 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at 2657
#<date> server id 1 end_log_pos 2730 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 2730 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -285,7 +285,7 @@ START TRANSACTION
### @1=13 /* INT meta=0 nullable=0 is_null=0 */
# Number of rows: 4
# at 2919
#<date> server id 1 end_log_pos 2992 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 2992 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -315,7 +315,7 @@ START TRANSACTION
### @1=13 /* INT meta=0 nullable=0 is_null=0 */
# Number of rows: 4
# at 3181
#<date> server id 1 end_log_pos 3254 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 3254 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -394,7 +394,7 @@ START TRANSACTION
### @3=X /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
# Number of rows: 1
# at POS
#<date> server id 1 end_log_pos END_LOG_POS CRC32 XXX Query thread_id=TID exec_time=x error_code=0
#<date> server id 1 end_log_pos END_LOG_POS CRC32 XXX Query thread_id=TID exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
SET @@session.pseudo_thread_id=TID/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;

View File

@@ -28,7 +28,7 @@ DELETE FROM t2;
FLUSH BINARY LOGS;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /\d{6} *\d*:\d\d:\d\d/<date>/ /Start:.*at startup/Start: xxx/ /SET TIMESTAMP=\d*/SET TIMESTAMP=X/ /exec_time=\d*/exec_time=x/ /mapped to number \d*/mapped to number num/ /CRC32 0x[0-9a-f]+/CRC32 XXX/ /@@session.sql_mode=\d+/@@session.sql_mode=#/ /collation_server=\d+/collation_server=#/
--replace_regex /\d{6} *\d*:\d\d:\d\d/<date>/ /Start:.*at startup/Start: xxx/ /SET TIMESTAMP=\d*/SET TIMESTAMP=X/ /exec_time=\d*/exec_time=x/ /mapped to number \d*/mapped to number num/ /CRC32 0x[0-9a-f]+/CRC32 XXX/ /@@session.sql_mode=\d+/@@session.sql_mode=#/ /collation_server=\d+/collation_server=#/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --verbose --verbose --base64-output=DECODE-ROWS $datadir/$binlog
DROP TABLE t1,t2;
@@ -95,7 +95,7 @@ UPDATE t1 t1 INNER JOIN t2 t2 ON t1.ref_id = t2.id
FLUSH BINARY LOGS;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /table id \d*/table id TID/ /mapped to number \d*/mapped to number TID/ /at \d*/at POS/ /end_log_pos \d*/end_log_pos END_LOG_POS/ /GTID \d*-\d*-\d*/GTID D-S-N/ /\d{6} *\d*:\d\d:\d\d/<date>/ /SET TIMESTAMP=\d*/SET TIMESTAMP=X/ /exec_time=\d*/exec_time=x/ /@3=\d*/@3=X/ /CRC32 0x[0-9a-f]+/CRC32 XXX/ /@@session.sql_mode=\d+/@@session.sql_mode=#/ /collation_server=\d+/collation_server=#/ /thread_id=\d*/thread_id=TID/
--replace_regex /table id \d*/table id TID/ /mapped to number \d*/mapped to number TID/ /at \d*/at POS/ /end_log_pos \d*/end_log_pos END_LOG_POS/ /GTID \d*-\d*-\d*/GTID D-S-N/ /\d{6} *\d*:\d\d:\d\d/<date>/ /SET TIMESTAMP=\d*/SET TIMESTAMP=X/ /exec_time=\d*/exec_time=x/ /@3=\d*/@3=X/ /CRC32 0x[0-9a-f]+/CRC32 XXX/ /@@session.sql_mode=\d+/@@session.sql_mode=#/ /collation_server=\d+/collation_server=#/ /thread_id=\d*/thread_id=TID/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --verbose --verbose --base64-output=DECODE-ROWS $datadir/$binlog --start-position=$binlog_pos --stop-position=$binlog_end
DROP TABLE t1,t2;

View File

@@ -29,7 +29,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at 371
#<date> server id 1 end_log_pos 533 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 533 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=X/*!*/;
SET @@session.pseudo_thread_id=5/*!*/;
@@ -46,7 +46,7 @@ CREATE TABLE t1 (pk INT PRIMARY KEY, f1 INT, f2 INT, f3 TINYINT, f4 MEDIUMINT, f
#<date> server id 1 end_log_pos 575 CRC32 XXX GTID 0-1-2 ddl
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
# at 575
#<date> server id 1 end_log_pos 727 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 727 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
CREATE TABLE t2 (pk INT PRIMARY KEY, f1 INT, f2 INT, f3 INT, f4 INT, f5 MEDIUMINT, f6 INT, f7 INT, f8 char(1))
/*!*/;
@@ -56,12 +56,12 @@ CREATE TABLE t2 (pk INT PRIMARY KEY, f1 INT, f2 INT, f3 INT, f4 INT, f5 MEDIUMIN
START TRANSACTION
/*!*/;
# at 769
#<date> server id 1 end_log_pos 897 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 897 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
INSERT INTO t1 VALUES (10, 1, 2, 3, 4, 5, 6, 7, "")
/*!*/;
# at 897
#<date> server id 1 end_log_pos 970 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 970 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -71,12 +71,12 @@ COMMIT
START TRANSACTION
/*!*/;
# at 1012
#<date> server id 1 end_log_pos 1140 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1140 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
INSERT INTO t1 VALUES (11, 1, 2, 3, 4, 5, 6, 7, NULL)
/*!*/;
# at 1140
#<date> server id 1 end_log_pos 1213 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1213 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -86,12 +86,12 @@ COMMIT
START TRANSACTION
/*!*/;
# at 1255
#<date> server id 1 end_log_pos 1385 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1385 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
INSERT INTO t1 VALUES (12, 1, 2, 3, NULL, 5, 6, 7, "A")
/*!*/;
# at 1385
#<date> server id 1 end_log_pos 1458 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1458 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -101,12 +101,12 @@ COMMIT
START TRANSACTION
/*!*/;
# at 1500
#<date> server id 1 end_log_pos 1627 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1627 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
INSERT INTO t1 VALUES (13, 1, 2, 3, 0, 5, 6, 7, "A")
/*!*/;
# at 1627
#<date> server id 1 end_log_pos 1700 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1700 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -116,12 +116,12 @@ COMMIT
START TRANSACTION
/*!*/;
# at 1742
#<date> server id 1 end_log_pos 1850 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1850 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
INSERT INTO t2 SELECT * FROM t1
/*!*/;
# at 1850
#<date> server id 1 end_log_pos 1923 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 1923 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -131,12 +131,12 @@ COMMIT
START TRANSACTION
/*!*/;
# at 1965
#<date> server id 1 end_log_pos 2082 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 2082 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
UPDATE t2 SET f4=5 WHERE f4>0 or f4 is NULL
/*!*/;
# at 2082
#<date> server id 1 end_log_pos 2155 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 2155 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -146,12 +146,12 @@ COMMIT
START TRANSACTION
/*!*/;
# at 2197
#<date> server id 1 end_log_pos 2288 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 2288 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
DELETE FROM t1
/*!*/;
# at 2288
#<date> server id 1 end_log_pos 2361 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 2361 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;
@@ -161,12 +161,12 @@ COMMIT
START TRANSACTION
/*!*/;
# at 2403
#<date> server id 1 end_log_pos 2494 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 2494 CRC32 XXX Query_compressed thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
DELETE FROM t2
/*!*/;
# at 2494
#<date> server id 1 end_log_pos 2567 CRC32 XXX Query thread_id=5 exec_time=x error_code=0
#<date> server id 1 end_log_pos 2567 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
COMMIT
/*!*/;

View File

@@ -29,7 +29,7 @@ DELETE FROM t2;
FLUSH BINARY LOGS;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /\d{6} *\d*:\d\d:\d\d/<date>/ /Start:.*at startup/Start: xxx/ /SET TIMESTAMP=\d*/SET TIMESTAMP=X/ /exec_time=\d*/exec_time=x/ /mapped to number \d*/mapped to number num/ /CRC32 0x[0-9a-f]+/CRC32 XXX/ /@@session.sql_mode=\d+/@@session.sql_mode=#/ /collation_server=\d+/collation_server=#/
--replace_regex /\d{6} *\d*:\d\d:\d\d/<date>/ /Start:.*at startup/Start: xxx/ /SET TIMESTAMP=\d*/SET TIMESTAMP=X/ /exec_time=\d*/exec_time=x/ /mapped to number \d*/mapped to number num/ /CRC32 0x[0-9a-f]+/CRC32 XXX/ /@@session.sql_mode=\d+/@@session.sql_mode=#/ /collation_server=\d+/collation_server=#/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --verbose --verbose --base64-output=DECODE-ROWS $datadir/$binlog
--echo

View File

@@ -476,6 +476,9 @@ The following specify which files/extra groups are read (specified before remain
ALWAYS use row-based binary logging, the security issues
do not exist and the binary logging cannot break, so you
can safely set this to TRUE
--log-ddl-recovery=name
Path to file used for recovery of DDL statements after a
crash
--log-disabled-statements=name
Don't log certain types of statements to general log. Any
combination of: slave, sp
@@ -1581,6 +1584,7 @@ log-bin-compress FALSE
log-bin-compress-min-len 256
log-bin-index (No default value)
log-bin-trust-function-creators FALSE
log-ddl-recovery ddl_recovery.log
log-disabled-statements sp
log-error
log-isam myisam.log

View File

@@ -175,6 +175,7 @@ our $opt_vs_config = $ENV{'MTR_VS_CONFIG'};
my @DEFAULT_SUITES= qw(
main-
archive-
atomic-
binlog-
binlog_encryption-
client-
@@ -4356,6 +4357,7 @@ sub extract_warning_lines ($$) {
qr/Slave SQL thread retried transaction/,
qr/Slave \(additional info\)/,
qr/Incorrect information in file/,
qr/Simulating error for/,
qr/Slave I\/O: Get master SERVER_ID failed with error:.*/,
qr/Slave I\/O: Get master clock failed with error:.*/,
qr/Slave I\/O: Get master COLLATION_SERVER failed with error:.*/,

View File

@@ -0,0 +1,52 @@
create database test2;
#
# Testing rename error in different places
#
create table t1 (a int);
create table T2 (b int);
create table t3 (c int);
create table T4 (d int);
insert into t1 values(1);
insert into T2 values(2);
insert into t3 values(3);
insert into T4 values(4);
create temporary table tmp1 (a int);
create temporary table tmp2 (b int);
create temporary table tmp3 (c int);
create temporary table tmp4 (d int);
insert into tmp1 values(11);
insert into tmp2 values(22);
insert into tmp3 values(33);
insert into tmp4 values(44);
rename table t3 to T4, t1 to t5, T2 to t1, t5 to T2;
ERROR 42S01: Table 'T4' already exists
rename table t1 to t5, t3 to T4, T2 to t1, t5 to T2;
ERROR 42S01: Table 'T4' already exists
rename table t1 to t5, T2 to t1, t3 to T4, t5 to T2;
ERROR 42S01: Table 'T4' already exists
rename table t1 to t5, T2 to t1, t5 to T2, t3 to T4;
ERROR 42S01: Table 'T4' already exists
# Try failed rename using two databases
rename table test.t1 to test2.t5, test.T2 to test.t1, t5 to test.T2;
ERROR 42S02: Table 'test.t5' doesn't exist
select t1.a+T2.b+t3.c+T4.d from t1,T2,t3,T4;
t1.a+T2.b+t3.c+T4.d
10
select * from t5;
ERROR 42S02: Table 'test.t5' doesn't exist
T2.MYD
T2.MYI
T2.frm
T4.MYD
T4.MYI
T4.frm
db.opt
t1.MYD
t1.MYI
t1.frm
t3.MYD
t3.MYI
t3.frm
# Cleanup
drop table t1,T2,t3,T4;
drop database test2;

View File

@@ -0,0 +1,54 @@
#
# This tests tries to cover renames with tables in different cases to ensure
# that lower case table names works
#
create database test2;
let $mysqld_datadir= `select @@datadir`;
--echo #
--echo # Testing rename error in different places
--echo #
create table t1 (a int);
create table T2 (b int);
create table t3 (c int);
create table T4 (d int);
insert into t1 values(1);
insert into T2 values(2);
insert into t3 values(3);
insert into T4 values(4);
create temporary table tmp1 (a int);
create temporary table tmp2 (b int);
create temporary table tmp3 (c int);
create temporary table tmp4 (d int);
insert into tmp1 values(11);
insert into tmp2 values(22);
insert into tmp3 values(33);
insert into tmp4 values(44);
--error ER_TABLE_EXISTS_ERROR
rename table t3 to T4, t1 to t5, T2 to t1, t5 to T2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t3 to T4, T2 to t1, t5 to T2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, T2 to t1, t3 to T4, t5 to T2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, T2 to t1, t5 to T2, t3 to T4;
--echo # Try failed rename using two databases
--error ER_NO_SUCH_TABLE
rename table test.t1 to test2.t5, test.T2 to test.t1, t5 to test.T2;
select t1.a+T2.b+t3.c+T4.d from t1,T2,t3,T4;
--error ER_NO_SUCH_TABLE
select * from t5;
--list_files $mysqld_datadir/test
--echo # Cleanup
drop table t1,T2,t3,T4;
drop database test2;

View File

@@ -0,0 +1,157 @@
create database test2;
#
# Testing rename error in different places
#
create table t1 (a int);
create table t2 (b int);
create table t3 (c int);
create table t4 (d int);
insert into t1 values(1);
insert into t2 values(2);
insert into t3 values(3);
insert into t4 values(4);
create temporary table tmp1 (a int);
create temporary table tmp2 (b int);
create temporary table tmp3 (c int);
create temporary table tmp4 (d int);
insert into tmp1 values(11);
insert into tmp2 values(22);
insert into tmp3 values(33);
insert into tmp4 values(44);
rename table t3 to t4, t1 to t5, t2 to t1, t5 to t2;
ERROR 42S01: Table 't4' already exists
rename table t1 to t5, t3 to t4, t2 to t1, t5 to t2;
ERROR 42S01: Table 't4' already exists
rename table t1 to t5, t2 to t1, t3 to t4, t5 to t2;
ERROR 42S01: Table 't4' already exists
rename table t1 to t5, t2 to t1, t5 to t2, t3 to t4;
ERROR 42S01: Table 't4' already exists
# Try failed rename using two databases
rename table test.t1 to test2.t5, test.t2 to test.t1, t5 to test.t2;
ERROR 42S02: Table 'test.t5' doesn't exist
select t1.a+t2.b+t3.c+t4.d from t1,t2,t3,t4;
t1.a+t2.b+t3.c+t4.d
10
select * from t5;
ERROR 42S02: Table 'test.t5' doesn't exist
#
# Testing rename error in different places with temporary tables
#
rename table tmp3 to tmp4, tmp1 to t5, tmp2 to tmp1, t5 to tmp1;
ERROR 42S01: Table 'tmp4' already exists
rename table tmp1 to t5, tmp3 to tmp4, tmp2 to tmp1, t5 to tmp1;
ERROR 42S01: Table 'tmp4' already exists
rename table tmp1 to t5, tmp2 to tmp1, tmp3 to tmp4, t5 to tmp1;
ERROR 42S01: Table 'tmp4' already exists
rename table tmp1 to t5, tmp2 to tmp1, t5 to tmp1, tmp3 to tmp4;
ERROR 42S01: Table 'tmp1' already exists
select tmp1.a+tmp2.b+tmp3.c+tmp4.d from tmp1,tmp2,tmp3,tmp4;
tmp1.a+tmp2.b+tmp3.c+tmp4.d
110
select * from t5;
ERROR 42S02: Table 'test.t5' doesn't exist
#
# Testing combinations of rename normal and temporary tables
#
rename table t1 to t5, t2 to t1, t5 to t2, tmp3 to tmp4, tmp1 to t5, tmp2 to tmp1, t5 to tmp1;
ERROR 42S01: Table 'tmp4' already exists
rename table t1 to t5, t2 to t1, t5 to t2, tmp1 to t5, tmp3 to tmp4, tmp2 to tmp1, t5 to tmp1;
ERROR 42S01: Table 'tmp4' already exists
rename table t1 to t5, t2 to t1, t5 to t2, tmp1 to t5, tmp2 to tmp1, tmp3 to tmp4, t5 to tmp1;
ERROR 42S01: Table 'tmp4' already exists
rename table t1 to t5, t2 to t1, t5 to t2, tmp1 to t5, tmp2 to tmp1, t5 to tmp1, t3 to t4;
ERROR 42S01: Table 'tmp1' already exists
rename table t1 to t5, tmp2 to tmp5, t2 to t1, tmp2 to tmp1, t5 to t2, tmp5 to tmp1, t8 to t9;
ERROR 42S02: Table 'test.tmp2' doesn't exist
select t1.a+t2.b+t3.c+t4.d from t1,t2,t3,t4;
t1.a+t2.b+t3.c+t4.d
10
select tmp1.a+tmp2.b+tmp3.c+tmp4.d from tmp1,tmp2,tmp3,tmp4;
tmp1.a+tmp2.b+tmp3.c+tmp4.d
110
drop table tmp1,tmp2,tmp3,tmp4;
#
# Similar tests with triggers
#
create trigger t1_trg before insert on t1 for each row
begin
if isnull(new.a) then
set new.a:= 10;
end if;
end|
create trigger t2_trg before insert on t2 for each row
begin
if isnull(new.b) then
set new.b:= 100;
end if;
end|
create trigger t3_trg before insert on t3 for each row
begin
if isnull(new.c) then
set new.c:= 1000;
end if;
end|
rename table t3 to t4, t1 to t5, t2 to t1, t5 to t2;
ERROR 42S01: Table 't4' already exists
rename table t1 to t5, t3 to t4, t2 to t1, t5 to t2;
ERROR 42S01: Table 't4' already exists
rename table t1 to t5, t2 to t1, t3 to t4, t5 to t2;
ERROR 42S01: Table 't4' already exists
rename table t1 to t5, t2 to t1, t5 to t2, t3 to t4;
ERROR 42S01: Table 't4' already exists
# Test of move table between databases
rename table t4 to test2.t5, t2 to t4, test2.t5 to t2, t1 to test2.t6;
ERROR HY000: Trigger in wrong schema
show triggers;
Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
t1_trg INSERT t1 begin
if isnull(new.a) then
set new.a:= 10;
end if;
end BEFORE # STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
t2_trg INSERT t2 begin
if isnull(new.b) then
set new.b:= 100;
end if;
end BEFORE # STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
t3_trg INSERT t3 begin
if isnull(new.c) then
set new.c:= 1000;
end if;
end BEFORE # STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
select t1.a+t2.b+t3.c+t4.d from t1,t2,t3,t4;
t1.a+t2.b+t3.c+t4.d
10
insert into t1 values(null);
insert into t2 values(null);
insert into t3 values(null);
select (select sum(t1.a) from t1)+ (select sum(t2.b) from t2) + (select sum(t3.c) from t3)+ (select sum(t4.d) from t4);
(select sum(t1.a) from t1)+ (select sum(t2.b) from t2) + (select sum(t3.c) from t3)+ (select sum(t4.d) from t4)
1120
drop trigger t1_trg;
drop trigger t2_trg;
drop trigger t3_trg;
#
# Test with views
#
create view v1 as select * from t1;
create view v2 as select * from t2;
create view v3 as select * from t3;
create view v4 as select * from t4;
rename table v3 to v4, v1 to t5, v2 to v1, t5 to v2;
ERROR 42S01: Table 'v4' already exists
rename table v1 to t5, v3 to v4, v2 to v1, t5 to v2;
ERROR 42S01: Table 'v4' already exists
rename table v1 to t5, v2 to v1, v3 to v4, t5 to v2;
ERROR 42S01: Table 'v4' already exists
rename table v1 to t5, v2 to v1, t5 to v2, v3 to v4;
ERROR 42S01: Table 'v4' already exists
# Try failed rename using two databases
rename table test.v1 to test.v5, test.v2 to test.v1, test.v3 to test2.v2, non_existing_view to another_non_existing_view;
ERROR HY000: Changing schema from 'test' to 'test2' is not allowed
select (select sum(v1.a) from v1)+ (select sum(v2.b) from v2) + (select sum(v3.c) from v3)+ (select sum(v4.d) from v4);
(select sum(v1.a) from v1)+ (select sum(v2.b) from v2) + (select sum(v3.c) from v3)+ (select sum(v4.d) from v4)
1120
drop view v1,v2,v3,v4;
drop table t1, t2, t3, t4;
drop database test2;

View File

@@ -0,0 +1,171 @@
#
# This tests tries cover most of the recovery cases in
# DDL_LOG_RENAME_TABLE_ACTION and do_rename()
# This test does not intend to crash the server
# It's a complement to main.rename
#
create database test2;
--echo #
--echo # Testing rename error in different places
--echo #
create table t1 (a int);
create table t2 (b int);
create table t3 (c int);
create table t4 (d int);
insert into t1 values(1);
insert into t2 values(2);
insert into t3 values(3);
insert into t4 values(4);
create temporary table tmp1 (a int);
create temporary table tmp2 (b int);
create temporary table tmp3 (c int);
create temporary table tmp4 (d int);
insert into tmp1 values(11);
insert into tmp2 values(22);
insert into tmp3 values(33);
insert into tmp4 values(44);
--error ER_TABLE_EXISTS_ERROR
rename table t3 to t4, t1 to t5, t2 to t1, t5 to t2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t3 to t4, t2 to t1, t5 to t2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t3 to t4, t5 to t2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t5 to t2, t3 to t4;
--echo # Try failed rename using two databases
--error ER_NO_SUCH_TABLE
rename table test.t1 to test2.t5, test.t2 to test.t1, t5 to test.t2;
select t1.a+t2.b+t3.c+t4.d from t1,t2,t3,t4;
--error ER_NO_SUCH_TABLE
select * from t5;
--echo #
--echo # Testing rename error in different places with temporary tables
--echo #
--error ER_TABLE_EXISTS_ERROR
rename table tmp3 to tmp4, tmp1 to t5, tmp2 to tmp1, t5 to tmp1;
--error ER_TABLE_EXISTS_ERROR
rename table tmp1 to t5, tmp3 to tmp4, tmp2 to tmp1, t5 to tmp1;
--error ER_TABLE_EXISTS_ERROR
rename table tmp1 to t5, tmp2 to tmp1, tmp3 to tmp4, t5 to tmp1;
--error ER_TABLE_EXISTS_ERROR
rename table tmp1 to t5, tmp2 to tmp1, t5 to tmp1, tmp3 to tmp4;
select tmp1.a+tmp2.b+tmp3.c+tmp4.d from tmp1,tmp2,tmp3,tmp4;
--error ER_NO_SUCH_TABLE
select * from t5;
--echo #
--echo # Testing combinations of rename normal and temporary tables
--echo #
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t5 to t2, tmp3 to tmp4, tmp1 to t5, tmp2 to tmp1, t5 to tmp1;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t5 to t2, tmp1 to t5, tmp3 to tmp4, tmp2 to tmp1, t5 to tmp1;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t5 to t2, tmp1 to t5, tmp2 to tmp1, tmp3 to tmp4, t5 to tmp1;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t5 to t2, tmp1 to t5, tmp2 to tmp1, t5 to tmp1, t3 to t4;
--error ER_NO_SUCH_TABLE
rename table t1 to t5, tmp2 to tmp5, t2 to t1, tmp2 to tmp1, t5 to t2, tmp5 to tmp1, t8 to t9;
select t1.a+t2.b+t3.c+t4.d from t1,t2,t3,t4;
select tmp1.a+tmp2.b+tmp3.c+tmp4.d from tmp1,tmp2,tmp3,tmp4;
drop table tmp1,tmp2,tmp3,tmp4;
--echo #
--echo # Similar tests with triggers
--echo #
delimiter |;
create trigger t1_trg before insert on t1 for each row
begin
if isnull(new.a) then
set new.a:= 10;
end if;
end|
create trigger t2_trg before insert on t2 for each row
begin
if isnull(new.b) then
set new.b:= 100;
end if;
end|
create trigger t3_trg before insert on t3 for each row
begin
if isnull(new.c) then
set new.c:= 1000;
end if;
end|
delimiter ;|
--error ER_TABLE_EXISTS_ERROR
rename table t3 to t4, t1 to t5, t2 to t1, t5 to t2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t3 to t4, t2 to t1, t5 to t2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t3 to t4, t5 to t2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t5 to t2, t3 to t4;
--echo # Test of move table between databases
--error ER_TRG_IN_WRONG_SCHEMA
rename table t4 to test2.t5, t2 to t4, test2.t5 to t2, t1 to test2.t6;
--replace_column 6 #
show triggers;
select t1.a+t2.b+t3.c+t4.d from t1,t2,t3,t4;
insert into t1 values(null);
insert into t2 values(null);
insert into t3 values(null);
select (select sum(t1.a) from t1)+ (select sum(t2.b) from t2) + (select sum(t3.c) from t3)+ (select sum(t4.d) from t4);
drop trigger t1_trg;
drop trigger t2_trg;
drop trigger t3_trg;
--echo #
--echo # Test with views
--echo #
create view v1 as select * from t1;
create view v2 as select * from t2;
create view v3 as select * from t3;
create view v4 as select * from t4;
--error ER_TABLE_EXISTS_ERROR
rename table v3 to v4, v1 to t5, v2 to v1, t5 to v2;
--error ER_TABLE_EXISTS_ERROR
rename table v1 to t5, v3 to v4, v2 to v1, t5 to v2;
--error ER_TABLE_EXISTS_ERROR
rename table v1 to t5, v2 to v1, v3 to v4, t5 to v2;
--error ER_TABLE_EXISTS_ERROR
rename table v1 to t5, v2 to v1, t5 to v2, v3 to v4;
--echo # Try failed rename using two databases
--error ER_FORBID_SCHEMA_CHANGE
rename table test.v1 to test.v5, test.v2 to test.v1, test.v3 to test2.v2, non_existing_view to another_non_existing_view;
select (select sum(v1.a) from v1)+ (select sum(v2.b) from v2) + (select sum(v3.c) from v3)+ (select sum(v4.d) from v4);
drop view v1,v2,v3,v4;
#
# Clean up
#
drop table t1, t2, t3, t4;
drop database test2;

View File

@@ -0,0 +1,150 @@
"engine: myisam crash point: definition_file_after_create position: 1"
"engine: myisam crash point: definition_file_after_create position: 2"
"engine: myisam crash point: definition_file_after_create position: 3"
"engine: myisam crash point: definition_file_after_create position: 4"
"engine: myisam crash point: definition_file_after_create position: 5"
"engine: myisam crash point: ddl_log_rename_before_rename_table position: 1"
"engine: myisam crash point: ddl_log_rename_before_rename_table position: 2"
"engine: myisam crash point: ddl_log_rename_before_rename_table position: 3"
"engine: myisam crash point: ddl_log_rename_before_rename_table position: 4"
"engine: myisam crash point: ddl_log_rename_before_rename_table position: 5"
"engine: myisam crash point: ddl_log_rename_before_phase_trigger position: 1"
"engine: myisam crash point: ddl_log_rename_before_phase_trigger position: 2"
"engine: myisam crash point: ddl_log_rename_before_phase_trigger position: 3"
"engine: myisam crash point: ddl_log_rename_before_phase_trigger position: 4"
"engine: myisam crash point: ddl_log_rename_before_phase_trigger position: 5"
"engine: myisam crash point: ddl_log_rename_before_rename_trigger position: 1"
"engine: myisam crash point: ddl_log_rename_before_rename_trigger position: 2"
"engine: myisam crash point: ddl_log_rename_before_rename_trigger position: 3"
"engine: myisam crash point: ddl_log_rename_before_rename_trigger position: 4"
"engine: myisam crash point: ddl_log_rename_before_rename_trigger position: 5"
"engine: myisam crash point: ddl_log_rename_before_stat_tables position: 1"
"engine: myisam crash point: ddl_log_rename_before_stat_tables position: 2"
"engine: myisam crash point: ddl_log_rename_before_stat_tables position: 3"
"engine: myisam crash point: ddl_log_rename_before_stat_tables position: 4"
"engine: myisam crash point: ddl_log_rename_before_stat_tables position: 5"
"engine: myisam crash point: ddl_log_rename_after_stat_tables position: 1"
"engine: myisam crash point: ddl_log_rename_after_stat_tables position: 2"
"engine: myisam crash point: ddl_log_rename_after_stat_tables position: 3"
"engine: myisam crash point: ddl_log_rename_after_stat_tables position: 4"
"engine: myisam crash point: ddl_log_rename_after_stat_tables position: 5"
"engine: aria crash point: definition_file_after_create position: 1"
"engine: aria crash point: definition_file_after_create position: 2"
"engine: aria crash point: definition_file_after_create position: 3"
"engine: aria crash point: definition_file_after_create position: 4"
"engine: aria crash point: definition_file_after_create position: 5"
"engine: aria crash point: ddl_log_rename_before_rename_table position: 1"
"engine: aria crash point: ddl_log_rename_before_rename_table position: 2"
"engine: aria crash point: ddl_log_rename_before_rename_table position: 3"
"engine: aria crash point: ddl_log_rename_before_rename_table position: 4"
"engine: aria crash point: ddl_log_rename_before_rename_table position: 5"
"engine: aria crash point: ddl_log_rename_before_phase_trigger position: 1"
"engine: aria crash point: ddl_log_rename_before_phase_trigger position: 2"
"engine: aria crash point: ddl_log_rename_before_phase_trigger position: 3"
"engine: aria crash point: ddl_log_rename_before_phase_trigger position: 4"
"engine: aria crash point: ddl_log_rename_before_phase_trigger position: 5"
"engine: aria crash point: ddl_log_rename_before_rename_trigger position: 1"
"engine: aria crash point: ddl_log_rename_before_rename_trigger position: 2"
"engine: aria crash point: ddl_log_rename_before_rename_trigger position: 3"
"engine: aria crash point: ddl_log_rename_before_rename_trigger position: 4"
"engine: aria crash point: ddl_log_rename_before_rename_trigger position: 5"
"engine: aria crash point: ddl_log_rename_before_stat_tables position: 1"
"engine: aria crash point: ddl_log_rename_before_stat_tables position: 2"
"engine: aria crash point: ddl_log_rename_before_stat_tables position: 3"
"engine: aria crash point: ddl_log_rename_before_stat_tables position: 4"
"engine: aria crash point: ddl_log_rename_before_stat_tables position: 5"
"engine: aria crash point: ddl_log_rename_after_stat_tables position: 1"
"engine: aria crash point: ddl_log_rename_after_stat_tables position: 2"
"engine: aria crash point: ddl_log_rename_after_stat_tables position: 3"
"engine: aria crash point: ddl_log_rename_after_stat_tables position: 4"
"engine: aria crash point: ddl_log_rename_after_stat_tables position: 5"
"engine: aria_notrans crash point: definition_file_after_create position: 1"
"engine: aria_notrans crash point: definition_file_after_create position: 2"
"engine: aria_notrans crash point: definition_file_after_create position: 3"
"engine: aria_notrans crash point: definition_file_after_create position: 4"
"engine: aria_notrans crash point: definition_file_after_create position: 5"
"engine: aria_notrans crash point: ddl_log_rename_before_rename_table position: 1"
"engine: aria_notrans crash point: ddl_log_rename_before_rename_table position: 2"
"engine: aria_notrans crash point: ddl_log_rename_before_rename_table position: 3"
"engine: aria_notrans crash point: ddl_log_rename_before_rename_table position: 4"
"engine: aria_notrans crash point: ddl_log_rename_before_rename_table position: 5"
"engine: aria_notrans crash point: ddl_log_rename_before_phase_trigger position: 1"
"engine: aria_notrans crash point: ddl_log_rename_before_phase_trigger position: 2"
"engine: aria_notrans crash point: ddl_log_rename_before_phase_trigger position: 3"
"engine: aria_notrans crash point: ddl_log_rename_before_phase_trigger position: 4"
"engine: aria_notrans crash point: ddl_log_rename_before_phase_trigger position: 5"
"engine: aria_notrans crash point: ddl_log_rename_before_rename_trigger position: 1"
"engine: aria_notrans crash point: ddl_log_rename_before_rename_trigger position: 2"
"engine: aria_notrans crash point: ddl_log_rename_before_rename_trigger position: 3"
"engine: aria_notrans crash point: ddl_log_rename_before_rename_trigger position: 4"
"engine: aria_notrans crash point: ddl_log_rename_before_rename_trigger position: 5"
"engine: aria_notrans crash point: ddl_log_rename_before_stat_tables position: 1"
"engine: aria_notrans crash point: ddl_log_rename_before_stat_tables position: 2"
"engine: aria_notrans crash point: ddl_log_rename_before_stat_tables position: 3"
"engine: aria_notrans crash point: ddl_log_rename_before_stat_tables position: 4"
"engine: aria_notrans crash point: ddl_log_rename_before_stat_tables position: 5"
"engine: aria_notrans crash point: ddl_log_rename_after_stat_tables position: 1"
"engine: aria_notrans crash point: ddl_log_rename_after_stat_tables position: 2"
"engine: aria_notrans crash point: ddl_log_rename_after_stat_tables position: 3"
"engine: aria_notrans crash point: ddl_log_rename_after_stat_tables position: 4"
"engine: aria_notrans crash point: ddl_log_rename_after_stat_tables position: 5"
"engine: innodb crash point: definition_file_after_create position: 1"
"engine: innodb crash point: definition_file_after_create position: 2"
"engine: innodb crash point: definition_file_after_create position: 3"
"engine: innodb crash point: definition_file_after_create position: 4"
"engine: innodb crash point: definition_file_after_create position: 5"
"engine: innodb crash point: ddl_log_rename_before_rename_table position: 1"
"engine: innodb crash point: ddl_log_rename_before_rename_table position: 2"
"engine: innodb crash point: ddl_log_rename_before_rename_table position: 3"
"engine: innodb crash point: ddl_log_rename_before_rename_table position: 4"
"engine: innodb crash point: ddl_log_rename_before_rename_table position: 5"
"engine: innodb crash point: ddl_log_rename_before_phase_trigger position: 1"
"engine: innodb crash point: ddl_log_rename_before_phase_trigger position: 2"
"engine: innodb crash point: ddl_log_rename_before_phase_trigger position: 3"
"engine: innodb crash point: ddl_log_rename_before_phase_trigger position: 4"
"engine: innodb crash point: ddl_log_rename_before_phase_trigger position: 5"
"engine: innodb crash point: ddl_log_rename_before_rename_trigger position: 1"
"engine: innodb crash point: ddl_log_rename_before_rename_trigger position: 2"
"engine: innodb crash point: ddl_log_rename_before_rename_trigger position: 3"
"engine: innodb crash point: ddl_log_rename_before_rename_trigger position: 4"
"engine: innodb crash point: ddl_log_rename_before_rename_trigger position: 5"
"engine: innodb crash point: ddl_log_rename_before_stat_tables position: 1"
"engine: innodb crash point: ddl_log_rename_before_stat_tables position: 2"
"engine: innodb crash point: ddl_log_rename_before_stat_tables position: 3"
"engine: innodb crash point: ddl_log_rename_before_stat_tables position: 4"
"engine: innodb crash point: ddl_log_rename_before_stat_tables position: 5"
"engine: innodb crash point: ddl_log_rename_after_stat_tables position: 1"
"engine: innodb crash point: ddl_log_rename_after_stat_tables position: 2"
"engine: innodb crash point: ddl_log_rename_after_stat_tables position: 3"
"engine: innodb crash point: ddl_log_rename_after_stat_tables position: 4"
"engine: innodb crash point: ddl_log_rename_after_stat_tables position: 5"
"engine: csv crash point: definition_file_after_create position: 1"
"engine: csv crash point: definition_file_after_create position: 2"
"engine: csv crash point: definition_file_after_create position: 3"
"engine: csv crash point: definition_file_after_create position: 4"
"engine: csv crash point: definition_file_after_create position: 5"
"engine: csv crash point: ddl_log_rename_before_rename_table position: 1"
"engine: csv crash point: ddl_log_rename_before_rename_table position: 2"
"engine: csv crash point: ddl_log_rename_before_rename_table position: 3"
"engine: csv crash point: ddl_log_rename_before_rename_table position: 4"
"engine: csv crash point: ddl_log_rename_before_rename_table position: 5"
"engine: csv crash point: ddl_log_rename_before_phase_trigger position: 1"
"engine: csv crash point: ddl_log_rename_before_phase_trigger position: 2"
"engine: csv crash point: ddl_log_rename_before_phase_trigger position: 3"
"engine: csv crash point: ddl_log_rename_before_phase_trigger position: 4"
"engine: csv crash point: ddl_log_rename_before_phase_trigger position: 5"
"engine: csv crash point: ddl_log_rename_before_rename_trigger position: 1"
"engine: csv crash point: ddl_log_rename_before_rename_trigger position: 2"
"engine: csv crash point: ddl_log_rename_before_rename_trigger position: 3"
"engine: csv crash point: ddl_log_rename_before_rename_trigger position: 4"
"engine: csv crash point: ddl_log_rename_before_rename_trigger position: 5"
"engine: csv crash point: ddl_log_rename_before_stat_tables position: 1"
"engine: csv crash point: ddl_log_rename_before_stat_tables position: 2"
"engine: csv crash point: ddl_log_rename_before_stat_tables position: 3"
"engine: csv crash point: ddl_log_rename_before_stat_tables position: 4"
"engine: csv crash point: ddl_log_rename_before_stat_tables position: 5"
"engine: csv crash point: ddl_log_rename_after_stat_tables position: 1"
"engine: csv crash point: ddl_log_rename_after_stat_tables position: 2"
"engine: csv crash point: ddl_log_rename_after_stat_tables position: 3"
"engine: csv crash point: ddl_log_rename_after_stat_tables position: 4"
"engine: csv crash point: ddl_log_rename_after_stat_tables position: 5"

View File

@@ -0,0 +1,153 @@
--source include/have_debug.inc
--source include/have_innodb.inc
--source include/have_csv.inc
--source include/not_valgrind.inc
--source include/not_embedded.inc
#
# Testing of atomic rename with forced crashes in a lot of different places
#
let $engine_count=5;
let $engines='myisam','aria','aria_notrans','innodb','csv';
let $crash_count=6;
let $crash_points='definition_file_after_create','ddl_log_rename_before_rename_table','ddl_log_rename_before_phase_trigger','ddl_log_rename_before_rename_trigger','ddl_log_rename_before_stat_tables','ddl_log_rename_after_stat_tables';
# Number of renames in the tested statement
let $renames=5;
let $old_debug=`select @@debug_dbug`;
let $e=0;
--disable_query_log
while ($e < $engine_count)
{
inc $e;
let $engine=`select ELT($e, $engines)`;
let $default_engine=$engine;
let $extra_option=;
if ($engine == "aria")
{
let $extra_option=transactional=1;
}
if ($engine == "aria_notrans")
{
let $default_engine="aria";
let $extra_option=transactional=0;
}
--eval set @@default_storage_engine=$default_engine
--eval create table t1 (a int not null) $extra_option;
--eval create table t2 (b int not null) $extra_option;
--eval create table t3 (c int not null) $extra_option;
--eval create table t4 (d int not null) $extra_option;
insert into t1 values(1);
insert into t2 values(2);
insert into t3 values(3);
insert into t4 values(4);
delimiter |;
create trigger t1_trg before insert on t1 for each row
begin
if isnull(new.a) then
set new.a:= 1000;
end if;
end|
create trigger t2_trg before insert on t2 for each row
begin
if isnull(new.b) then
set new.b:= 2000;
end if;
end|
create trigger t3_trg before insert on t3 for each row
begin
if isnull(new.c) then
set new.c:= 4000;
end if;
end|
create trigger t4_trg before insert on t4 for each row
begin
if isnull(new.d) then
set new.d:= 8000;
end if;
end|
delimiter ;|
let $c=0;
while ($c < $crash_count)
{
inc $c;
let $crash=`select ELT($c, $crash_points)`;
let $r=0;
while ($r < $renames)
{
inc $r;
echo "engine: $engine crash point: $crash position: $r";
flush tables;
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--disable_reconnect
--eval set @@debug_dbug="+d,$crash",@debug_crash_counter=$r
let $errno=0;
--error 0,2013
rename table t1 to t5, t2 to t1, t5 to t2, t4 to t5, t3 to t4;
let $error=$errno;
--enable_reconnect
--source include/wait_until_connected_again.inc
--disable_query_log
--eval set @@debug_dbug="$old_debug"
if ($error == 0)
{
echo "No crash!";
# No crash, rename things back
rename table t4 to t3, t5 to t4, t2 to t5, t1 to t2, t5 to t1;
}
# Ensure that the tables are back to original
let $res=`select t1.a+t2.b+t3.c+t4.d from t1,t2,t3,t4`;
if ($res != 10)
{
die "Got result $res when 10 was expected";
}
# Ensure that triggers work
insert into t1 values(null);
insert into t2 values(null);
insert into t3 values(null);
insert into t4 values(null);
let $res=`select (select sum(t1.a) from t1)+ (select sum(t2.b) from t2) + (select sum(t3.c) from t3)+ (select sum(t4.d) from t4)`;
if ($res != 15010)
{
die "Got result $res when 15010 was expected";
}
# Restore tables
delete from t1 where a > 100;
delete from t2 where b > 100;
delete from t3 where c > 100;
delete from t4 where d > 100;
}
}
# Last test, check that rename really worked
rename table t1 to t5, t2 to t1, t5 to t2, t4 to t5, t3 to t4;
insert into t1 values(null);
insert into t2 values(null);
insert into t5 values(null);
insert into t4 values(null);
let $res=`select (select sum(t1.b) from t1)+ (select sum(t2.a) from t2) + (select sum(t4.c) from t4)+ (select sum(t5.d) from t5)`;
if ($res != 15010)
{
die "Got result $res when 15010 was expected";
}
let $res=`select (select count(*)=2 from t1) + (select count(*)=2 from t2) + (select count(*)=2 from t4)+ (select count(*)=2 from t5)`;
if ($res != 4)
{
die "Got result $res when 4 was expected";
}
drop table t1,t2,t4,t5;
}
--enable_query_log

View File

@@ -0,0 +1,147 @@
RESET MASTER;
"engine: myisam crash point: ddl_log_rename_before_binlog position: 1"
"engine: myisam crash point: ddl_log_rename_after_binlog position: 1"
"engine: aria crash point: ddl_log_rename_before_binlog position: 1"
"engine: aria crash point: ddl_log_rename_after_binlog position: 1"
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000002 # Gtid # # BEGIN GTID #-#-#
master-bin.000002 # Query # # use `test`; insert into t1 values(null)
master-bin.000002 # Query # # COMMIT
master-bin.000002 # Gtid # # BEGIN GTID #-#-#
master-bin.000002 # Query # # use `test`; insert into t2 values(null)
master-bin.000002 # Query # # COMMIT
master-bin.000002 # Gtid # # BEGIN GTID #-#-#
master-bin.000002 # Query # # use `test`; insert into t3 values(null)
master-bin.000002 # Query # # COMMIT
master-bin.000002 # Gtid # # BEGIN GTID #-#-#
master-bin.000002 # Query # # use `test`; insert into t4 values(null)
master-bin.000002 # Query # # COMMIT
master-bin.000002 # Gtid # # BEGIN GTID #-#-#
master-bin.000002 # Query # # use `test`; delete from t1 where a > 100
master-bin.000002 # Query # # COMMIT
master-bin.000002 # Gtid # # BEGIN GTID #-#-#
master-bin.000002 # Query # # use `test`; delete from t2 where b > 100
master-bin.000002 # Query # # COMMIT
master-bin.000002 # Gtid # # BEGIN GTID #-#-#
master-bin.000002 # Query # # use `test`; delete from t3 where c > 100
master-bin.000002 # Query # # COMMIT
master-bin.000002 # Gtid # # BEGIN GTID #-#-#
master-bin.000002 # Query # # use `test`; delete from t4 where d > 100
master-bin.000002 # Query # # COMMIT
master-bin.000002 # Gtid # # GTID #-#-#
master-bin.000002 # Query # # use `test`; flush tables
master-bin.000002 # Gtid # # GTID #-#-#
master-bin.000002 # Query # # use `test`; rename table t1 to t5, t2 to t1, t5 to t2, t4 to t5, t3 to t4
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000003 # Gtid # # BEGIN GTID #-#-#
master-bin.000003 # Query # # use `test`; insert into t1 values(null)
master-bin.000003 # Query # # COMMIT
master-bin.000003 # Gtid # # BEGIN GTID #-#-#
master-bin.000003 # Query # # use `test`; insert into t2 values(null)
master-bin.000003 # Query # # COMMIT
master-bin.000003 # Gtid # # BEGIN GTID #-#-#
master-bin.000003 # Query # # use `test`; insert into t5 values(null)
master-bin.000003 # Query # # COMMIT
master-bin.000003 # Gtid # # BEGIN GTID #-#-#
master-bin.000003 # Query # # use `test`; insert into t4 values(null)
master-bin.000003 # Query # # COMMIT
master-bin.000003 # Gtid # # GTID #-#-#
master-bin.000003 # Query # # use `test`; DROP TABLE `t1`,`t2`,`t4`,`t5` /* generated by server */
master-bin.000003 # Gtid # # GTID #-#-#
master-bin.000003 # Query # # use `test`; create table t1 (a int not null) transactional=1
master-bin.000003 # Gtid # # GTID #-#-#
master-bin.000003 # Query # # use `test`; create table t2 (b int not null) transactional=1
master-bin.000003 # Gtid # # GTID #-#-#
master-bin.000003 # Query # # use `test`; create table t3 (c int not null) transactional=1
master-bin.000003 # Gtid # # GTID #-#-#
master-bin.000003 # Query # # use `test`; create table t4 (d int not null) transactional=1
master-bin.000003 # Gtid # # BEGIN GTID #-#-#
master-bin.000003 # Query # # use `test`; insert into t1 values(1)
master-bin.000003 # Query # # COMMIT
master-bin.000003 # Gtid # # BEGIN GTID #-#-#
master-bin.000003 # Query # # use `test`; insert into t2 values(2)
master-bin.000003 # Query # # COMMIT
master-bin.000003 # Gtid # # BEGIN GTID #-#-#
master-bin.000003 # Query # # use `test`; insert into t3 values(3)
master-bin.000003 # Query # # COMMIT
master-bin.000003 # Gtid # # BEGIN GTID #-#-#
master-bin.000003 # Query # # use `test`; insert into t4 values(4)
master-bin.000003 # Query # # COMMIT
master-bin.000003 # Gtid # # GTID #-#-#
master-bin.000003 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` trigger t1_trg before insert on t1 for each row
begin
if isnull(new.a) then
set new.a:= 1000;
end if;
end
master-bin.000003 # Gtid # # GTID #-#-#
master-bin.000003 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` trigger t2_trg before insert on t2 for each row
begin
if isnull(new.b) then
set new.b:= 2000;
end if;
end
master-bin.000003 # Gtid # # GTID #-#-#
master-bin.000003 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` trigger t3_trg before insert on t3 for each row
begin
if isnull(new.c) then
set new.c:= 4000;
end if;
end
master-bin.000003 # Gtid # # GTID #-#-#
master-bin.000003 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` trigger t4_trg before insert on t4 for each row
begin
if isnull(new.d) then
set new.d:= 8000;
end if;
end
master-bin.000003 # Gtid # # GTID #-#-#
master-bin.000003 # Query # # use `test`; flush tables
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000004 # Gtid # # BEGIN GTID #-#-#
master-bin.000004 # Query # # use `test`; insert into t1 values(null)
master-bin.000004 # Query # # COMMIT
master-bin.000004 # Gtid # # BEGIN GTID #-#-#
master-bin.000004 # Query # # use `test`; insert into t2 values(null)
master-bin.000004 # Query # # COMMIT
master-bin.000004 # Gtid # # BEGIN GTID #-#-#
master-bin.000004 # Query # # use `test`; insert into t3 values(null)
master-bin.000004 # Query # # COMMIT
master-bin.000004 # Gtid # # BEGIN GTID #-#-#
master-bin.000004 # Query # # use `test`; insert into t4 values(null)
master-bin.000004 # Query # # COMMIT
master-bin.000004 # Gtid # # BEGIN GTID #-#-#
master-bin.000004 # Query # # use `test`; delete from t1 where a > 100
master-bin.000004 # Query # # COMMIT
master-bin.000004 # Gtid # # BEGIN GTID #-#-#
master-bin.000004 # Query # # use `test`; delete from t2 where b > 100
master-bin.000004 # Query # # COMMIT
master-bin.000004 # Gtid # # BEGIN GTID #-#-#
master-bin.000004 # Query # # use `test`; delete from t3 where c > 100
master-bin.000004 # Query # # COMMIT
master-bin.000004 # Gtid # # BEGIN GTID #-#-#
master-bin.000004 # Query # # use `test`; delete from t4 where d > 100
master-bin.000004 # Query # # COMMIT
master-bin.000004 # Gtid # # GTID #-#-#
master-bin.000004 # Query # # use `test`; flush tables
master-bin.000004 # Gtid # # GTID #-#-#
master-bin.000004 # Query # # use `test`; rename table t1 to t5, t2 to t1, t5 to t2, t4 to t5, t3 to t4
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000005 # Gtid # # BEGIN GTID #-#-#
master-bin.000005 # Query # # use `test`; insert into t1 values(null)
master-bin.000005 # Query # # COMMIT
master-bin.000005 # Gtid # # BEGIN GTID #-#-#
master-bin.000005 # Query # # use `test`; insert into t2 values(null)
master-bin.000005 # Query # # COMMIT
master-bin.000005 # Gtid # # BEGIN GTID #-#-#
master-bin.000005 # Query # # use `test`; insert into t5 values(null)
master-bin.000005 # Query # # COMMIT
master-bin.000005 # Gtid # # BEGIN GTID #-#-#
master-bin.000005 # Query # # use `test`; insert into t4 values(null)
master-bin.000005 # Query # # COMMIT
master-bin.000005 # Gtid # # GTID #-#-#
master-bin.000005 # Query # # use `test`; DROP TABLE `t1`,`t2`,`t4`,`t5` /* generated by server */

View File

@@ -0,0 +1,168 @@
--source include/have_debug.inc
--source include/have_innodb.inc
--source include/have_csv.inc
--source include/have_log_bin.inc
--source include/not_valgrind.inc
#
# Testing of atomic rename with binlogging
# - First crash is before binlog is written, in which case the rename should
# be reverted
# - Second crash is after binlog is written, in which case the rename should hold
#
RESET MASTER;
let $engine_count=2;
let $engines='myisam', 'aria';
let $crash_count=2;
let $crash_points='ddl_log_rename_before_binlog','ddl_log_rename_after_binlog';
let $crash_positions= 1;
let $old_debug=`select @@debug_dbug`;
let $e=0;
--disable_query_log
while ($e < $engine_count)
{
inc $e;
let $engine=`select ELT($e, $engines)`;
let $default_engine=$engine;
let $extra_option=;
if ($engine == "aria")
{
let $extra_option=transactional=1;
}
if ($engine == "aria_notrans")
{
let $default_engine="aria";
let $extra_option=transactional=0;
}
--eval set @@default_storage_engine=$default_engine
--eval create table t1 (a int not null) $extra_option;
--eval create table t2 (b int not null) $extra_option;
--eval create table t3 (c int not null) $extra_option;
--eval create table t4 (d int not null) $extra_option;
insert into t1 values(1);
insert into t2 values(2);
insert into t3 values(3);
insert into t4 values(4);
delimiter |;
create trigger t1_trg before insert on t1 for each row
begin
if isnull(new.a) then
set new.a:= 1000;
end if;
end|
create trigger t2_trg before insert on t2 for each row
begin
if isnull(new.b) then
set new.b:= 2000;
end if;
end|
create trigger t3_trg before insert on t3 for each row
begin
if isnull(new.c) then
set new.c:= 4000;
end if;
end|
create trigger t4_trg before insert on t4 for each row
begin
if isnull(new.d) then
set new.d:= 8000;
end if;
end|
delimiter ;|
let $c=0;
while ($c < $crash_count)
{
inc $c;
let $crash=`select ELT($c, $crash_points)`;
let $r=0;
while ($r < $crash_positions)
{
inc $r;
echo "engine: $engine crash point: $crash position: $r";
flush tables;
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--disable_reconnect
--eval set @@debug_dbug="+d,$crash",@debug_crash_counter=1
let $errno=0;
--error 0,2013
rename table t1 to t5, t2 to t1, t5 to t2, t4 to t5, t3 to t4;
let $error=$errno;
--enable_reconnect
--source include/wait_until_connected_again.inc
--disable_query_log
--eval set @@debug_dbug="$old_debug"
if ($error == 0)
{
echo "No crash!";
# No crash, rename things back
rename table t4 to t3, t5 to t4, t2 to t5, t1 to t2, t5 to t1;
}
if ($c == 1)
{
# Check that the tables are back to original
let $res=`select t1.a+t2.b+t3.c+t4.d from t1,t2,t3,t4`;
if ($res != 10)
{
die "Got result $res when 10 was expected";
}
# Ensure that triggers work
insert into t1 values(null);
insert into t2 values(null);
insert into t3 values(null);
insert into t4 values(null);
let $res=`select (select sum(t1.a) from t1)+ (select sum(t2.b) from t2) + (select sum(t3.c) from t3)+ (select sum(t4.d) from t4)`;
if ($res != 15010)
{
die "Got result $res when 15010 was expected";
}
# Restore tables
delete from t1 where a > 100;
delete from t2 where b > 100;
delete from t3 where c > 100;
delete from t4 where d > 100;
}
if ($c == 2)
{
# Check that rename succeded
insert into t1 values(null);
insert into t2 values(null);
insert into t5 values(null);
insert into t4 values(null);
let $res=`select (select sum(t1.b) from t1)+ (select sum(t2.a) from t2) + (select sum(t4.c) from t4)+ (select sum(t5.d) from t5)`;
if ($res != 15010)
{
die "Got result $res when 15010 was expected";
}
let $res=`select (select count(*)=2 from t1) + (select count(*)=2 from t2) + (select count(*)=2 from t4)+ (select count(*)=2 from t5)`;
if ($res != 4)
{
die "Got result $res when 4 was expected";
}
}
}
}
drop table t1,t2,t4,t5;
}
--enable_query_log
# Show the binlogs that holds the renames
--let $binlog_file=master-bin.000002
--source include/show_binlog_events.inc
--let $binlog_file=master-bin.000003
--source include/show_binlog_events.inc
--let $binlog_file=master-bin.000004
--source include/show_binlog_events.inc
--let $binlog_file=master-bin.000005
--source include/show_binlog_events.inc

View File

@@ -0,0 +1,150 @@
"engine: myisam crash point: ddl_log_rename_after_failed_rename_trigger position: 1"
"engine: myisam crash point: ddl_log_rename_after_failed_rename_trigger position: 2"
"engine: myisam crash point: ddl_log_rename_after_failed_rename_trigger position: 3"
"engine: myisam crash point: ddl_log_rename_after_failed_rename_trigger position: 4"
"engine: myisam crash point: ddl_log_rename_after_failed_rename_trigger position: 5"
"engine: myisam crash point: ddl_log_rename_after_failed_rename_trigger position: 6"
"engine: myisam crash point: ddl_log_rename_after_failed_rename_trigger position: 7"
"engine: myisam crash point: ddl_log_rename_after_failed_rename_trigger position: 8"
"engine: myisam crash point: ddl_log_rename_after_failed_rename_trigger position: 9"
"engine: myisam crash point: ddl_log_rename_after_failed_rename_trigger position: 10"
"engine: myisam crash point: ddl_log_rename_after_revert_rename_table position: 1"
"engine: myisam crash point: ddl_log_rename_after_revert_rename_table position: 2"
"engine: myisam crash point: ddl_log_rename_after_revert_rename_table position: 3"
"engine: myisam crash point: ddl_log_rename_after_revert_rename_table position: 4"
"engine: myisam crash point: ddl_log_rename_after_revert_rename_table position: 5"
"engine: myisam crash point: ddl_log_rename_after_revert_rename_table position: 6"
"engine: myisam crash point: ddl_log_rename_after_revert_rename_table position: 7"
"engine: myisam crash point: ddl_log_rename_after_revert_rename_table position: 8"
"engine: myisam crash point: ddl_log_rename_after_revert_rename_table position: 9"
"engine: myisam crash point: ddl_log_rename_after_revert_rename_table position: 10"
"engine: myisam crash point: ddl_log_rename_after_disable_entry position: 1"
"engine: myisam crash point: ddl_log_rename_after_disable_entry position: 2"
"engine: myisam crash point: ddl_log_rename_after_disable_entry position: 3"
"engine: myisam crash point: ddl_log_rename_after_disable_entry position: 4"
"engine: myisam crash point: ddl_log_rename_after_disable_entry position: 5"
"engine: myisam crash point: ddl_log_rename_after_disable_entry position: 6"
"engine: myisam crash point: ddl_log_rename_after_disable_entry position: 7"
"engine: myisam crash point: ddl_log_rename_after_disable_entry position: 8"
"engine: myisam crash point: ddl_log_rename_after_disable_entry position: 9"
"engine: myisam crash point: ddl_log_rename_after_disable_entry position: 10"
"engine: aria crash point: ddl_log_rename_after_failed_rename_trigger position: 1"
"engine: aria crash point: ddl_log_rename_after_failed_rename_trigger position: 2"
"engine: aria crash point: ddl_log_rename_after_failed_rename_trigger position: 3"
"engine: aria crash point: ddl_log_rename_after_failed_rename_trigger position: 4"
"engine: aria crash point: ddl_log_rename_after_failed_rename_trigger position: 5"
"engine: aria crash point: ddl_log_rename_after_failed_rename_trigger position: 6"
"engine: aria crash point: ddl_log_rename_after_failed_rename_trigger position: 7"
"engine: aria crash point: ddl_log_rename_after_failed_rename_trigger position: 8"
"engine: aria crash point: ddl_log_rename_after_failed_rename_trigger position: 9"
"engine: aria crash point: ddl_log_rename_after_failed_rename_trigger position: 10"
"engine: aria crash point: ddl_log_rename_after_revert_rename_table position: 1"
"engine: aria crash point: ddl_log_rename_after_revert_rename_table position: 2"
"engine: aria crash point: ddl_log_rename_after_revert_rename_table position: 3"
"engine: aria crash point: ddl_log_rename_after_revert_rename_table position: 4"
"engine: aria crash point: ddl_log_rename_after_revert_rename_table position: 5"
"engine: aria crash point: ddl_log_rename_after_revert_rename_table position: 6"
"engine: aria crash point: ddl_log_rename_after_revert_rename_table position: 7"
"engine: aria crash point: ddl_log_rename_after_revert_rename_table position: 8"
"engine: aria crash point: ddl_log_rename_after_revert_rename_table position: 9"
"engine: aria crash point: ddl_log_rename_after_revert_rename_table position: 10"
"engine: aria crash point: ddl_log_rename_after_disable_entry position: 1"
"engine: aria crash point: ddl_log_rename_after_disable_entry position: 2"
"engine: aria crash point: ddl_log_rename_after_disable_entry position: 3"
"engine: aria crash point: ddl_log_rename_after_disable_entry position: 4"
"engine: aria crash point: ddl_log_rename_after_disable_entry position: 5"
"engine: aria crash point: ddl_log_rename_after_disable_entry position: 6"
"engine: aria crash point: ddl_log_rename_after_disable_entry position: 7"
"engine: aria crash point: ddl_log_rename_after_disable_entry position: 8"
"engine: aria crash point: ddl_log_rename_after_disable_entry position: 9"
"engine: aria crash point: ddl_log_rename_after_disable_entry position: 10"
"engine: aria_notrans crash point: ddl_log_rename_after_failed_rename_trigger position: 1"
"engine: aria_notrans crash point: ddl_log_rename_after_failed_rename_trigger position: 2"
"engine: aria_notrans crash point: ddl_log_rename_after_failed_rename_trigger position: 3"
"engine: aria_notrans crash point: ddl_log_rename_after_failed_rename_trigger position: 4"
"engine: aria_notrans crash point: ddl_log_rename_after_failed_rename_trigger position: 5"
"engine: aria_notrans crash point: ddl_log_rename_after_failed_rename_trigger position: 6"
"engine: aria_notrans crash point: ddl_log_rename_after_failed_rename_trigger position: 7"
"engine: aria_notrans crash point: ddl_log_rename_after_failed_rename_trigger position: 8"
"engine: aria_notrans crash point: ddl_log_rename_after_failed_rename_trigger position: 9"
"engine: aria_notrans crash point: ddl_log_rename_after_failed_rename_trigger position: 10"
"engine: aria_notrans crash point: ddl_log_rename_after_revert_rename_table position: 1"
"engine: aria_notrans crash point: ddl_log_rename_after_revert_rename_table position: 2"
"engine: aria_notrans crash point: ddl_log_rename_after_revert_rename_table position: 3"
"engine: aria_notrans crash point: ddl_log_rename_after_revert_rename_table position: 4"
"engine: aria_notrans crash point: ddl_log_rename_after_revert_rename_table position: 5"
"engine: aria_notrans crash point: ddl_log_rename_after_revert_rename_table position: 6"
"engine: aria_notrans crash point: ddl_log_rename_after_revert_rename_table position: 7"
"engine: aria_notrans crash point: ddl_log_rename_after_revert_rename_table position: 8"
"engine: aria_notrans crash point: ddl_log_rename_after_revert_rename_table position: 9"
"engine: aria_notrans crash point: ddl_log_rename_after_revert_rename_table position: 10"
"engine: aria_notrans crash point: ddl_log_rename_after_disable_entry position: 1"
"engine: aria_notrans crash point: ddl_log_rename_after_disable_entry position: 2"
"engine: aria_notrans crash point: ddl_log_rename_after_disable_entry position: 3"
"engine: aria_notrans crash point: ddl_log_rename_after_disable_entry position: 4"
"engine: aria_notrans crash point: ddl_log_rename_after_disable_entry position: 5"
"engine: aria_notrans crash point: ddl_log_rename_after_disable_entry position: 6"
"engine: aria_notrans crash point: ddl_log_rename_after_disable_entry position: 7"
"engine: aria_notrans crash point: ddl_log_rename_after_disable_entry position: 8"
"engine: aria_notrans crash point: ddl_log_rename_after_disable_entry position: 9"
"engine: aria_notrans crash point: ddl_log_rename_after_disable_entry position: 10"
"engine: innodb crash point: ddl_log_rename_after_failed_rename_trigger position: 1"
"engine: innodb crash point: ddl_log_rename_after_failed_rename_trigger position: 2"
"engine: innodb crash point: ddl_log_rename_after_failed_rename_trigger position: 3"
"engine: innodb crash point: ddl_log_rename_after_failed_rename_trigger position: 4"
"engine: innodb crash point: ddl_log_rename_after_failed_rename_trigger position: 5"
"engine: innodb crash point: ddl_log_rename_after_failed_rename_trigger position: 6"
"engine: innodb crash point: ddl_log_rename_after_failed_rename_trigger position: 7"
"engine: innodb crash point: ddl_log_rename_after_failed_rename_trigger position: 8"
"engine: innodb crash point: ddl_log_rename_after_failed_rename_trigger position: 9"
"engine: innodb crash point: ddl_log_rename_after_failed_rename_trigger position: 10"
"engine: innodb crash point: ddl_log_rename_after_revert_rename_table position: 1"
"engine: innodb crash point: ddl_log_rename_after_revert_rename_table position: 2"
"engine: innodb crash point: ddl_log_rename_after_revert_rename_table position: 3"
"engine: innodb crash point: ddl_log_rename_after_revert_rename_table position: 4"
"engine: innodb crash point: ddl_log_rename_after_revert_rename_table position: 5"
"engine: innodb crash point: ddl_log_rename_after_revert_rename_table position: 6"
"engine: innodb crash point: ddl_log_rename_after_revert_rename_table position: 7"
"engine: innodb crash point: ddl_log_rename_after_revert_rename_table position: 8"
"engine: innodb crash point: ddl_log_rename_after_revert_rename_table position: 9"
"engine: innodb crash point: ddl_log_rename_after_revert_rename_table position: 10"
"engine: innodb crash point: ddl_log_rename_after_disable_entry position: 1"
"engine: innodb crash point: ddl_log_rename_after_disable_entry position: 2"
"engine: innodb crash point: ddl_log_rename_after_disable_entry position: 3"
"engine: innodb crash point: ddl_log_rename_after_disable_entry position: 4"
"engine: innodb crash point: ddl_log_rename_after_disable_entry position: 5"
"engine: innodb crash point: ddl_log_rename_after_disable_entry position: 6"
"engine: innodb crash point: ddl_log_rename_after_disable_entry position: 7"
"engine: innodb crash point: ddl_log_rename_after_disable_entry position: 8"
"engine: innodb crash point: ddl_log_rename_after_disable_entry position: 9"
"engine: innodb crash point: ddl_log_rename_after_disable_entry position: 10"
"engine: csv crash point: ddl_log_rename_after_failed_rename_trigger position: 1"
"engine: csv crash point: ddl_log_rename_after_failed_rename_trigger position: 2"
"engine: csv crash point: ddl_log_rename_after_failed_rename_trigger position: 3"
"engine: csv crash point: ddl_log_rename_after_failed_rename_trigger position: 4"
"engine: csv crash point: ddl_log_rename_after_failed_rename_trigger position: 5"
"engine: csv crash point: ddl_log_rename_after_failed_rename_trigger position: 6"
"engine: csv crash point: ddl_log_rename_after_failed_rename_trigger position: 7"
"engine: csv crash point: ddl_log_rename_after_failed_rename_trigger position: 8"
"engine: csv crash point: ddl_log_rename_after_failed_rename_trigger position: 9"
"engine: csv crash point: ddl_log_rename_after_failed_rename_trigger position: 10"
"engine: csv crash point: ddl_log_rename_after_revert_rename_table position: 1"
"engine: csv crash point: ddl_log_rename_after_revert_rename_table position: 2"
"engine: csv crash point: ddl_log_rename_after_revert_rename_table position: 3"
"engine: csv crash point: ddl_log_rename_after_revert_rename_table position: 4"
"engine: csv crash point: ddl_log_rename_after_revert_rename_table position: 5"
"engine: csv crash point: ddl_log_rename_after_revert_rename_table position: 6"
"engine: csv crash point: ddl_log_rename_after_revert_rename_table position: 7"
"engine: csv crash point: ddl_log_rename_after_revert_rename_table position: 8"
"engine: csv crash point: ddl_log_rename_after_revert_rename_table position: 9"
"engine: csv crash point: ddl_log_rename_after_revert_rename_table position: 10"
"engine: csv crash point: ddl_log_rename_after_disable_entry position: 1"
"engine: csv crash point: ddl_log_rename_after_disable_entry position: 2"
"engine: csv crash point: ddl_log_rename_after_disable_entry position: 3"
"engine: csv crash point: ddl_log_rename_after_disable_entry position: 4"
"engine: csv crash point: ddl_log_rename_after_disable_entry position: 5"
"engine: csv crash point: ddl_log_rename_after_disable_entry position: 6"
"engine: csv crash point: ddl_log_rename_after_disable_entry position: 7"
"engine: csv crash point: ddl_log_rename_after_disable_entry position: 8"
"engine: csv crash point: ddl_log_rename_after_disable_entry position: 9"
"engine: csv crash point: ddl_log_rename_after_disable_entry position: 10"

View File

@@ -0,0 +1,158 @@
--source include/have_debug.inc
--source include/have_innodb.inc
--source include/have_csv.inc
--source include/not_valgrind.inc
--source include/not_embedded.inc
#
# Testing of atomic rename of table with triggers when table rename works but
# rename of trigger fails.
# This test can't be combined with rename_table.test as we need to simulate
# an error in sql_create_definition_file()
#
let $crash_count=3;
let $crash_points='ddl_log_rename_after_failed_rename_trigger','ddl_log_rename_after_revert_rename_table', 'ddl_log_rename_after_disable_entry';
let $engine_count=5;
let $engines='myisam','aria','aria_notrans','innodb','csv';
# Number times sql_create_definition_file() is called during one statement.
# This is number of renames (5)*2
let $renames=10;
let $old_debug=`select @@debug_dbug`;
let $e=0;
--disable_query_log
while ($e < $engine_count)
{
inc $e;
let $engine=`select ELT($e, $engines)`;
let $default_engine=$engine;
let $extra_option=;
if ($engine == "aria")
{
let $extra_option=transactional=1;
}
if ($engine == "aria_notrans")
{
let $default_engine="aria";
let $extra_option=transactional=0;
}
--eval set @@default_storage_engine=$default_engine
--eval create table t1 (a int not null) $extra_option;
--eval create table t2 (b int not null) $extra_option;
--eval create table t3 (c int not null) $extra_option;
--eval create table t4 (d int not null) $extra_option;
insert into t1 values(1);
insert into t2 values(2);
insert into t3 values(3);
insert into t4 values(4);
delimiter |;
create trigger t1_trg before insert on t1 for each row
begin
if isnull(new.a) then
set new.a:= 1000;
end if;
end|
create trigger t2_trg before insert on t2 for each row
begin
if isnull(new.b) then
set new.b:= 2000;
end if;
end|
create trigger t3_trg before insert on t3 for each row
begin
if isnull(new.c) then
set new.c:= 4000;
end if;
end|
create trigger t4_trg before insert on t4 for each row
begin
if isnull(new.d) then
set new.d:= 8000;
end if;
end|
delimiter ;|
let $c=0;
while ($c < $crash_count)
{
inc $c;
let $crash=`select ELT($c, $crash_points)`;
let $r=0;
while ($r < $renames)
{
inc $r;
echo "engine: $engine crash point: $crash position: $r";
flush tables;
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--disable_reconnect
--eval set @@debug_dbug="+d,$crash,definition_file_simulate_write_error",@debug_crash_counter=1;
--eval set @@debug_dbug="+d,definition_file_simulate_write_error",@debug_error_counter=$r;
let $errno=0;
--error 0,2013
rename table t1 to t5, t2 to t1, t5 to t2, t4 to t5, t3 to t4;
let $error=$errno;
--enable_reconnect
--source include/wait_until_connected_again.inc
--disable_query_log
--eval set @@debug_dbug="$old_debug"
if ($error == 0)
{
echo "No crash!";
# No crash, rename things back
rename table t4 to t3, t5 to t4, t2 to t5, t1 to t2, t5 to t1;
}
# Ensure that the tables are back to original
let $res=`select t1.a+t2.b+t3.c+t4.d from t1,t2,t3,t4`;
if ($res != 10)
{
die "Got result $res when 10 was expected";
}
# Ensure that triggers work
insert into t1 values(null);
insert into t2 values(null);
insert into t3 values(null);
insert into t4 values(null);
let $res=`select (select sum(t1.a) from t1)+ (select sum(t2.b) from t2) + (select sum(t3.c) from t3)+ (select sum(t4.d) from t4)`;
if ($res != 15010)
{
die "Got result $res when 15010 was expected";
}
# Restore tables
delete from t1 where a > 100;
delete from t2 where b > 100;
delete from t3 where c > 100;
delete from t4 where d > 100;
}
}
# Last test, check that rename really worked
rename table t1 to t5, t2 to t1, t5 to t2, t4 to t5, t3 to t4;
insert into t1 values(null);
insert into t2 values(null);
insert into t5 values(null);
insert into t4 values(null);
let $res=`select (select sum(t1.b) from t1)+ (select sum(t2.a) from t2) + (select sum(t4.c) from t4)+ (select sum(t5.d) from t5)`;
if ($res != 15010)
{
die "Got result $res when 15010 was expected";
}
let $res=`select (select count(*)=2 from t1) + (select count(*)=2 from t2) + (select count(*)=2 from t4)+ (select count(*)=2 from t5)`;
if ($res != 4)
{
die "Got result $res when 4 was expected";
}
drop table t1,t2,t4,t5;
}
--enable_query_log
--disable_query_log

View File

@@ -0,0 +1,23 @@
"engine: crash point: ddl_log_rename_before_rename_view position: 1"
"engine: crash point: ddl_log_rename_before_rename_view position: 2"
"engine: crash point: ddl_log_rename_before_rename_view position: 3"
"engine: crash point: ddl_log_rename_before_rename_view position: 4"
"engine: crash point: ddl_log_rename_before_rename_view position: 5"
"engine: crash point: ddl_log_rename_after_rename_view position: 1"
"engine: crash point: ddl_log_rename_after_rename_view position: 2"
"engine: crash point: ddl_log_rename_after_rename_view position: 3"
"engine: crash point: ddl_log_rename_after_rename_view position: 4"
"engine: crash point: ddl_log_rename_after_rename_view position: 5"
"engine: crash point: rename_view_after_rename_schema_file position: 1"
"engine: crash point: rename_view_after_rename_schema_file position: 2"
"engine: crash point: rename_view_after_rename_schema_file position: 3"
"engine: crash point: rename_view_after_rename_schema_file position: 4"
"engine: crash point: rename_view_after_rename_schema_file position: 5"
"engine: crash point: definition_file_after_create position: 1"
"engine: crash point: definition_file_after_create position: 2"
"engine: crash point: definition_file_after_create position: 3"
"engine: crash point: definition_file_after_create position: 4"
"engine: crash point: definition_file_after_create position: 5"
#
# At last check that rename works when there is no crash
#

View File

@@ -0,0 +1,85 @@
--source include/have_debug.inc
--source include/not_valgrind.inc
--source include/not_embedded.inc
#
# Testing of atomic rename with crashes in a lot of different places
#
let $crash_count=4;
let $crash_points='ddl_log_rename_before_rename_view','ddl_log_rename_after_rename_view','rename_view_after_rename_schema_file','definition_file_after_create';
# Number of renames in the tested statement
let $renames=5;
let $old_debug=`select @@debug_dbug`;
let $e=0;
--disable_query_log
create table t1 (a int not null);
create table t2 (b int not null);
create table t3 (c int not null);
create table t4 (d int not null);
insert into t1 values(1);
insert into t2 values(2);
insert into t3 values(3);
insert into t4 values(4);
create view v1 as select t1.a from t1;
create view v2 as select t2.b from t2;
create view v3 as select t3.c from t3;
create view v4 as select t4.d from t4;
flush tables;
let $c=0;
while ($c < $crash_count)
{
inc $c;
let $crash=`select ELT($c, $crash_points)`;
let $r=0;
while ($r < $renames)
{
inc $r;
echo "engine: crash point: $crash position: $r";
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--disable_reconnect
--eval set @@debug_dbug="+d,$crash",@debug_crash_counter=$r
let $errno=0;
--error 0,2013
rename table v1 to v5, v2 to v1, v5 to v2, v4 to v5, v3 to v4;
let $error=$errno;
--enable_reconnect
--source include/wait_until_connected_again.inc
--disable_query_log
--eval set @@debug_dbug="$old_debug"
if ($error == 0)
{
echo "No crash!";
# No crash, rename things back
rename table v4 to v3, v5 to v4, v2 to v5, v1 to v2, v5 to v1;
}
# Ensure that the tables are back to original
let $res=`select v1.a+v2.b+v3.c+v4.d from v1,v2,v3,v4`;
if ($res != 10)
{
die "Got result $res when 10 was expected";
}
}
}
--echo #
--echo # At last check that rename works when there is no crash
--echo #
rename table v1 to v5, v2 to v1, v5 to v2, v4 to v5, v3 to v4;
let $res=`select (select sum(v1.b) from v1)+ (select sum(v2.a) from v2) + (select sum(v4.c) from v4)+ (select sum(v5.d) from v5)`;
if ($res != 10)
{
die "Got result $res when 10 was expected";
}
drop view v1,v2,v4,v5;
drop table t1,t2,t3,t4;
--enable_query_log

View File

@@ -0,0 +1,8 @@
"engine: crash point: ddl_log_rename_after_disable_entry position: 1"
"engine: crash point: ddl_log_rename_after_disable_entry position: 2"
"engine: crash point: ddl_log_rename_after_disable_entry position: 3"
"engine: crash point: ddl_log_rename_after_disable_entry position: 4"
"engine: crash point: ddl_log_rename_after_disable_entry position: 5"
#
# At last check that rename works when there is no crash
#

View File

@@ -0,0 +1,89 @@
--source include/have_debug.inc
--source include/not_valgrind.inc
#
# Testing of atomic rename of view when creating of definition file fails
# and we crash after the last rename entry has been disabled.
# This is not possible to test with rename_view.test, which is why
# we have a separate test for this case
#
let $crash_count=1;
let $crash_points='ddl_log_rename_after_disable_entry';
# Number of renames in the tested statement
let $renames=5;
let $old_debug=`select @@debug_dbug`;
let $e=0;
--disable_query_log
create table t1 (a int not null);
create table t2 (b int not null);
create table t3 (c int not null);
create table t4 (d int not null);
insert into t1 values(1);
insert into t2 values(2);
insert into t3 values(3);
insert into t4 values(4);
create view v1 as select t1.a from t1;
create view v2 as select t2.b from t2;
create view v3 as select t3.c from t3;
create view v4 as select t4.d from t4;
flush tables;
let $c=0;
while ($c < $crash_count)
{
inc $c;
let $crash=`select ELT($c, $crash_points)`;
let $r=0;
while ($r < $renames)
{
inc $r;
echo "engine: crash point: $crash position: $r";
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--disable_reconnect
--eval set @@debug_dbug="+d,$crash,definition_file_simulate_write_error",@debuge_crash_counter=1;
--eval set @@debug_dbug="+d,definition_file_simulate_write_error",@debug_error_counter=$r;
let $errno=0;
--error 0,3,2013
rename table v1 to v5, v2 to v1, v5 to v2, v4 to v5, v3 to v4;
let $error=$errno;
--enable_reconnect
--source include/wait_until_connected_again.inc
--disable_query_log
--eval set @@debug_dbug="$old_debug"
if ($error == 0)
{
echo "No crash!";
# No crash, rename things back
rename table v4 to v3, v5 to v4, v2 to v5, v1 to v2, v5 to v1;
}
# Ensure that the tables are back to original
let $res=`select v1.a+v2.b+v3.c+v4.d from v1,v2,v3,v4`;
if ($res != 10)
{
die "Got result $res when 10 was expected";
}
}
}
--echo #
--echo # At last check that rename works when there is no crash
--echo #
rename table v1 to v5, v2 to v1, v5 to v2, v4 to v5, v3 to v4;
let $res=`select (select sum(v1.b) from v1)+ (select sum(v2.a) from v2) + (select sum(v4.c) from v4)+ (select sum(v5.d) from v5)`;
if ($res != 10)
{
die "Got result $res when 10 was expected";
}
drop view v1,v2,v4,v5;
drop table t1,t2,t3,t4;
--enable_query_log

View File

@@ -125,7 +125,7 @@ if (!$use_remote_mysqlbinlog)
--echo # - DELETE xtest1.xt1, test2.t2 FROM <...> (with one subsequent Table map)
--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 #/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--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 #/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $datadir/master-bin.000001
--echo #
@@ -135,7 +135,7 @@ if (!$use_remote_mysqlbinlog)
--echo # - DELETE test1.t1, test2.t2 FROM <...>
--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 #/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--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 #/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows --database=test1 -v -v $datadir/master-bin.000001
--echo #
@@ -144,7 +144,7 @@ if (!$use_remote_mysqlbinlog)
--echo # No Annotates should appear in this output
--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 #/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--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 #/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows --skip-annotate-row-events -v -v $datadir/master-bin.000001
--let use_remote_mysqlbinlog= 0
@@ -161,7 +161,7 @@ if (!$use_remote_mysqlbinlog)
--echo # - DELETE xtest1.xt1, test2.t2 FROM <...> (with one subsequent Table map)
--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 #/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--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 #/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v --read-from-remote-server --user=root --host=localhost --port=$MASTER_MYPORT master-bin.000001
--echo #
@@ -171,7 +171,7 @@ if (!$use_remote_mysqlbinlog)
--echo # - DELETE test1.t1, test2.t2 FROM <...>
--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 #/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--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 #/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows --database=test1 -v -v --read-from-remote-server --user=root --host=localhost --port=$MASTER_MYPORT master-bin.000001
--echo #
@@ -180,7 +180,7 @@ if (!$use_remote_mysqlbinlog)
--echo # No Annotates should appear in this output
--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 #/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--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 #/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows --skip-annotate-row-events -v -v --read-from-remote-server --user=root --host=localhost --port=$MASTER_MYPORT master-bin.000001
# Clean-up

View File

@@ -16,7 +16,7 @@ source include/show_binlog_events.inc;
# escaped).
flush logs;
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_regex /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--replace_regex /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --short-form $MYSQLD_DATADIR/master-bin.000001
drop table t2;
@@ -54,7 +54,7 @@ SELECT * FROM t1;
DROP TABLE t1;
FLUSH LOGS;
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_regex /TIMESTAMP=[0-9]*/TIMESTAMP=XXX/ /# at [0-9]*/# at #/ /(exec_time=|end_log_pos |Xid = |thread_id=|server id |table id |mapped to number )[0-9]+/\1#/ /server v [^ ]*/server v #.##.##/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /GTID [0-9]+-[0-9]+-[0-9]+/GTID #-#-#/ /Gtid list [[][0-9]+-[0-9]+-[0-9]+[\]]/Gtid list [#-#-#]/ /session[.](gtid_domain_id|server_id|gtid_seq_no)=[0-9]+/session.\1=#/ /(^#|created )[0-9]{6} [ 1][0-9]:[0-9]{2}:[0-9]{2}/\1YYMMDD HH:MM:SS/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--replace_regex /TIMESTAMP=[0-9]*/TIMESTAMP=XXX/ /# at [0-9]*/# at #/ /(exec_time=|end_log_pos |Xid = |thread_id=|server id |table id |mapped to number )[0-9]+/\1#/ /server v [^ ]*/server v #.##.##/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /GTID [0-9]+-[0-9]+-[0-9]+/GTID #-#-#/ /Gtid list [[][0-9]+-[0-9]+-[0-9]+[\]]/Gtid list [#-#-#]/ /session[.](gtid_domain_id|server_id|gtid_seq_no)=[0-9]+/session.\1=#/ /(^#|created )[0-9]{6} [ 1][0-9]:[0-9]{2}:[0-9]{2}/\1YYMMDD HH:MM:SS/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows -vv $MYSQLD_DATADIR/master-bin.000003
SET TIMESTAMP=DEFAULT;

View File

@@ -1651,7 +1651,7 @@ FLUSH LOGS;
--echo #
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9-]*[.][0-9]{1,3})[0-9e+-]*[^ ]*[ ]*(.*(FLOAT|DOUBLE).*[*].)/\1... \2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9-]*[.][0-9]{1,3})[0-9e+-]*[^ ]*[ ]*(.*(FLOAT|DOUBLE).*[*].)/\1... \2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLD_DATADIR/master-bin.000001
--echo #
@@ -1731,7 +1731,7 @@ FLUSH LOGS;
--echo #
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9-]*[.][0-9]{1,3})[0-9e+-]*[^ ]*[ ]*(.*(FLOAT|DOUBLE).*[*].)/\1... \2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9-]*[.][0-9]{1,3})[0-9e+-]*[^ ]*[ ]*(.*(FLOAT|DOUBLE).*[*].)/\1... \2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLD_DATADIR/master-bin.000001
--echo #
@@ -1854,7 +1854,7 @@ FLUSH LOGS;
--echo #
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9-]*[.][0-9]{1,3})[0-9e+-]*[^ ]*[ ]*(.*(FLOAT|DOUBLE).*[*].)/\1... \2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9-]*[.][0-9]{1,3})[0-9e+-]*[^ ]*[ ]*(.*(FLOAT|DOUBLE).*[*].)/\1... \2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLD_DATADIR/master-bin.000001
--echo #
@@ -1912,7 +1912,7 @@ FLUSH LOGS;
--echo #
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9-]*[.][0-9]{1,3})[0-9e+-]*[^ ]*[ ]*(.*(FLOAT|DOUBLE).*[*].)/\1... \2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9-]*[.][0-9]{1,3})[0-9e+-]*[^ ]*[ ]*(.*(FLOAT|DOUBLE).*[*].)/\1... \2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLD_DATADIR/master-bin.000001
--echo #

File diff suppressed because it is too large Load Diff

View File

@@ -2264,7 +2264,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
@@ -5273,7 +5273,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
@@ -5673,7 +5673,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
@@ -5694,7 +5694,7 @@ c_1_n INT -- row number
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-2 ddl
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE TABLE t2 (
c_2_1 DATE,
@@ -5706,7 +5706,7 @@ c_2_n INT -- row number
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-3 ddl
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE TABLE t3 (
c_3_1 DATE,
@@ -6311,7 +6311,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;

View File

@@ -2264,7 +2264,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
@@ -2545,7 +2545,7 @@ START TRANSACTION
### @79=1 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.time_zone='SYSTEM'/*!*/;
COMMIT
@@ -2730,7 +2730,7 @@ START TRANSACTION
### @79=2 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -3080,7 +3080,7 @@ START TRANSACTION
### @79=4 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 2
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -3422,7 +3422,7 @@ START TRANSACTION
### @79=1 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -3769,7 +3769,7 @@ START TRANSACTION
### @79=2 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -4114,7 +4114,7 @@ START TRANSACTION
### @79=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -4462,7 +4462,7 @@ START TRANSACTION
### @79=4 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -4644,7 +4644,7 @@ START TRANSACTION
### @79=1 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -4823,7 +4823,7 @@ START TRANSACTION
### @79=2 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -5005,7 +5005,7 @@ START TRANSACTION
### @79=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -5185,7 +5185,7 @@ START TRANSACTION
### @79=4 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -5296,7 +5296,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
@@ -5381,7 +5381,7 @@ START TRANSACTION
### @3=9 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 9
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -5462,7 +5462,7 @@ START TRANSACTION
### @3=7 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 7
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -5515,7 +5515,7 @@ START TRANSACTION
### @3=7 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 7
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -5702,7 +5702,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
@@ -5723,7 +5723,7 @@ c_1_n INT -- row number
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-2 ddl
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE TABLE t2 (
c_2_1 DATE,
@@ -5735,7 +5735,7 @@ c_2_n INT -- row number
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-3 ddl
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE TABLE t3 (
c_3_1 DATE,
@@ -5811,7 +5811,7 @@ START TRANSACTION
### @3=19 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 9
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -5883,7 +5883,7 @@ START TRANSACTION
### @3=29 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 9
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -5955,7 +5955,7 @@ START TRANSACTION
### @3=39 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 9
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -6147,7 +6147,7 @@ START TRANSACTION
### @3=7 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 18
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -6264,7 +6264,7 @@ START TRANSACTION
### @3=7 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 18
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -6350,7 +6350,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
@@ -6398,7 +6398,7 @@ START TRANSACTION
### @3='Wow' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;

View File

@@ -142,7 +142,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
@@ -162,7 +162,7 @@ c2 VARCHAR(20)
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-2 ddl
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE TABLE t2 (
c1 INT,
@@ -242,7 +242,7 @@ COMMIT/*!*/;
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-4 ddl
/*!100001 SET @@session.gtid_seq_no=4*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
TRUNCATE TABLE t1
/*!*/;
@@ -250,7 +250,7 @@ TRUNCATE TABLE t1
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-5 ddl
/*!100001 SET @@session.gtid_seq_no=5*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
TRUNCATE TABLE t1
/*!*/;
@@ -280,7 +280,7 @@ START TRANSACTION
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -319,7 +319,7 @@ START TRANSACTION
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -341,7 +341,7 @@ START TRANSACTION
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -418,7 +418,7 @@ COMMIT/*!*/;
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-10 ddl
/*!100001 SET @@session.gtid_seq_no=10*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
TRUNCATE TABLE t1
/*!*/;
@@ -426,7 +426,7 @@ TRUNCATE TABLE t1
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-11 ddl
/*!100001 SET @@session.gtid_seq_no=11*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
TRUNCATE TABLE t2
/*!*/;
@@ -456,7 +456,7 @@ START TRANSACTION
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -495,7 +495,7 @@ START TRANSACTION
### @2='varchar-3' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -517,7 +517,7 @@ START TRANSACTION
### @2='varchar-2' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -525,7 +525,7 @@ COMMIT
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-15 ddl
/*!100001 SET @@session.gtid_seq_no=15*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
TRUNCATE TABLE t1
/*!*/;
@@ -533,7 +533,7 @@ TRUNCATE TABLE t1
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-16 ddl
/*!100001 SET @@session.gtid_seq_no=16*//*!*/;
# at #
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
TRUNCATE TABLE t2
/*!*/;

View File

@@ -113,7 +113,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -129,7 +129,7 @@ CREATE DATABASE test1
#010909 4:46:40 server id # end_log_pos # GTID 0-1-2 ddl
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE DATABASE test2
/*!*/;
@@ -137,7 +137,7 @@ CREATE DATABASE test2
#010909 4:46:40 server id # end_log_pos # GTID 0-1-3 ddl
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE DATABASE test3
/*!*/;
@@ -164,7 +164,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -191,7 +191,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -218,7 +218,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -260,7 +260,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 6
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -287,7 +287,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -316,7 +316,7 @@ START TRANSACTION
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -351,7 +351,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -394,7 +394,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -407,7 +407,7 @@ START TRANSACTION
# at #
# at #
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -420,7 +420,7 @@ START TRANSACTION
# at #
# at #
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -450,7 +450,7 @@ START TRANSACTION
### WHERE
### @1=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
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -463,7 +463,7 @@ START TRANSACTION
# at #
# at #
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -476,7 +476,7 @@ START TRANSACTION
# at #
# at #
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -510,7 +510,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -526,7 +526,7 @@ CREATE DATABASE test1
#010909 4:46:40 server id # end_log_pos # GTID 0-1-2 ddl
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE DATABASE test2
/*!*/;
@@ -534,7 +534,7 @@ CREATE DATABASE test2
#010909 4:46:40 server id # end_log_pos # GTID 0-1-3 ddl
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE DATABASE test3
/*!*/;
@@ -559,7 +559,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -584,7 +584,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -609,7 +609,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -647,7 +647,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 6
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -672,7 +672,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -697,7 +697,7 @@ START TRANSACTION
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -736,7 +736,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -752,7 +752,7 @@ CREATE DATABASE test1
#010909 4:46:40 server id # end_log_pos # GTID 0-1-2 ddl
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE DATABASE test2
/*!*/;
@@ -760,7 +760,7 @@ CREATE DATABASE test2
#010909 4:46:40 server id # end_log_pos # GTID 0-1-3 ddl
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE DATABASE test3
/*!*/;
@@ -787,7 +787,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -814,7 +814,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -841,7 +841,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -883,7 +883,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 6
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -910,7 +910,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -939,7 +939,7 @@ START TRANSACTION
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -974,7 +974,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -1017,7 +1017,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -1030,7 +1030,7 @@ START TRANSACTION
# at #
# at #
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -1043,7 +1043,7 @@ START TRANSACTION
# at #
# at #
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -1073,7 +1073,7 @@ START TRANSACTION
### WHERE
### @1=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
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -1086,7 +1086,7 @@ START TRANSACTION
# at #
# at #
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -1099,7 +1099,7 @@ START TRANSACTION
# at #
# at #
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -1133,7 +1133,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -1149,7 +1149,7 @@ CREATE DATABASE test1
#010909 4:46:40 server id # end_log_pos # GTID 0-1-2 ddl
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE DATABASE test2
/*!*/;
@@ -1157,7 +1157,7 @@ CREATE DATABASE test2
#010909 4:46:40 server id # end_log_pos # GTID 0-1-3 ddl
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE DATABASE test3
/*!*/;
@@ -1181,7 +1181,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -1205,7 +1205,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -1229,7 +1229,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -1266,7 +1266,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 6
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -1290,7 +1290,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -1314,7 +1314,7 @@ START TRANSACTION
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;

View File

@@ -88,7 +88,7 @@ DELIMITER /*!*/;
/*!100001 SET @@session.server_id=#*//*!*/;
/*!100001 SET @@session.gtid_seq_no=#*//*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=XXX/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
@@ -118,7 +118,7 @@ START TRANSACTION
### @1='ä(i1)' /* VARSTRING(30) meta=30 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
COMMIT
/*!*/;
@@ -139,7 +139,7 @@ START TRANSACTION
### @1='ä(i2)' /* VARSTRING(30) meta=30 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
COMMIT
/*!*/;
@@ -160,7 +160,7 @@ START TRANSACTION
### @1='ä(i3)' /* VARSTRING(30) meta=30 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
COMMIT
/*!*/;
@@ -181,7 +181,7 @@ START TRANSACTION
### @1='ä(p1)' /* VARSTRING(30) meta=30 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
COMMIT
/*!*/;
@@ -202,7 +202,7 @@ START TRANSACTION
### @1='ä(p2)' /* VARSTRING(30) meta=30 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
COMMIT
/*!*/;
@@ -223,7 +223,7 @@ START TRANSACTION
### @1='ä(p3)' /* VARSTRING(30) meta=30 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
COMMIT
/*!*/;
@@ -231,7 +231,7 @@ COMMIT
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX GTID #-#-# ddl
/*!100001 SET @@session.gtid_seq_no=#*//*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
DROP TABLE `t1` /* generated by server */
/*!*/;

View File

@@ -47,7 +47,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
use `new_test1`/*!*/;
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -81,7 +81,7 @@ START TRANSACTION
### @2=2 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 2
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -89,7 +89,7 @@ COMMIT
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-3 ddl
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test2`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
CREATE TABLE t2 (a INT)
@@ -114,7 +114,7 @@ START TRANSACTION
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 2
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -136,7 +136,7 @@ START TRANSACTION
### @2=1 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -145,7 +145,7 @@ COMMIT
/*!100001 SET @@session.gtid_seq_no=6*//*!*/;
# at #
use `new_test3`/*!*/;
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE TABLE t3 (a INT)
/*!*/;
@@ -169,7 +169,7 @@ START TRANSACTION
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 2
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -191,7 +191,7 @@ START TRANSACTION
### @2=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -230,7 +230,7 @@ START TRANSACTION
### @2=6 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 5
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -251,7 +251,7 @@ START TRANSACTION
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -288,7 +288,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
use `new_test1`/*!*/;
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -322,7 +322,7 @@ START TRANSACTION
### @2=2 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 2
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -330,7 +330,7 @@ COMMIT
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-3 ddl
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test2`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
CREATE TABLE t2 (a INT)
@@ -355,7 +355,7 @@ START TRANSACTION
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 2
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -377,7 +377,7 @@ START TRANSACTION
### @2=1 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -386,7 +386,7 @@ COMMIT
/*!100001 SET @@session.gtid_seq_no=6*//*!*/;
# at #
use `new_test3`/*!*/;
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE TABLE t3 (a INT)
/*!*/;
@@ -410,7 +410,7 @@ START TRANSACTION
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 2
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -432,7 +432,7 @@ START TRANSACTION
### @2=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -471,7 +471,7 @@ START TRANSACTION
### @2=6 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 5
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -492,7 +492,7 @@ START TRANSACTION
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;

View File

@@ -90,7 +90,7 @@ DELIMITER /*!*/;
/*!100001 SET @@session.server_id=#*//*!*/;
/*!100001 SET @@session.gtid_seq_no=#*//*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=XXX/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
@@ -109,12 +109,12 @@ CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8)
START TRANSACTION
/*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
INSERT INTO t1 VALUES ('ä(i1)')
/*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
COMMIT
/*!*/;
@@ -124,12 +124,12 @@ COMMIT
START TRANSACTION
/*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
INSERT INTO t1 VALUES ('ä(i2)')
/*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
COMMIT
/*!*/;
@@ -139,12 +139,12 @@ COMMIT
START TRANSACTION
/*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
INSERT INTO t1 VALUES ('ä(i3)')
/*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
COMMIT
/*!*/;
@@ -154,12 +154,12 @@ COMMIT
START TRANSACTION
/*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
INSERT INTO t1 VALUES ('ä(p1)')
/*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
COMMIT
/*!*/;
@@ -169,12 +169,12 @@ COMMIT
START TRANSACTION
/*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
INSERT INTO t1 VALUES ('ä(p2)')
/*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
COMMIT
/*!*/;
@@ -184,12 +184,12 @@ COMMIT
START TRANSACTION
/*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
INSERT INTO t1 VALUES ('ä(p3)')
/*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
COMMIT
/*!*/;
@@ -197,7 +197,7 @@ COMMIT
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX GTID #-#-# ddl
/*!100001 SET @@session.gtid_seq_no=#*//*!*/;
# at #
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#YYMMDD HH:MM:SS server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=XXX/*!*/;
DROP TABLE `t1` /* generated by server */
/*!*/;

View File

@@ -56,7 +56,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#010909 9:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 9:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
@@ -418,7 +418,7 @@ START TRANSACTION/*!*/;
### @8='' /* BLOB/TEXT meta=2 nullable=1 is_null=0 */
COMMIT
/*!*/;
#010909 9:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 9:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;

View File

@@ -478,14 +478,14 @@ DROP TABLE t1;
FLUSH LOGS;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9]*[.][0-9]{1,3})[0-9e+-]*[^ ]*(.*(FLOAT|DOUBLE).*[*].)/\1...\2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9]*[.][0-9]{1,3})[0-9e+-]*[^ ]*(.*(FLOAT|DOUBLE).*[*].)/\1...\2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLD_DATADIR/master-bin.000001
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9]*[.][0-9]{1,3})[0-9e+-]*[^ ]*(.*(FLOAT|DOUBLE).*[*].)/\1...\2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9]*[.][0-9]{1,3})[0-9e+-]*[^ ]*(.*(FLOAT|DOUBLE).*[*].)/\1...\2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /xid=\d*/xid=<xid>/
--error 1
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLD_DATADIR/master-bin.000002 2>&1
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9]*[.][0-9]{1,3})[0-9e+-]*[^ ]*(.*(FLOAT|DOUBLE).*[*].)/\1...\2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9]*[.][0-9]{1,3})[0-9e+-]*[^ ]*(.*(FLOAT|DOUBLE).*[*].)/\1...\2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLD_DATADIR/master-bin.000003

View File

@@ -150,12 +150,10 @@ FLUSH LOGS;
--echo #
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLD_DATADIR/master-bin.000001
--echo #
--echo # Cleanup.
--echo #
DROP TABLE t1, t2;

View File

@@ -59,7 +59,7 @@ flush logs;
--echo #
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 #/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--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 #/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--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 #
@@ -70,7 +70,7 @@ let $MYSQLD_DATADIR= `select @@datadir`;
--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 #/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--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 #/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--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;

View File

@@ -55,7 +55,7 @@ FLUSH LOGS;
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLD_DATADIR/master-bin.000001
--echo # < CASE 1 >
@@ -64,7 +64,7 @@ let $MYSQLD_DATADIR= `select @@datadir`;
let $MYSQLD_DATADIR= `select @@datadir`;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /collation_server=[0-9]+/collation_server=X/ /character_set_client=[0-9]+/character_set_client=X/ /collation_connection=[0-9]+/collation_connection=X/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG -B --base64-output=decode-rows -v -v $MYSQLD_DATADIR/master-bin.000001
--echo # < CASE 1 >

View File

@@ -117,7 +117,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -133,7 +133,7 @@ CREATE DATABASE test1
#010909 4:46:40 server id # end_log_pos # GTID 0-1-2 ddl
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE DATABASE test2
/*!*/;
@@ -141,7 +141,7 @@ CREATE DATABASE test2
#010909 4:46:40 server id # end_log_pos # GTID 0-1-3 ddl
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE DATABASE test3
/*!*/;
@@ -168,7 +168,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -195,7 +195,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -222,7 +222,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -264,7 +264,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 6
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -291,7 +291,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -320,7 +320,7 @@ START TRANSACTION
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -358,7 +358,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -401,7 +401,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -414,7 +414,7 @@ START TRANSACTION
# at #
# at #
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -427,7 +427,7 @@ START TRANSACTION
# at #
# at #
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -457,7 +457,7 @@ START TRANSACTION
### WHERE
### @1=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
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -470,7 +470,7 @@ START TRANSACTION
# at #
# at #
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -483,7 +483,7 @@ START TRANSACTION
# at #
# at #
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -520,7 +520,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0/*!*/;
@@ -536,7 +536,7 @@ CREATE DATABASE test1
#010909 4:46:40 server id # end_log_pos # GTID 0-1-2 ddl
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE DATABASE test2
/*!*/;
@@ -544,7 +544,7 @@ CREATE DATABASE test2
#010909 4:46:40 server id # end_log_pos # GTID 0-1-3 ddl
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE DATABASE test3
/*!*/;
@@ -568,7 +568,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -592,7 +592,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -616,7 +616,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -653,7 +653,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 6
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -677,7 +677,7 @@ START TRANSACTION
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -701,7 +701,7 @@ START TRANSACTION
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 3
# at #
#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 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;

View File

@@ -196,7 +196,7 @@ ROLLBACK/*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
@@ -213,7 +213,7 @@ CREATE TABLE t1 (a INT, b INT, c INT)
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-2 ddl
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
CREATE TABLE t2 (a INT, b INT, c INT)
/*!*/;
@@ -222,7 +222,7 @@ CREATE TABLE t2 (a INT, b INT, c INT)
/*!100001 SET @@session.server_id=2*//*!*/;
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
ALTER TABLE t1 ENGINE=BLACKHOLE
/*!*/;
@@ -241,7 +241,7 @@ START TRANSACTION
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Write_rows: table id # flags: STMT_END_F
# Number of rows: 4
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -259,7 +259,7 @@ START TRANSACTION
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Write_rows: table id # flags: STMT_END_F
# Number of rows: 4
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -277,7 +277,7 @@ START TRANSACTION
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Update_rows: table id # flags: STMT_END_F
# Number of rows: 2
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -295,7 +295,7 @@ START TRANSACTION
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Delete_rows: table id # flags: STMT_END_F
# Number of rows: 2
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -313,7 +313,7 @@ START TRANSACTION
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Write_rows: table id # flags: STMT_END_F
# Number of rows: 4
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -321,7 +321,7 @@ COMMIT
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-8 ddl
/*!100001 SET @@session.gtid_seq_no=8*//*!*/;
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
ALTER TABLE t1 ADD PRIMARY KEY pk_t1 (a,b)
/*!*/;
@@ -339,7 +339,7 @@ START TRANSACTION
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Write_rows: table id # flags: STMT_END_F
# Number of rows: 4
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -357,7 +357,7 @@ START TRANSACTION
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Update_rows: table id # flags: STMT_END_F
# Number of rows: 2
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -375,7 +375,7 @@ START TRANSACTION
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Delete_rows: table id # flags: STMT_END_F
# Number of rows: 2
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -383,7 +383,7 @@ COMMIT
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-12 ddl
/*!100001 SET @@session.gtid_seq_no=12*//*!*/;
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
ALTER TABLE t1 DROP PRIMARY KEY, ADD KEY key_t1 (a)
/*!*/;
@@ -401,7 +401,7 @@ START TRANSACTION
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Write_rows: table id # flags: STMT_END_F
# Number of rows: 4
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -419,7 +419,7 @@ START TRANSACTION
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Update_rows: table id # flags: STMT_END_F
# Number of rows: 2
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -437,7 +437,7 @@ START TRANSACTION
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Delete_rows: table id # flags: STMT_END_F
# Number of rows: 2
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
COMMIT
/*!*/;
@@ -445,7 +445,7 @@ COMMIT
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-16 ddl
/*!100001 SET @@session.gtid_seq_no=16*//*!*/;
# at #
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
DROP TABLE IF EXISTS `t1`,`t2` /* generated by server */
/*!*/;

View File

@@ -43,7 +43,7 @@ FLUSH LOGS;
--eval show binlog events in 'slave-bin.000001' from $binlog_start_pos
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 #/ /CRC32 0x[0-9a-f]*/CRC32 XXX/
--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 #/ /CRC32 0x[0-9a-f]*/CRC32 XXX/ /xid=\d*/xid=<xid>/
--exec $MYSQL_BINLOG --base64-output=decode-rows $MYSQLD_DATADIR/slave-bin.000001
source include/rpl_end.inc;

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
/*
Copyright (c) 2000, 2019, Oracle and/or its affiliates.
Copyright (c) 2010, 2020, MariaDB
Copyright (c) 2010, 2021, MariaDB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -24,6 +24,9 @@
enum ddl_log_entry_code
{
/*
DDL_LOG_UNKOWN
Here mainly to detect blocks that are all zero
DDL_LOG_EXECUTE_CODE:
This is a code that indicates that this is a log entry to
be executed, from this entry a linked list of log entries
@@ -34,48 +37,97 @@ enum ddl_log_entry_code
DDL_IGNORE_LOG_ENTRY_CODE:
An entry that is to be ignored
*/
DDL_LOG_EXECUTE_CODE = 'e',
DDL_LOG_ENTRY_CODE = 'l',
DDL_IGNORE_LOG_ENTRY_CODE = 'i'
DDL_LOG_UNKNOWN= 0,
DDL_LOG_EXECUTE_CODE= 1,
DDL_LOG_ENTRY_CODE= 2,
DDL_IGNORE_LOG_ENTRY_CODE= 3,
DDL_LOG_ENTRY_CODE_LAST= 4
};
/*
When adding things below, also add an entry to ddl_log_entry_phases in
ddl_log.cc
*/
enum ddl_log_action_code
{
/*
The type of action that a DDL_LOG_ENTRY_CODE entry is to
perform.
DDL_LOG_DELETE_ACTION:
Delete an entity
DDL_LOG_RENAME_ACTION:
Rename an entity
DDL_LOG_REPLACE_ACTION:
Rename an entity after removing the previous entry with the
new name, that is replace this entry.
DDL_LOG_EXCHANGE_ACTION:
Exchange two entities by renaming them a -> tmp, b -> a, tmp -> b.
*/
DDL_LOG_DELETE_ACTION = 'd',
DDL_LOG_RENAME_ACTION = 'r',
DDL_LOG_REPLACE_ACTION = 's',
DDL_LOG_EXCHANGE_ACTION = 'e'
DDL_LOG_UNKNOWN_ACTION= 0,
/* Delete a .frm file or a table in the partition engine */
DDL_LOG_DELETE_ACTION= 1,
/* Rename a .frm fire a table in the partition engine */
DDL_LOG_RENAME_ACTION= 2,
/*
Rename an entity after removing the previous entry with the
new name, that is replace this entry.
*/
DDL_LOG_REPLACE_ACTION= 3,
/* Exchange two entities by renaming them a -> tmp, b -> a, tmp -> b */
DDL_LOG_EXCHANGE_ACTION= 4,
/*
log do_rename(): Rename of .frm file, table, stat_tables and triggers
*/
DDL_LOG_RENAME_TABLE_ACTION= 5,
DDL_LOG_RENAME_VIEW_ACTION= 6,
DDL_LOG_LAST_ACTION /* End marker */
};
/* Number of phases for each ddl_log_action_code */
extern const uchar ddl_log_entry_phases[DDL_LOG_LAST_ACTION];
enum enum_ddl_log_exchange_phase {
EXCH_PHASE_NAME_TO_TEMP= 0,
EXCH_PHASE_FROM_TO_NAME= 1,
EXCH_PHASE_TEMP_TO_FROM= 2
};
enum enum_ddl_log_rename_table_phase {
DDL_RENAME_PHASE_TRIGGER= 0,
DDL_RENAME_PHASE_STAT,
DDL_RENAME_PHASE_TABLE,
};
/*
Setting ddl_log_entry.phase to this has the same effect as setting
the phase to the maximum phase (..PHASE_END) for an entry.
*/
#define DDL_LOG_FINAL_PHASE ((uchar) 0xff)
typedef struct st_ddl_log_entry
{
const char *name;
const char *from_name;
const char *handler_name;
const char *tmp_name;
LEX_CSTRING name;
LEX_CSTRING from_name;
LEX_CSTRING handler_name;
LEX_CSTRING tmp_name;
LEX_CSTRING db;
LEX_CSTRING from_db;
LEX_CSTRING from_handler_name;
uchar uuid[MY_UUID_SIZE]; // UUID for new frm file
ulonglong xid; // Xid stored in the binary log
/*
unique_id can be used to store a unique number to check current state.
Currently it is used to store new size of frm file, link to another ddl log
entry or store an a uniq version for a storage engine in alter table.
For execute entries this is reused as an execute counter to ensure we
don't repeat an entry too many times if executing the entry fails.
*/
ulonglong unique_id;
uint next_entry;
uint entry_pos;
enum ddl_log_entry_code entry_type;
uint entry_pos; // Set by write_dll_log_entry()
uint16 flags; // Flags unique for each command
enum ddl_log_entry_code entry_type; // Set automatically
enum ddl_log_action_code action_type;
/*
Most actions have only one phase. REPLACE does however have two
@@ -83,7 +135,7 @@ typedef struct st_ddl_log_entry
there was one there before and the second phase renames the
old name to the new name.
*/
char phase;
uchar phase; // set automatically
} DDL_LOG_ENTRY;
typedef struct st_ddl_log_memory_entry
@@ -95,17 +147,63 @@ typedef struct st_ddl_log_memory_entry
} DDL_LOG_MEMORY_ENTRY;
/*
State of the ddl log during execution of a DDL.
A ddl log state has one execute entry (main entry pointing to the first
action entry) and many 'action entries' linked in a list in the order
they should be executed.
One recovery the log is parsed and all execute entries will be executed.
All entries are stored as separate blocks in the ddl recovery file.
*/
typedef struct st_ddl_log_state
{
/* List of ddl log entries */
DDL_LOG_MEMORY_ENTRY *list;
/* One execute entry per list */
DDL_LOG_MEMORY_ENTRY *execute_entry;
} DDL_LOG_STATE;
/* These functions are for recovery */
bool ddl_log_initialize();
void ddl_log_release();
bool ddl_log_close_binlogged_events(HASH *xids);
int ddl_log_execute_recovery();
/* functions for updating the ddl log */
bool ddl_log_write_entry(DDL_LOG_ENTRY *ddl_log_entry,
DDL_LOG_MEMORY_ENTRY **active_entry);
bool ddl_log_write_execute_entry(uint first_entry,
bool complete,
DDL_LOG_MEMORY_ENTRY **active_entry);
bool ddl_log_increment_phase(uint entry_no);
DDL_LOG_MEMORY_ENTRY **active_entry);
bool ddl_log_disable_execute_entry(DDL_LOG_MEMORY_ENTRY **active_entry);
void ddl_log_complete(DDL_LOG_STATE *ddl_log_state);
void ddl_log_revert(THD *thd, DDL_LOG_STATE *ddl_log_state);
bool ddl_log_update_phase(DDL_LOG_STATE *entry, uchar phase);
bool ddl_log_update_xid(DDL_LOG_STATE *state, ulonglong xid);
bool ddl_log_disable_entry(DDL_LOG_STATE *state);
bool ddl_log_increment_phase(uint entry_pos);
void ddl_log_release_memory_entry(DDL_LOG_MEMORY_ENTRY *log_entry);
bool ddl_log_sync();
void ddl_log_release();
void ddl_log_execute_recovery();
bool ddl_log_execute_entry(THD *thd, uint first_entry);
void ddl_log_release_entries(DDL_LOG_STATE *ddl_log_state);
bool ddl_log_rename_table(THD *thd, DDL_LOG_STATE *ddl_state,
handlerton *hton,
const LEX_CSTRING *org_db,
const LEX_CSTRING *org_alias,
const LEX_CSTRING *new_db,
const LEX_CSTRING *new_alias);
bool ddl_log_rename_view(THD *thd, DDL_LOG_STATE *ddl_state,
const LEX_CSTRING *org_db,
const LEX_CSTRING *org_alias,
const LEX_CSTRING *new_db,
const LEX_CSTRING *new_alias);
extern mysql_mutex_t LOCK_gdl;
#endif /* DDL_LOG_INCLUDED */

View File

@@ -1628,3 +1628,74 @@ bool debug_sync_set_action(THD *thd, const char *action_str, size_t len)
/* prevent linker/lib warning about file without public symbols */
int debug_sync_dummy;
#endif /* defined(ENABLED_DEBUG_SYNC) */
/**
Debug utility to do crash after a set number of executions
The user variable, either @debug_crash_counter or @debug_error_counter,
is decremented each time debug_crash() or debug_simulate_error is called
if the keyword is set with @@debug_push, like
@@debug_push="d+frm_data_type_info_emulate"
If the variable is not set or is not an integer it will be ignored.
*/
#ifndef DBUG_OFF
static const LEX_CSTRING debug_crash_counter=
{ STRING_WITH_LEN("debug_crash_counter") };
static const LEX_CSTRING debug_error_counter=
{ STRING_WITH_LEN("debug_error_counter") };
static bool debug_decrement_counter(const LEX_CSTRING *name)
{
THD *thd= current_thd;
user_var_entry *entry= (user_var_entry*)
my_hash_search(&thd->user_vars, (uchar*) name->str, name->length);
if (!entry || entry->type != INT_RESULT || ! entry->value)
return 0;
(*(ulonglong*) entry->value)= (*(ulonglong*) entry->value)-1;
return !*(ulonglong*) entry->value;
}
void debug_crash_here(const char *keyword)
{
DBUG_ENTER("debug_crash_here");
DBUG_PRINT("enter", ("keyword: %s", keyword));
DBUG_EXECUTE_IF(keyword,
if (debug_decrement_counter(&debug_crash_counter))
{
my_printf_error(ER_INTERNAL_ERROR,
"Crashing at %s",
MYF(ME_ERROR_LOG | ME_NOTE), keyword);
DBUG_SUICIDE();
});
DBUG_VOID_RETURN;
}
/*
This can be used as debug_counter to simulate an error at a specific
position.
Typical usage would be
if (debug_simualte_error("keyword"))
error= 1;
*/
bool debug_simulate_error(const char *keyword, uint error)
{
DBUG_ENTER("debug_crash_here");
DBUG_PRINT("enter", ("keyword: %s", keyword));
DBUG_EXECUTE_IF(keyword,
if (debug_decrement_counter(&debug_error_counter))
{
my_printf_error(error,
"Simulating error for '%s'",
MYF(ME_ERROR_LOG), keyword);
DBUG_RETURN(1);
});
DBUG_RETURN(0);
}
#endif /* DBUG_OFF */

View File

@@ -53,4 +53,12 @@ static inline bool debug_sync_set_action(THD *, const char *, size_t)
{ return false; }
#endif /* defined(ENABLED_DEBUG_SYNC) */
#ifndef DBUG_OFF
void debug_crash_here(const char *keyword);
bool debug_simulate_error(const char *keyword, uint error);
#else
#define debug_crash_here(A) do { } while(0)
#define debug_simulate_error(A, B) 0
#endif
#endif /* DEBUG_SYNC_INCLUDED */

View File

@@ -2727,7 +2727,7 @@ const char *get_canonical_filename(handler *file, const char *path,
char *tmp_path)
{
uint i;
if (lower_case_table_names != 2 || (file->ha_table_flags() & HA_FILE_BASED))
if (!file->needs_lower_case_filenames())
return path;
for (i= 0; i <= mysql_tmpdir_list.max; i++)

View File

@@ -5100,6 +5100,17 @@ public:
const KEY_PART_INFO &old_part,
const KEY_PART_INFO &new_part) const;
/*
If lower_case_table_names == 2 (case-preserving but case-insensitive
file system) and the storage is not HA_FILE_BASED, we need to provide
a lowercase file name for the engine.
*/
inline bool needs_lower_case_filenames()
{
return (lower_case_table_names == 2 && !(ha_table_flags() & HA_FILE_BASED));
}
protected:
Handler_share *get_ha_share_ptr();
void set_ha_share_ptr(Handler_share *arg_ha_share);

View File

@@ -39,6 +39,7 @@
#include "rpl_rli.h"
#include "sql_audit.h"
#include "mysqld.h"
#include "ddl_log.h"
#include <my_dir.h>
#include <m_ctype.h> // For test_if_number
@@ -10454,12 +10455,23 @@ start_binlog_background_thread()
}
/*
Execute recovery of the binary log
@param do_xa
if true: Collect all Xid events and call ha_recover().
if false: Collect only Xid events from Query events. This is
used to disable entries in the ddl recovery log that
are found in the binary log (and thus already executed and
logged and thus don't have to be redone).
*/
int TC_LOG_BINLOG::recover(LOG_INFO *linfo, const char *last_log_name,
IO_CACHE *first_log,
Format_description_log_event *fdle, bool do_xa)
{
Log_event *ev= NULL;
HASH xids;
HASH xids, ddl_log_ids;
MEM_ROOT mem_root;
char binlog_checkpoint_name[FN_REFLEN];
bool binlog_checkpoint_found;
@@ -10472,16 +10484,19 @@ int TC_LOG_BINLOG::recover(LOG_INFO *linfo, const char *last_log_name,
bool last_gtid_standalone= false;
bool last_gtid_valid= false;
#endif
DBUG_ENTER("TC_LOG_BINLOG::recover");
if (! fdle->is_valid() ||
(do_xa && my_hash_init(key_memory_binlog_recover_exec, &xids,
&my_charset_bin, TC_LOG_PAGE_SIZE/3, 0,
sizeof(my_xid), 0, 0, MYF(0))))
(my_hash_init(key_memory_binlog_recover_exec, &xids,
&my_charset_bin, TC_LOG_PAGE_SIZE/3, 0,
sizeof(my_xid), 0, 0, MYF(0))) ||
(my_hash_init(key_memory_binlog_recover_exec, &ddl_log_ids,
&my_charset_bin, 64, 0,
sizeof(my_xid), 0, 0, MYF(0))))
goto err1;
if (do_xa)
init_alloc_root(key_memory_binlog_recover_exec, &mem_root,
TC_LOG_PAGE_SIZE, TC_LOG_PAGE_SIZE, MYF(0));
init_alloc_root(key_memory_binlog_recover_exec, &mem_root,
TC_LOG_PAGE_SIZE, TC_LOG_PAGE_SIZE, MYF(0));
fdle->flags&= ~LOG_EVENT_BINLOG_IN_USE_F; // abort on the first error
@@ -10516,6 +10531,20 @@ int TC_LOG_BINLOG::recover(LOG_INFO *linfo, const char *last_log_name,
}
break;
}
case QUERY_EVENT:
{
Query_log_event *query_ev= (Query_log_event*) ev;
if (query_ev->xid)
{
DBUG_ASSERT(sizeof(query_ev->xid) == sizeof(my_xid));
uchar *x= (uchar *) memdup_root(&mem_root,
(uchar*) &query_ev->xid,
sizeof(query_ev->xid));
if (!x || my_hash_insert(&ddl_log_ids, x))
goto err2;
}
break;
}
case BINLOG_CHECKPOINT_EVENT:
if (first_round && do_xa)
{
@@ -10597,8 +10626,6 @@ int TC_LOG_BINLOG::recover(LOG_INFO *linfo, const char *last_log_name,
ev= NULL;
}
if (!do_xa)
break;
/*
If the last binlog checkpoint event points to an older log, we have to
scan all logs from there also, to get all possible XIDs to recover.
@@ -10656,11 +10683,13 @@ int TC_LOG_BINLOG::recover(LOG_INFO *linfo, const char *last_log_name,
{
if (ha_recover(&xids))
goto err2;
free_root(&mem_root, MYF(0));
my_hash_free(&xids);
}
return 0;
if (ddl_log_close_binlogged_events(&ddl_log_ids))
goto err2;
free_root(&mem_root, MYF(0));
my_hash_free(&xids);
my_hash_free(&ddl_log_ids);
DBUG_RETURN(0);
err2:
delete ev;
@@ -10669,17 +10698,16 @@ err2:
end_io_cache(&log);
mysql_file_close(file, MYF(MY_WME));
}
if (do_xa)
{
free_root(&mem_root, MYF(0));
my_hash_free(&xids);
}
free_root(&mem_root, MYF(0));
my_hash_free(&xids);
my_hash_free(&ddl_log_ids);
err1:
sql_print_error("Crash recovery failed. Either correct the problem "
"(if it's, for example, out of memory error) and restart, "
"or delete (or rename) binary log and start mysqld with "
"--tc-heuristic-recover={commit|rollback}");
return 1;
DBUG_RETURN(1);
}

View File

@@ -1373,6 +1373,7 @@ code_name(int code)
case Q_TABLE_MAP_FOR_UPDATE_CODE: return "Q_TABLE_MAP_FOR_UPDATE_CODE";
case Q_MASTER_DATA_WRITTEN_CODE: return "Q_MASTER_DATA_WRITTEN_CODE";
case Q_HRNOW: return "Q_HRNOW";
case Q_XID: return "XID";
}
sprintf(buf, "CODE#%d", code);
return buf;
@@ -1421,7 +1422,7 @@ Query_log_event::Query_log_event(const uchar *buf, uint event_len,
flags2_inited(0), sql_mode_inited(0), charset_inited(0), flags2(0),
auto_increment_increment(1), auto_increment_offset(1),
time_zone_len(0), lc_time_names_number(0), charset_database_number(0),
table_map_for_update(0), master_data_written(0)
table_map_for_update(0), xid(0), master_data_written(0)
{
ulong data_len;
uint32 tmp;
@@ -1605,6 +1606,13 @@ Query_log_event::Query_log_event(const uchar *buf, uint event_len,
pos+= 3;
break;
}
case Q_XID:
{
CHECK_SPACE(pos, end, 8);
xid= uint8korr(pos);
pos+= 8;
break;
}
default:
/* That's why you must write status vars in growing order of code */
DBUG_PRINT("info",("Query_log_event has unknown status vars (first has\

View File

@@ -319,6 +319,7 @@ class String;
#define Q_INVOKER 11
#define Q_HRNOW 128
#define Q_XID 129
/* Intvar event post-header */
@@ -2125,6 +2126,8 @@ public:
statement, for other query statements, this will be zero.
*/
ulonglong table_map_for_update;
/* Xid for the event, if such exists */
ulonglong xid;
/*
Holds the original length of a Query_log_event that comes from a
master of version < 5.0 (i.e., binlog_version < 4). When the IO

View File

@@ -1820,9 +1820,10 @@ bool Query_log_event::print_query_header(IO_CACHE* file,
{
if (print_header(file, print_event_info, FALSE) ||
my_b_printf(file,
"\t%s\tthread_id=%lu\texec_time=%lu\terror_code=%d\n",
"\t%s\tthread_id=%lu\texec_time=%lu\terror_code=%d"
"\txid=%lu\n",
get_type_str(), (ulong) thread_id, (ulong) exec_time,
error_code))
error_code, (ulong) xid))
goto err;
}

View File

@@ -1294,6 +1294,15 @@ bool Query_log_event::write()
int3store(start, when_sec_part);
start+= 3;
}
/* xid's is used with ddl_log handling */
if (thd && thd->binlog_xid)
{
*start++= Q_XID;
int8store(start, thd->query_id);
start+= 8;
}
/*
NOTE: When adding new status vars, please don't forget to update
the MAX_SIZE_LOG_EVENT_STATUS in log_event.h and update the function

View File

@@ -571,7 +571,7 @@ char log_error_file[FN_REFLEN], glob_hostname[FN_REFLEN], *opt_log_basename;
char mysql_real_data_home[FN_REFLEN],
lc_messages_dir[FN_REFLEN], reg_ext[FN_EXTLEN],
mysql_charsets_dir[FN_REFLEN],
*opt_init_file, *opt_tc_log_file;
*opt_init_file, *opt_tc_log_file, *opt_ddl_recovery_file;
char *lc_messages_dir_ptr= lc_messages_dir, *log_error_file_ptr;
char mysql_unpacked_real_data_home[FN_REFLEN];
size_t mysql_unpacked_real_data_home_len;
@@ -5269,6 +5269,9 @@ static int init_server_components()
}
#endif
if (ddl_log_initialize())
unireg_abort(1);
tc_log= get_tc_log_implementation();
if (tc_log->open(opt_bin_log ? opt_bin_logname : opt_tc_log_file))
@@ -5278,9 +5281,7 @@ static int init_server_components()
}
if (ha_recover(0))
{
unireg_abort(1);
}
if (opt_bin_log)
{
@@ -5680,7 +5681,8 @@ int mysqld_main(int argc, char **argv)
initialize_information_schema_acl();
ddl_log_execute_recovery();
if (ddl_log_execute_recovery() > 0)
unireg_abort(1);
/*
Change EVENTS_ORIGINAL to EVENTS_OFF (the default value) as there is no
@@ -6457,6 +6459,10 @@ struct my_option my_long_options[]=
"relay logs",
&opt_relaylog_index_name, &opt_relaylog_index_name, 0, GET_STR,
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"log-ddl-recovery", 0,
"Path to file used for recovery of DDL statements after a crash",
&opt_ddl_recovery_file, &opt_ddl_recovery_file, 0, GET_STR,
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"log-isam", OPT_ISAM_LOG, "Log all MyISAM changes to file.",
&myisam_log_filename, &myisam_log_filename, 0, GET_STR,
OPT_ARG, 0, 0, 0, 0, 0, 0},
@@ -7584,6 +7590,7 @@ static int mysql_init_variables(void)
opt_logname= opt_binlog_index_name= opt_slow_logname= 0;
opt_log_basename= 0;
opt_tc_log_file= (char *)"tc.log"; // no hostname in tc_log file name !
opt_ddl_recovery_file= (char *) "ddl_recovery.log";
opt_secure_auth= 0;
opt_bootstrap= opt_myisam_log= 0;
disable_log_notes= 0;

View File

@@ -207,7 +207,7 @@ extern MYSQL_PLUGIN_IMPORT char glob_hostname[FN_REFLEN];
extern char mysql_home[FN_REFLEN];
extern char pidfile_name[FN_REFLEN], system_time_zone[30], *opt_init_file;
extern char default_logfile_name[FN_REFLEN];
extern char log_error_file[FN_REFLEN], *opt_tc_log_file;
extern char log_error_file[FN_REFLEN], *opt_tc_log_file, *opt_ddl_recovery_file;
extern const double log_10[309];
extern ulonglong keybuff_size;
extern ulonglong thd_startup_options;

View File

@@ -24,7 +24,9 @@
#include "sql_priv.h"
#include "parse_file.h"
#include "unireg.h" // CREATE_MODE
#include "sql_table.h" // build_table_filename
#include "sql_table.h" // build_table_filename
#include "debug_sync.h"
#include <mysys_err.h> // EE_WRITE
#include <m_ctype.h>
#include <my_dir.h>
@@ -245,7 +247,6 @@ write_parameter(IO_CACHE *file, const uchar* base, File_option *parameter)
TRUE error
*/
my_bool
sql_create_definition_file(const LEX_CSTRING *dir,
const LEX_CSTRING *file_name,
@@ -287,6 +288,8 @@ sql_create_definition_file(const LEX_CSTRING *dir,
DBUG_RETURN(TRUE);
}
debug_crash_here("definition_file_after_create");
if (init_io_cache(&file, handler, 0, WRITE_CACHE, 0L, 0, MYF(MY_WME)))
goto err_w_file;
@@ -296,6 +299,9 @@ sql_create_definition_file(const LEX_CSTRING *dir,
my_b_write(&file, (const uchar *)STRING_WITH_LEN("\n")))
goto err_w_cache;
if (debug_simulate_error("definition_file_simulate_write_error", EE_WRITE))
goto err_w_cache;
// write parameters to temporary file
for (param= parameters; param->name.str; param++)
{
@@ -337,6 +343,7 @@ err_w_cache:
end_io_cache(&file);
err_w_file:
mysql_file_close(handler, MYF(MY_WME));
mysql_file_delete(key_file_fileparser, path, MYF(MY_WME));
DBUG_RETURN(TRUE);
}

View File

@@ -788,6 +788,7 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
mysys_var=0;
binlog_evt_union.do_union= FALSE;
binlog_table_maps= FALSE;
binlog_xid= 0;
enable_slow_log= 0;
durability_property= HA_REGULAR_DURABILITY;

View File

@@ -2839,6 +2839,11 @@ public:
#ifndef MYSQL_CLIENT
binlog_cache_mngr * binlog_setup_trx_data();
/*
If set, tell binlog to store the value as query 'xid' in the next
Query_log_event
*/
ulonglong binlog_xid;
/*
Public interface to write RBR events to the binlog

View File

@@ -6203,15 +6203,17 @@ static bool write_log_replace_delete_frm(ALTER_PARTITION_PARAM_TYPE *lpt,
DDL_LOG_MEMORY_ENTRY *log_entry;
DBUG_ENTER("write_log_replace_delete_frm");
bzero(&ddl_log_entry, sizeof(ddl_log_entry));
if (replace_flag)
ddl_log_entry.action_type= DDL_LOG_REPLACE_ACTION;
else
ddl_log_entry.action_type= DDL_LOG_DELETE_ACTION;
ddl_log_entry.next_entry= next_entry;
ddl_log_entry.handler_name= reg_ext;
ddl_log_entry.name= to_path;
lex_string_set(&ddl_log_entry.handler_name, reg_ext);
lex_string_set(&ddl_log_entry.name, to_path);
if (replace_flag)
ddl_log_entry.from_name= from_path;
lex_string_set(&ddl_log_entry.from_name, from_path);
if (ddl_log_write_entry(&ddl_log_entry, &log_entry))
{
DBUG_RETURN(TRUE);
@@ -6263,6 +6265,7 @@ static bool write_log_changed_partitions(ALTER_PARTITION_PARAM_TYPE *lpt,
if (part_elem->part_state == PART_IS_CHANGED ||
(part_elem->part_state == PART_IS_ADDED && temp_partitions))
{
bzero(&ddl_log_entry, sizeof(ddl_log_entry));
if (part_info->is_sub_partitioned())
{
List_iterator<partition_element> sub_it(part_elem->subpartitions);
@@ -6272,8 +6275,9 @@ static bool write_log_changed_partitions(ALTER_PARTITION_PARAM_TYPE *lpt,
{
partition_element *sub_elem= sub_it++;
ddl_log_entry.next_entry= *next_entry;
ddl_log_entry.handler_name=
ha_resolve_storage_engine_name(sub_elem->engine_type);
lex_string_set(&ddl_log_entry.handler_name,
ha_resolve_storage_engine_name(sub_elem->
engine_type));
if (create_subpartition_name(tmp_path, sizeof(tmp_path), path,
part_elem->partition_name,
sub_elem->partition_name,
@@ -6283,16 +6287,15 @@ static bool write_log_changed_partitions(ALTER_PARTITION_PARAM_TYPE *lpt,
sub_elem->partition_name,
NORMAL_PART_NAME))
DBUG_RETURN(TRUE);
ddl_log_entry.name= normal_path;
ddl_log_entry.from_name= tmp_path;
lex_string_set(&ddl_log_entry.name, normal_path);
lex_string_set(&ddl_log_entry.from_name, tmp_path);
if (part_elem->part_state == PART_IS_CHANGED)
ddl_log_entry.action_type= DDL_LOG_REPLACE_ACTION;
else
ddl_log_entry.action_type= DDL_LOG_RENAME_ACTION;
if (ddl_log_write_entry(&ddl_log_entry, &log_entry))
{
DBUG_RETURN(TRUE);
}
*next_entry= log_entry->entry_pos;
sub_elem->log_entry= log_entry;
insert_part_info_log_entry_list(part_info, log_entry);
@@ -6301,8 +6304,8 @@ static bool write_log_changed_partitions(ALTER_PARTITION_PARAM_TYPE *lpt,
else
{
ddl_log_entry.next_entry= *next_entry;
ddl_log_entry.handler_name=
ha_resolve_storage_engine_name(part_elem->engine_type);
lex_string_set(&ddl_log_entry.handler_name,
ha_resolve_storage_engine_name(part_elem->engine_type));
if (create_partition_name(tmp_path, sizeof(tmp_path), path,
part_elem->partition_name, TEMP_PART_NAME,
TRUE) ||
@@ -6310,8 +6313,8 @@ static bool write_log_changed_partitions(ALTER_PARTITION_PARAM_TYPE *lpt,
part_elem->partition_name, NORMAL_PART_NAME,
TRUE))
DBUG_RETURN(TRUE);
ddl_log_entry.name= normal_path;
ddl_log_entry.from_name= tmp_path;
lex_string_set(&ddl_log_entry.name, normal_path);
lex_string_set(&ddl_log_entry.from_name, tmp_path);
if (part_elem->part_state == PART_IS_CHANGED)
ddl_log_entry.action_type= DDL_LOG_REPLACE_ACTION;
else
@@ -6355,6 +6358,7 @@ static bool write_log_dropped_partitions(ALTER_PARTITION_PARAM_TYPE *lpt,
uint num_elements= part_info->partitions.elements;
DBUG_ENTER("write_log_dropped_partitions");
bzero(&ddl_log_entry, sizeof(ddl_log_entry));
ddl_log_entry.action_type= DDL_LOG_DELETE_ACTION;
if (temp_list)
num_elements= num_temp_partitions;
@@ -6385,13 +6389,14 @@ static bool write_log_dropped_partitions(ALTER_PARTITION_PARAM_TYPE *lpt,
{
partition_element *sub_elem= sub_it++;
ddl_log_entry.next_entry= *next_entry;
ddl_log_entry.handler_name=
ha_resolve_storage_engine_name(sub_elem->engine_type);
lex_string_set(&ddl_log_entry.handler_name,
ha_resolve_storage_engine_name(sub_elem->
engine_type));
if (create_subpartition_name(tmp_path, sizeof(tmp_path), path,
part_elem->partition_name,
sub_elem->partition_name, name_variant))
DBUG_RETURN(TRUE);
ddl_log_entry.name= tmp_path;
lex_string_set(&ddl_log_entry.name, tmp_path);
if (ddl_log_write_entry(&ddl_log_entry, &log_entry))
{
DBUG_RETURN(TRUE);
@@ -6404,13 +6409,13 @@ static bool write_log_dropped_partitions(ALTER_PARTITION_PARAM_TYPE *lpt,
else
{
ddl_log_entry.next_entry= *next_entry;
ddl_log_entry.handler_name=
ha_resolve_storage_engine_name(part_elem->engine_type);
lex_string_set(&ddl_log_entry.handler_name,
ha_resolve_storage_engine_name(part_elem->engine_type));
if (create_partition_name(tmp_path, sizeof(tmp_path), path,
part_elem->partition_name, name_variant,
TRUE))
DBUG_RETURN(TRUE);
ddl_log_entry.name= tmp_path;
lex_string_set(&ddl_log_entry.name, tmp_path);
if (ddl_log_write_entry(&ddl_log_entry, &log_entry))
{
DBUG_RETURN(TRUE);
@@ -6474,7 +6479,7 @@ static bool write_log_drop_shadow_frm(ALTER_PARTITION_PARAM_TYPE *lpt)
goto error;
log_entry= part_info->first_log_entry;
if (ddl_log_write_execute_entry(log_entry->entry_pos,
FALSE, &exec_log_entry))
&exec_log_entry))
goto error;
mysql_mutex_unlock(&LOCK_gdl);
set_part_info_exec_log_entry(part_info, exec_log_entry);
@@ -6521,7 +6526,7 @@ static bool write_log_rename_frm(ALTER_PARTITION_PARAM_TYPE *lpt)
log_entry= part_info->first_log_entry;
part_info->frm_log_entry= log_entry;
if (ddl_log_write_execute_entry(log_entry->entry_pos,
FALSE, &exec_log_entry))
&exec_log_entry))
goto error;
release_part_info_log_entries(old_first_log_entry);
mysql_mutex_unlock(&LOCK_gdl);
@@ -6576,7 +6581,7 @@ static bool write_log_drop_partition(ALTER_PARTITION_PARAM_TYPE *lpt)
log_entry= part_info->first_log_entry;
part_info->frm_log_entry= log_entry;
if (ddl_log_write_execute_entry(log_entry->entry_pos,
FALSE, &exec_log_entry))
&exec_log_entry))
goto error;
release_part_info_log_entries(old_first_log_entry);
mysql_mutex_unlock(&LOCK_gdl);
@@ -6635,7 +6640,6 @@ static bool write_log_add_change_partition(ALTER_PARTITION_PARAM_TYPE *lpt)
log_entry= part_info->first_log_entry;
if (ddl_log_write_execute_entry(log_entry->entry_pos,
FALSE,
/* Reuse the old execute ddl_log_entry */
&exec_log_entry))
goto error;
@@ -6705,7 +6709,7 @@ static bool write_log_final_change_partition(ALTER_PARTITION_PARAM_TYPE *lpt)
part_info->frm_log_entry= log_entry;
/* Overwrite the revert execute log entry with this retry execute entry */
if (ddl_log_write_execute_entry(log_entry->entry_pos,
FALSE, &exec_log_entry))
&exec_log_entry))
goto error;
release_part_info_log_entries(old_first_log_entry);
mysql_mutex_unlock(&LOCK_gdl);
@@ -6741,7 +6745,7 @@ static void write_log_completed(ALTER_PARTITION_PARAM_TYPE *lpt,
DBUG_ASSERT(log_entry);
mysql_mutex_lock(&LOCK_gdl);
if (ddl_log_write_execute_entry(0UL, TRUE, &log_entry))
if (ddl_log_disable_execute_entry(&log_entry))
{
/*
Failed to write, Bad...

View File

@@ -355,13 +355,14 @@ static bool exchange_name_with_ddl_log(THD *thd,
DBUG_RETURN(TRUE);
/* prepare the action entry */
bzero(&exchange_entry, sizeof(exchange_entry));
exchange_entry.entry_type= DDL_LOG_ENTRY_CODE;
exchange_entry.action_type= DDL_LOG_EXCHANGE_ACTION;
exchange_entry.next_entry= 0;
exchange_entry.name= name;
exchange_entry.from_name= from_name;
exchange_entry.tmp_name= tmp_name;
exchange_entry.handler_name= ha_resolve_storage_engine_name(ht);
lex_string_set(&exchange_entry.name, name);
lex_string_set(&exchange_entry.from_name, from_name);
lex_string_set(&exchange_entry.tmp_name, tmp_name);
lex_string_set(&exchange_entry.handler_name,
ha_resolve_storage_engine_name(ht));
exchange_entry.phase= EXCH_PHASE_NAME_TO_TEMP;
mysql_mutex_lock(&LOCK_gdl);
@@ -377,8 +378,8 @@ static bool exchange_name_with_ddl_log(THD *thd,
DBUG_EXECUTE_IF("exchange_partition_fail_2", goto err_no_execute_written;);
DBUG_EXECUTE_IF("exchange_partition_abort_2", DBUG_SUICIDE(););
if (unlikely(ddl_log_write_execute_entry(log_entry->entry_pos, FALSE,
&exec_log_entry)))
if (unlikely(ddl_log_write_execute_entry(log_entry->entry_pos,
&exec_log_entry)))
goto err_no_execute_written;
/* ddl_log is written and synced */
@@ -457,7 +458,7 @@ err_rename:
(void) ddl_log_execute_entry(current_thd, log_entry->entry_pos);
mysql_mutex_lock(&LOCK_gdl);
/* mark the execute log entry done */
(void) ddl_log_write_execute_entry(0, TRUE, &exec_log_entry);
(void) ddl_log_disable_execute_entry(&exec_log_entry);
/* release the execute log entry */
(void) ddl_log_release_memory_entry(exec_log_entry);
err_no_execute_written:

View File

@@ -30,17 +30,20 @@
#include "sql_base.h" // tdc_remove_table, lock_table_names,
#include "sql_handler.h" // mysql_ha_rm_tables
#include "sql_statistics.h"
#include "ddl_log.h"
#include "debug_sync.h"
static TABLE_LIST *rename_tables(THD *thd, TABLE_LIST *table_list,
bool skip_error, bool if_exits,
bool *force_if_exists);
static bool do_rename(THD *thd, TABLE_LIST *ren_table,
const LEX_CSTRING *new_db,
const LEX_CSTRING *new_table_name,
const LEX_CSTRING *new_table_alias,
bool skip_error, bool if_exists, bool *force_if_exists);
/* used to hold table entries for as part of list of renamed temporary tables */
struct TABLE_PAIR
{
TABLE_LIST *from, *to;
};
static TABLE_LIST *reverse_table_list(TABLE_LIST *table_list);
static bool rename_tables(THD *thd, TABLE_LIST *table_list,
DDL_LOG_STATE *ddl_log_state,
bool skip_error, bool if_exits,
bool *force_if_exists);
/*
Every two entries in the table_list form a pair of original name and
@@ -55,6 +58,7 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent,
TABLE_LIST *ren_table= 0;
int to_table;
const char *rename_log_table[2]= {NULL, NULL};
DDL_LOG_STATE ddl_log_state;
DBUG_ENTER("mysql_rename_tables");
/*
@@ -151,32 +155,14 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent,
goto err;
error=0;
bzero(&ddl_log_state, sizeof(ddl_log_state));
/*
An exclusive lock on table names is satisfactory to ensure
no other thread accesses this table.
*/
if ((ren_table= rename_tables(thd, table_list, 0, if_exists,
&force_if_exists)))
{
/* Rename didn't succeed; rename back the tables in reverse order */
TABLE_LIST *table;
/* Reverse the table list */
table_list= reverse_table_list(table_list);
/* Find the last renamed table */
for (table= table_list;
table->next_local != ren_table ;
table= table->next_local->next_local) ;
table= table->next_local->next_local; // Skip error table
/* Revert to old names */
rename_tables(thd, table, 1, if_exists, &force_if_exists);
/* Revert the table list (for prepared statements) */
table_list= reverse_table_list(table_list);
error= 1;
}
error= rename_tables(thd, table_list, &ddl_log_state,
0, if_exists, &force_if_exists);
if (likely(!silent && !error))
{
@@ -186,49 +172,43 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent,
/* Add IF EXISTS to binary log */
thd->variables.option_bits|= OPTION_IF_EXISTS;
}
debug_crash_here("ddl_log_rename_before_binlog");
/*
Store xid in ddl log and binary log so that we can check on ddl recovery
if the item is in the binary log (and thus the operation was complete
*/
thd->binlog_xid= thd->query_id;
ddl_log_update_xid(&ddl_log_state, thd->binlog_xid);
binlog_error= write_bin_log(thd, TRUE, thd->query(), thd->query_length());
if (binlog_error)
error= 1;
thd->binlog_xid= 0;
thd->variables.option_bits= save_option_bits;
debug_crash_here("ddl_log_rename_after_binlog");
if (likely(!binlog_error))
my_ok(thd);
}
if (likely(!error))
{
query_cache_invalidate3(thd, table_list, 0);
ddl_log_complete(&ddl_log_state);
}
else
{
/* Revert the renames of normal tables with the help of the ddl log */
ddl_log_revert(thd, &ddl_log_state);
}
err:
DBUG_RETURN(error || binlog_error);
}
/*
reverse table list
SYNOPSIS
reverse_table_list()
table_list pointer to table _list
RETURN
pointer to new (reversed) list
*/
static TABLE_LIST *reverse_table_list(TABLE_LIST *table_list)
{
TABLE_LIST *prev= 0;
while (table_list)
{
TABLE_LIST *next= table_list->next_local;
table_list->next_local= prev;
prev= table_list;
table_list= next;
}
return (prev);
}
static bool
do_rename_temporary(THD *thd, TABLE_LIST *ren_table, TABLE_LIST *new_table,
bool skip_error)
do_rename_temporary(THD *thd, TABLE_LIST *ren_table, TABLE_LIST *new_table)
{
LEX_CSTRING *new_alias;
DBUG_ENTER("do_rename_temporary");
@@ -242,12 +222,94 @@ do_rename_temporary(THD *thd, TABLE_LIST *ren_table, TABLE_LIST *new_table,
DBUG_RETURN(1); // This can't be skipped
}
DBUG_RETURN(thd->rename_temporary_table(ren_table->table,
&new_table->db, new_alias));
}
/**
Parameters for do_rename
*/
struct rename_param
{
LEX_CSTRING old_alias, new_alias;
handlerton *from_table_hton;
};
/**
check_rename()
Check pre-conditions for rename
- From table should exists
- To table should not exists.
SYNOPSIS
@param new_table_name The new table/view name
@param new_table_alias The new table/view alias
@param if_exists If not set, give an error if the table does not
exists. If set, just give a warning in this case.
@return
@retval 0 ok
@retval >0 Error (from table doesn't exists or to table exists)
@retval <0 Can't do rename, but no error
*/
static int
check_rename(THD *thd, rename_param *param,
TABLE_LIST *ren_table,
const LEX_CSTRING *new_db,
const LEX_CSTRING *new_table_name,
const LEX_CSTRING *new_table_alias,
bool if_exists)
{
DBUG_ENTER("check_rename");
DBUG_PRINT("enter", ("if_exists: %d", (int) if_exists));
if (lower_case_table_names == 2)
{
param->old_alias= ren_table->alias;
param->new_alias= *new_table_alias;
}
else
{
param->old_alias= ren_table->table_name;
param->new_alias= *new_table_name;
}
DBUG_ASSERT(param->new_alias.str);
if (!ha_table_exists(thd, &ren_table->db, &param->old_alias,
&param->from_table_hton) ||
!param->from_table_hton)
{
my_error(ER_NO_SUCH_TABLE, MYF(if_exists ? ME_NOTE : 0),
ren_table->db.str, param->old_alias.str);
DBUG_RETURN(if_exists ? -1 : 1);
}
if (param->from_table_hton != view_pseudo_hton &&
ha_check_if_updates_are_ignored(thd, param->from_table_hton, "RENAME"))
{
/*
Shared table. Just drop the old .frm as it's not correct anymore
Discovery will find the old table when it's accessed
*/
tdc_remove_table(thd, ren_table->db.str, ren_table->table_name.str);
quick_rm_table(thd, 0, &ren_table->db, &param->old_alias, FRM_ONLY, 0);
DBUG_RETURN(-1);
}
if (ha_table_exists(thd, new_db, &param->new_alias, 0))
{
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), param->new_alias.str);
DBUG_RETURN(1); // This can't be skipped
}
DBUG_RETURN(0);
}
/*
Rename a single table or a view
@@ -256,15 +318,13 @@ do_rename_temporary(THD *thd, TABLE_LIST *ren_table, TABLE_LIST *new_table,
thd Thread handle
ren_table A table/view to be renamed
new_db The database to which the table to be moved to
new_table_name The new table/view name
new_table_alias The new table/view alias
skip_error Whether to skip error
if_exists Skip error, but only if the table didn't exists
skip_error Skip error, but only if the table didn't exists
force_if_exists Set to 1 if we have to log the query with 'IF EXISTS'
Otherwise don't touch the value
DESCRIPTION
Rename a single table or a view.
In case of failure, all changes will be reverted
RETURN
false Ok
@@ -272,54 +332,19 @@ do_rename_temporary(THD *thd, TABLE_LIST *ren_table, TABLE_LIST *new_table,
*/
static bool
do_rename(THD *thd, TABLE_LIST *ren_table, const LEX_CSTRING *new_db,
const LEX_CSTRING *new_table_name,
const LEX_CSTRING *new_table_alias,
bool skip_error, bool if_exists, bool *force_if_exists)
do_rename(THD *thd, rename_param *param, DDL_LOG_STATE *ddl_log_state,
TABLE_LIST *ren_table, const LEX_CSTRING *new_db,
bool skip_error, bool *force_if_exists)
{
int rc= 1;
handlerton *hton, *new_hton;
LEX_CSTRING old_alias, new_alias;
handlerton *hton;
LEX_CSTRING *old_alias, *new_alias;
DBUG_ENTER("do_rename");
DBUG_PRINT("enter", ("skip_error: %d if_exists: %d", (int) skip_error,
(int) if_exists));
DBUG_PRINT("enter", ("skip_error: %d", (int) skip_error));
if (lower_case_table_names == 2)
{
old_alias= ren_table->alias;
new_alias= *new_table_alias;
}
else
{
old_alias= ren_table->table_name;
new_alias= *new_table_name;
}
DBUG_ASSERT(new_alias.str);
if (!ha_table_exists(thd, &ren_table->db, &old_alias, &hton) || !hton)
{
my_error(ER_NO_SUCH_TABLE, MYF((skip_error | if_exists) ? ME_NOTE : 0),
ren_table->db.str, old_alias.str);
DBUG_RETURN(skip_error || if_exists ? 0 : 1);
}
if (hton != view_pseudo_hton &&
ha_check_if_updates_are_ignored(thd, hton, "RENAME"))
{
/*
Shared table. Just drop the old .frm as it's not correct anymore
Discovery will find the old table when it's accessed
*/
tdc_remove_table(thd, ren_table->db.str, ren_table->table_name.str);
quick_rm_table(thd, 0, &ren_table->db, &old_alias, FRM_ONLY, 0);
DBUG_RETURN(0);
}
if (ha_table_exists(thd, new_db, &new_alias, &new_hton))
{
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), new_alias.str);
DBUG_RETURN(1); // This can't be skipped
}
old_alias= &param->old_alias;
new_alias= &param->new_alias;
hton= param->from_table_hton;
DBUG_ASSERT(!thd->locked_tables_mode);
@@ -337,17 +362,36 @@ do_rename(THD *thd, TABLE_LIST *ren_table, const LEX_CSTRING *new_db,
*force_if_exists= 1;
thd->replication_flags= 0;
if (!(rc= mysql_rename_table(hton, &ren_table->db, &old_alias,
new_db, &new_alias, 0)))
if (ddl_log_rename_table(thd, ddl_log_state, hton,
&ren_table->db, old_alias, new_db, new_alias))
DBUG_RETURN(1);
debug_crash_here("ddl_log_rename_before_rename_table");
if (!(rc= mysql_rename_table(hton, &ren_table->db, old_alias,
new_db, new_alias, 0)))
{
(void) rename_table_in_stat_tables(thd, &ren_table->db,
&ren_table->table_name,
new_db, &new_alias);
if ((rc= Table_triggers_list::change_table_name(thd, &ren_table->db,
&old_alias,
&ren_table->table_name,
new_db,
&new_alias)))
/* Table rename succeded.
It's safe to start recovery at rename trigger phase
*/
debug_crash_here("ddl_log_rename_before_phase_trigger");
ddl_log_update_phase(ddl_log_state, DDL_RENAME_PHASE_TRIGGER);
debug_crash_here("ddl_log_rename_before_rename_trigger");
if (!(rc= Table_triggers_list::change_table_name(thd, &ren_table->db,
old_alias,
&ren_table->table_name,
new_db,
new_alias)))
{
debug_crash_here("ddl_log_rename_before_stat_tables");
(void) rename_table_in_stat_tables(thd, &ren_table->db,
&ren_table->table_name,
new_db, new_alias);
debug_crash_here("ddl_log_rename_after_stat_tables");
}
else
{
/*
We've succeeded in renaming table's .frm and in updating
@@ -355,8 +399,12 @@ do_rename(THD *thd, TABLE_LIST *ren_table, const LEX_CSTRING *new_db,
triggers appropriately. So let us revert operations on .frm
and handler's data and report about failure to rename table.
*/
(void) mysql_rename_table(hton, new_db, &new_alias,
&ren_table->db, &old_alias, NO_FK_CHECKS);
debug_crash_here("ddl_log_rename_after_failed_rename_trigger");
(void) mysql_rename_table(hton, new_db, new_alias,
&ren_table->db, old_alias, NO_FK_CHECKS);
debug_crash_here("ddl_log_rename_after_revert_rename_table");
ddl_log_disable_entry(ddl_log_state);
debug_crash_here("ddl_log_rename_after_disable_entry");
}
}
if (thd->replication_flags & OPTION_IF_EXISTS)
@@ -371,9 +419,25 @@ do_rename(THD *thd, TABLE_LIST *ren_table, const LEX_CSTRING *new_db,
*/
if (thd->lex->sql_command != SQLCOM_ALTER_DB_UPGRADE &&
cmp(&ren_table->db, new_db))
{
my_error(ER_FORBID_SCHEMA_CHANGE, MYF(0), ren_table->db.str, new_db->str);
else
rc= mysql_rename_view(thd, new_db, &new_alias, ren_table);
DBUG_RETURN(1);
}
ddl_log_rename_view(thd, ddl_log_state, &ren_table->db,
&ren_table->table_name, new_db, new_alias);
debug_crash_here("ddl_log_rename_before_rename_view");
rc= mysql_rename_view(thd, new_db, new_alias, &ren_table->db,
&ren_table->table_name);
debug_crash_here("ddl_log_rename_after_rename_view");
if (rc)
{
/*
On error mysql_rename_view() will leave things as such.
*/
ddl_log_disable_entry(ddl_log_state);
debug_crash_here("ddl_log_rename_after_disable_entry");
}
}
DBUG_RETURN(rc && !skip_error ? 1 : 0);
}
@@ -391,6 +455,7 @@ do_rename(THD *thd, TABLE_LIST *ren_table, const LEX_CSTRING *new_db,
rename_tables()
thd Thread handle
table_list List of tables to rename
ddl_log_state ddl logging
skip_error Whether to skip errors
if_exists Don't give an error if table doesn't exists
force_if_exists Set to 1 if we have to log the query with 'IF EXISTS'
@@ -403,14 +468,16 @@ do_rename(THD *thd, TABLE_LIST *ren_table, const LEX_CSTRING *new_db,
RETURN
0 Ok
table pointer to the table list element which rename failed
1 error
All tables are reverted to their original names
*/
static TABLE_LIST *
rename_tables(THD *thd, TABLE_LIST *table_list, bool skip_error,
bool if_exists, bool *force_if_exists)
static bool
rename_tables(THD *thd, TABLE_LIST *table_list, DDL_LOG_STATE *ddl_log_state,
bool skip_error, bool if_exists, bool *force_if_exists)
{
TABLE_LIST *ren_table, *new_table;
List<TABLE_PAIR> tmp_tables;
DBUG_ENTER("rename_tables");
*force_if_exists= 0;
@@ -419,11 +486,48 @@ rename_tables(THD *thd, TABLE_LIST *table_list, bool skip_error,
{
new_table= ren_table->next_local;
if (is_temporary_table(ren_table) ?
do_rename_temporary(thd, ren_table, new_table, skip_error) :
do_rename(thd, ren_table, &new_table->db, &new_table->table_name,
&new_table->alias, skip_error, if_exists, force_if_exists))
DBUG_RETURN(ren_table);
if (is_temporary_table(ren_table))
{
/*
Store renamed temporary tables into a list.
We don't store these in the ddl log to avoid writes and syncs
when only using temporary tables. We don't need the log as
all temporary tables will disappear anyway in a crash.
*/
TABLE_PAIR *pair= (TABLE_PAIR*) thd->alloc(sizeof(*pair));
if (! pair || tmp_tables.push_front(pair, thd->mem_root))
goto revert_rename;
pair->from= ren_table;
pair->to= new_table;
if (do_rename_temporary(thd, ren_table, new_table))
goto revert_rename;
}
else
{
int error;
rename_param param;
error= check_rename(thd, &param, ren_table, &new_table->db,
&new_table->table_name,
&new_table->alias, (skip_error || if_exists));
if (error < 0)
continue; // Ignore rename (if exists)
if (error > 0)
goto revert_rename;
if (do_rename(thd, &param, ddl_log_state,
ren_table, &new_table->db,
skip_error, force_if_exists))
goto revert_rename;
}
}
DBUG_RETURN(0);
revert_rename:
/* Revert temporary tables. Normal tables are reverted in the caller */
List_iterator_fast<TABLE_PAIR> it(tmp_tables);
while (TABLE_PAIR *pair= it++)
do_rename_temporary(thd, pair->to, pair->from);
DBUG_RETURN(1);
}

View File

@@ -565,13 +565,16 @@ uint build_table_filename(char *buff, size_t bufflen, const char *db,
(void) tablename_to_filename(table_name, tbbuff, sizeof(tbbuff));
char *end = buff + bufflen;
/* Don't add FN_ROOTDIR if mysql_data_home already includes it */
char *pos = strnmov(buff, mysql_data_home, bufflen);
size_t rootdir_len= strlen(FN_ROOTDIR);
if (pos - rootdir_len >= buff &&
memcmp(pos - rootdir_len, FN_ROOTDIR, rootdir_len) != 0)
pos= strnmov(pos, FN_ROOTDIR, end - pos);
pos= strxnmov(pos, end - pos, dbbuff, FN_ROOTDIR, NullS);
char *pos= strnmov(buff, mysql_data_home, bufflen-3);
/*
Add FN_LIBCHAR if mysql_data_home does not include it
In most cases mysql_data_home is just '.'
*/
if (pos[-1] != FN_LIBCHAR)
*pos++= FN_LIBCHAR;
pos= strxnmov(pos, end - 2 - pos, dbbuff,NullS);
*pos++= FN_LIBCHAR;
*pos= 0;
#ifdef USE_SYMDIR
if (!(flags & SKIP_SYMDIR_ACCESS))
{
@@ -621,6 +624,31 @@ uint build_tmptable_filename(THD* thd, char *buff, size_t bufflen)
DBUG_RETURN((uint)length);
}
/*
Create lower case paths for engines that requires them
*/
void build_lower_case_table_filename(char *buff, size_t bufflen,
const LEX_CSTRING *db,
const LEX_CSTRING *table,
uint flags)
{
char table_name[SAFE_NAME_LEN+1], db_name[SAFE_NAME_LEN+1];
DBUG_ASSERT(db->length <= SAFE_NAME_LEN && table->length <= SAFE_NAME_LEN);
memcpy(db_name, db->str, db->length);
db_name[db->length]= 0;
my_casedn_str(files_charset_info, db_name);
memcpy(table_name, table->str, table->length);
table_name[table->length]= 0;
my_casedn_str(files_charset_info, table_name);
build_table_filename(buff, bufflen, db_name, table_name, "",
flags & FN_IS_TMP);
}
/**
@brief construct a temporary shadow file name.
@@ -4703,10 +4731,8 @@ mysql_rename_table(handlerton *base, const LEX_CSTRING *old_db,
const LEX_CSTRING *new_name, uint flags)
{
THD *thd= current_thd;
char from[FN_REFLEN + 1], to[FN_REFLEN + 1],
lc_from[FN_REFLEN + 1], lc_to[FN_REFLEN + 1];
char from[FN_REFLEN], to[FN_REFLEN], lc_from[FN_REFLEN], lc_to[FN_REFLEN];
char *from_base= from, *to_base= to;
char tmp_name[SAFE_NAME_LEN+1], tmp_db_name[SAFE_NAME_LEN+1];
handler *file;
int error=0;
ulonglong save_bits= thd->variables.option_bits;
@@ -4728,37 +4754,20 @@ mysql_rename_table(handlerton *base, const LEX_CSTRING *old_db,
length= build_table_filename(to, sizeof(to) - 1, new_db->str,
new_name->str, "", flags & FN_TO_IS_TMP);
// Check if we hit FN_REFLEN bytes along with file extension.
if (length+reg_ext_length > FN_REFLEN)
if (length+reg_ext_length >= FN_REFLEN)
{
my_error(ER_IDENT_CAUSES_TOO_LONG_PATH, MYF(0), (int) sizeof(to)-1, to);
DBUG_RETURN(TRUE);
}
/*
If lower_case_table_names == 2 (case-preserving but case-insensitive
file system) and the storage is not HA_FILE_BASED, we need to provide
a lowercase file name, but we leave the .frm in mixed case.
*/
if (lower_case_table_names == 2 && file &&
!(file->ha_table_flags() & HA_FILE_BASED))
if (file->needs_lower_case_filenames())
{
strmov(tmp_name, old_name->str);
my_casedn_str(files_charset_info, tmp_name);
strmov(tmp_db_name, old_db->str);
my_casedn_str(files_charset_info, tmp_db_name);
build_table_filename(lc_from, sizeof(lc_from) - 1, tmp_db_name, tmp_name,
"", flags & FN_FROM_IS_TMP);
build_lower_case_table_filename(lc_from, sizeof(lc_from) -1,
old_db, old_name, flags & FN_FROM_IS_TMP);
build_lower_case_table_filename(lc_to, sizeof(lc_from) -1,
new_db, new_name, flags & FN_TO_IS_TMP);
from_base= lc_from;
strmov(tmp_name, new_name->str);
my_casedn_str(files_charset_info, tmp_name);
strmov(tmp_db_name, new_db->str);
my_casedn_str(files_charset_info, tmp_db_name);
build_table_filename(lc_to, sizeof(lc_to) - 1, tmp_db_name, tmp_name, "",
flags & FN_TO_IS_TMP);
to_base= lc_to;
to_base= lc_to;
}
if (flags & NO_HA_TABLE)

View File

@@ -77,6 +77,10 @@ uint build_table_filename(char *buff, size_t bufflen, const char *db,
const char *table, const char *ext, uint flags);
uint build_table_shadow_filename(char *buff, size_t bufflen,
ALTER_PARTITION_PARAM_TYPE *lpt);
void build_lower_case_table_filename(char *buff, size_t bufflen,
const LEX_CSTRING *db,
const LEX_CSTRING *table,
uint flags);
uint build_tmptable_filename(THD* thd, char *buff, size_t bufflen);
bool mysql_create_table(THD *thd, TABLE_LIST *create_table,
Table_specification_st *create_info,

View File

@@ -2073,7 +2073,9 @@ bool Trigger::change_on_table_name(void* param_arg)
@param[in,out] thd Thread context
@param[in] db Old database of subject table
@param[in] old_alias Old alias of subject table
@param[in] old_table Old name of subject table
@param[in] old_table Old name of subject table. The difference between
old_table and old_alias is that in case of lower_case_table_names
old_table == lowercase(old_alias)
@param[in] new_db New database for subject table
@param[in] new_table New name of subject table

View File

@@ -37,6 +37,7 @@
#include "sql_cte.h" // check_dependencies_in_with_clauses()
#include "opt_trace.h"
#include "wsrep_mysqld.h"
#include "debug_sync.h" // debug_crash_here
#define MD5_BUFF_LENGTH 33
@@ -2175,7 +2176,8 @@ bool
mysql_rename_view(THD *thd,
const LEX_CSTRING *new_db,
const LEX_CSTRING *new_name,
TABLE_LIST *view)
const LEX_CSTRING *old_db,
const LEX_CSTRING *old_name)
{
LEX_CSTRING pathstr;
File_parser *parser;
@@ -2185,7 +2187,7 @@ mysql_rename_view(THD *thd,
pathstr.str= (char *) path_buff;
pathstr.length= build_table_filename(path_buff, sizeof(path_buff) - 1,
view->db.str, view->table_name.str,
old_db->str, old_name->str,
reg_ext, 0);
if ((parser= sql_parse_prepare(&pathstr, thd->mem_root, 1)) &&
@@ -2212,9 +2214,10 @@ mysql_rename_view(THD *thd,
goto err;
/* rename view and it's backups */
if (rename_in_schema_file(thd, view->db.str, view->table_name.str,
if (rename_in_schema_file(thd, old_db->str, old_name->str,
new_db->str, new_name->str))
goto err;
debug_crash_here("rename_view_after_rename_schema_file");
dir.str= dir_buff;
dir.length= build_table_filename(dir_buff, sizeof(dir_buff) - 1,
@@ -2231,16 +2234,25 @@ mysql_rename_view(THD *thd,
(uchar*)&view_def, view_parameters))
{
/* restore renamed view in case of error */
rename_in_schema_file(thd, new_db->str, new_name->str, view->db.str,
view->table_name.str);
rename_in_schema_file(thd, new_db->str, new_name->str, old_db->str,
old_name->str);
goto err;
}
} else
}
else
DBUG_RETURN(1);
/* remove cache entries */
query_cache_invalidate3(thd, view, 0);
sp_cache_invalidate();
{
char key[NAME_LEN*2+1], *ptr;
memcpy(key, old_db->str, old_db->length);
ptr= key+ old_db->length;
*ptr++= 0;
memcpy(key, old_name->str, old_name->length);
ptr= key+ old_db->length;
*ptr++= 0;
query_cache.invalidate(thd, key, (size_t) (ptr-key), 0);
}
error= FALSE;
err:

View File

@@ -53,8 +53,10 @@ extern TYPELIB updatable_views_with_limit_typelib;
bool check_duplicate_names(THD *thd, List<Item>& item_list,
bool gen_unique_view_names);
bool mysql_rename_view(THD *thd, const LEX_CSTRING *new_db, const LEX_CSTRING *new_name,
TABLE_LIST *view);
bool mysql_rename_view(THD *thd, const LEX_CSTRING *new_db,
const LEX_CSTRING *new_name,
const LEX_CSTRING *old_db,
const LEX_CSTRING *old_name);
void make_valid_column_names(THD *thd, List<Item> &item_list);

View File

@@ -40,7 +40,8 @@ int maria_rename(const char *old_name, const char *new_name)
#endif
MARIA_HA *info;
MARIA_SHARE *share;
myf sync_dir;
myf sync_dir= 0;
my_bool ddl_recovery= 0;
DBUG_ENTER("maria_rename");
#ifdef EXTRA_DEBUG
@@ -49,7 +50,28 @@ int maria_rename(const char *old_name, const char *new_name)
#endif
/** @todo LOCK take X-lock on table */
if (!(info= maria_open(old_name, O_RDWR, HA_OPEN_FOR_REPAIR, 0)))
DBUG_RETURN(my_errno);
{
int error= my_errno;
/*
Check if we are in recovery from a rename that failed in the middle
and we are now renaming things back.
*/
if (error == ENOENT)
{
char *index_file= from;
char *data_file= to;
fn_format(index_file, old_name, "", MARIA_NAME_IEXT,
MY_UNPACK_FILENAME | MY_APPEND_EXT);
fn_format(data_file, old_name, "", MARIA_NAME_DEXT,
MY_UNPACK_FILENAME | MY_APPEND_EXT);
if (!access(data_file, F_OK) && access(index_file, F_OK))
{
ddl_recovery= 1;
goto forced_rename;
}
}
DBUG_RETURN(error);
}
share= info->s;
#ifdef USE_RAID
raid_type = share->base.raid_type;
@@ -62,13 +84,12 @@ int maria_rename(const char *old_name, const char *new_name)
this is important; make sure transactionality has been re-enabled.
*/
DBUG_ASSERT(share->now_transactional == share->base.born_transactional);
sync_dir= (share->now_transactional && !share->temporary &&
!maria_in_recovery) ? MY_SYNC_DIR : 0;
if (sync_dir)
if (share->now_transactional && !share->temporary && !maria_in_recovery)
{
LSN lsn;
LEX_CUSTRING log_array[TRANSLOG_INTERNAL_PARTS + 2];
size_t old_name_len= strlen(old_name)+1, new_name_len= strlen(new_name)+1;
sync_dir= MY_SYNC_DIR;
log_array[TRANSLOG_INTERNAL_PARTS + 0].str= (uchar*)old_name;
log_array[TRANSLOG_INTERNAL_PARTS + 0].length= old_name_len;
log_array[TRANSLOG_INTERNAL_PARTS + 1].str= (uchar*)new_name;
@@ -106,6 +127,7 @@ int maria_rename(const char *old_name, const char *new_name)
_ma_reset_state(info);
maria_close(info);
forced_rename:
/*
This code is written so that it should be possible to re-run a
failed rename (even if there is a server crash in between the
@@ -121,7 +143,8 @@ int maria_rename(const char *old_name, const char *new_name)
if (mysql_file_rename_with_symlink(key_file_dfile, from, to,
MYF(MY_WME | sync_dir)))
data_file_rename_error= my_errno;
if (data_file_rename_error && data_file_rename_error != ENOENT)
if (data_file_rename_error && data_file_rename_error != ENOENT &&
!ddl_recovery)
{
/*
Now we have a renamed index file and a non-renamed data file, try to