mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +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:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
/*!*/;
|
||||
|
||||
@@ -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
|
||||
/*!*/;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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/*!*/;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
/*!*/;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:.*/,
|
||||
|
||||
52
mysql-test/suite/atomic/rename_case.result
Normal file
52
mysql-test/suite/atomic/rename_case.result
Normal 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;
|
||||
54
mysql-test/suite/atomic/rename_case.test
Normal file
54
mysql-test/suite/atomic/rename_case.test
Normal 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;
|
||||
157
mysql-test/suite/atomic/rename_combinations.result
Normal file
157
mysql-test/suite/atomic/rename_combinations.result
Normal 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;
|
||||
171
mysql-test/suite/atomic/rename_combinations.test
Normal file
171
mysql-test/suite/atomic/rename_combinations.test
Normal 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;
|
||||
150
mysql-test/suite/atomic/rename_table.result
Normal file
150
mysql-test/suite/atomic/rename_table.result
Normal 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"
|
||||
153
mysql-test/suite/atomic/rename_table.test
Normal file
153
mysql-test/suite/atomic/rename_table.test
Normal 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
|
||||
147
mysql-test/suite/atomic/rename_table_binlog.result
Normal file
147
mysql-test/suite/atomic/rename_table_binlog.result
Normal 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 */
|
||||
168
mysql-test/suite/atomic/rename_table_binlog.test
Normal file
168
mysql-test/suite/atomic/rename_table_binlog.test
Normal 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
|
||||
150
mysql-test/suite/atomic/rename_trigger.result
Normal file
150
mysql-test/suite/atomic/rename_trigger.result
Normal 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"
|
||||
158
mysql-test/suite/atomic/rename_trigger.test
Normal file
158
mysql-test/suite/atomic/rename_trigger.test
Normal 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
|
||||
23
mysql-test/suite/atomic/rename_view.result
Normal file
23
mysql-test/suite/atomic/rename_view.result
Normal 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
|
||||
#
|
||||
85
mysql-test/suite/atomic/rename_view.test
Normal file
85
mysql-test/suite/atomic/rename_view.test
Normal 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
|
||||
8
mysql-test/suite/atomic/rename_view2.result
Normal file
8
mysql-test/suite/atomic/rename_view2.result
Normal 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
|
||||
#
|
||||
89
mysql-test/suite/atomic/rename_view2.test
Normal file
89
mysql-test/suite/atomic/rename_view2.test
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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=#/*!*/;
|
||||
|
||||
@@ -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
|
||||
/*!*/;
|
||||
|
||||
@@ -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
|
||||
/*!*/;
|
||||
|
||||
@@ -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
|
||||
/*!*/;
|
||||
|
||||
@@ -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 */
|
||||
/*!*/;
|
||||
|
||||
@@ -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
|
||||
/*!*/;
|
||||
|
||||
@@ -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 */
|
||||
/*!*/;
|
||||
|
||||
@@ -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=#/*!*/;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 >
|
||||
|
||||
@@ -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
|
||||
/*!*/;
|
||||
|
||||
@@ -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 */
|
||||
/*!*/;
|
||||
|
||||
@@ -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;
|
||||
|
||||
1794
sql/ddl_log.cc
1794
sql/ddl_log.cc
File diff suppressed because it is too large
Load Diff
156
sql/ddl_log.h
156
sql/ddl_log.h
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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++)
|
||||
|
||||
@@ -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);
|
||||
|
||||
66
sql/log.cc
66
sql/log.cc
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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\
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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...
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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, ¶m->old_alias,
|
||||
¶m->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, ¶m->old_alias, FRM_ONLY, 0);
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
if (ha_table_exists(thd, new_db, ¶m->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= ¶m->old_alias;
|
||||
new_alias= ¶m->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, ¶m, 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, ¶m, 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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user