mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-24576 Atomic CREATE TABLE
There are a few different cases to consider Logging of CREATE TABLE and CREATE TABLE ... LIKE - If REPLACE is used and there was an existing table, DDL log the drop of the table. - If discovery of table is to be done - DDL LOG create table else - DDL log create table (with engine type) - create the table - If table was created - Log entry to binary log with xid - Mark DDL log completed Crash recovery: - If query was in binary log do nothing and exit - If discoverted table - Delete the .frm file -else - Drop created table and frm file - If table was dropped, write a DROP TABLE statement in binary log CREATE TABLE ... SELECT required a little more work as when one is using statement logging the query is written to the binary log before commit is done. This was fixed by adding a DROP TABLE to the binary log during crash recovery if the ddl log entry was not closed. In this case the binary log will contain: CREATE TABLE xxx ... SELECT .... DROP TABLE xxx; Other things: - Added debug_crash_here() functionality to Aria to be able to test crash in create table between the creation of the .MAI and the .MAD files.
This commit is contained in:
@ -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 xid=<xid>
|
||||
#<date> server id 1 end_log_pos 542 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/*!*/;
|
||||
@ -42,26 +42,26 @@ SET @@session.lc_time_names=0/*!*/;
|
||||
SET @@session.collation_database=DEFAULT/*!*/;
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY, f1 INT, f2 INT, f3 TINYINT, f4 MEDIUMINT, f5 BIGINT, f6 INT, f7 INT, f8 char(1))
|
||||
/*!*/;
|
||||
# at 533
|
||||
#<date> server id 1 end_log_pos 575 CRC32 XXX GTID 0-1-2 ddl
|
||||
# at 542
|
||||
#<date> server id 1 end_log_pos 584 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 xid=<xid>
|
||||
# at 584
|
||||
#<date> server id 1 end_log_pos 745 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))
|
||||
/*!*/;
|
||||
# at 727
|
||||
#<date> server id 1 end_log_pos 769 CRC32 XXX GTID 0-1-3
|
||||
# at 745
|
||||
#<date> server id 1 end_log_pos 787 CRC32 XXX GTID 0-1-3
|
||||
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at 769
|
||||
# at 843
|
||||
#<date> server id 1 end_log_pos 843 CRC32 XXX Annotate_rows:
|
||||
# at 787
|
||||
# at 861
|
||||
#<date> server id 1 end_log_pos 861 CRC32 XXX Annotate_rows:
|
||||
#Q> INSERT INTO t1 VALUES (10, 1, 2, 3, 4, 5, 6, 7, "")
|
||||
#<date> server id 1 end_log_pos 899 CRC32 XXX Table_map: `test`.`t1` mapped to number num
|
||||
# at 899
|
||||
#<date> server id 1 end_log_pos 967 CRC32 XXX Write_compressed_rows: table id 32 flags: STMT_END_F
|
||||
#<date> server id 1 end_log_pos 917 CRC32 XXX Table_map: `test`.`t1` mapped to number num
|
||||
# at 917
|
||||
#<date> server id 1 end_log_pos 985 CRC32 XXX Write_compressed_rows: table id 32 flags: STMT_END_F
|
||||
### INSERT INTO `test`.`t1`
|
||||
### SET
|
||||
### @1=10 /* INT meta=0 nullable=0 is_null=0 */
|
||||
@ -74,23 +74,23 @@ START TRANSACTION
|
||||
### @8=7 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### @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 xid=<xid>
|
||||
# at 985
|
||||
#<date> server id 1 end_log_pos 1058 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
|
||||
SET TIMESTAMP=X/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at 1040
|
||||
#<date> server id 1 end_log_pos 1082 CRC32 XXX GTID 0-1-4
|
||||
# at 1058
|
||||
#<date> server id 1 end_log_pos 1100 CRC32 XXX GTID 0-1-4
|
||||
/*!100001 SET @@session.gtid_seq_no=4*//*!*/;
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at 1082
|
||||
# at 1158
|
||||
#<date> server id 1 end_log_pos 1158 CRC32 XXX Annotate_rows:
|
||||
# at 1100
|
||||
# at 1176
|
||||
#<date> server id 1 end_log_pos 1176 CRC32 XXX Annotate_rows:
|
||||
#Q> INSERT INTO t1 VALUES (11, 1, 2, 3, 4, 5, 6, 7, NULL)
|
||||
#<date> server id 1 end_log_pos 1214 CRC32 XXX Table_map: `test`.`t1` mapped to number num
|
||||
# at 1214
|
||||
#<date> server id 1 end_log_pos 1281 CRC32 XXX Write_compressed_rows: table id 32 flags: STMT_END_F
|
||||
#<date> server id 1 end_log_pos 1232 CRC32 XXX Table_map: `test`.`t1` mapped to number num
|
||||
# at 1232
|
||||
#<date> server id 1 end_log_pos 1299 CRC32 XXX Write_compressed_rows: table id 32 flags: STMT_END_F
|
||||
### INSERT INTO `test`.`t1`
|
||||
### SET
|
||||
### @1=11 /* INT meta=0 nullable=0 is_null=0 */
|
||||
@ -103,23 +103,23 @@ START TRANSACTION
|
||||
### @8=7 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### @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 xid=<xid>
|
||||
# at 1299
|
||||
#<date> server id 1 end_log_pos 1372 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
|
||||
SET TIMESTAMP=X/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at 1354
|
||||
#<date> server id 1 end_log_pos 1396 CRC32 XXX GTID 0-1-5
|
||||
# at 1372
|
||||
#<date> server id 1 end_log_pos 1414 CRC32 XXX GTID 0-1-5
|
||||
/*!100001 SET @@session.gtid_seq_no=5*//*!*/;
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at 1396
|
||||
# at 1474
|
||||
#<date> server id 1 end_log_pos 1474 CRC32 XXX Annotate_rows:
|
||||
# at 1414
|
||||
# at 1492
|
||||
#<date> server id 1 end_log_pos 1492 CRC32 XXX Annotate_rows:
|
||||
#Q> INSERT INTO t1 VALUES (12, 1, 2, 3, NULL, 5, 6, 7, "A")
|
||||
#<date> server id 1 end_log_pos 1530 CRC32 XXX Table_map: `test`.`t1` mapped to number num
|
||||
# at 1530
|
||||
#<date> server id 1 end_log_pos 1596 CRC32 XXX Write_compressed_rows: table id 32 flags: STMT_END_F
|
||||
#<date> server id 1 end_log_pos 1548 CRC32 XXX Table_map: `test`.`t1` mapped to number num
|
||||
# at 1548
|
||||
#<date> server id 1 end_log_pos 1614 CRC32 XXX Write_compressed_rows: table id 32 flags: STMT_END_F
|
||||
### INSERT INTO `test`.`t1`
|
||||
### SET
|
||||
### @1=12 /* INT meta=0 nullable=0 is_null=0 */
|
||||
@ -132,23 +132,23 @@ START TRANSACTION
|
||||
### @8=7 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### @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 xid=<xid>
|
||||
# at 1614
|
||||
#<date> server id 1 end_log_pos 1687 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
|
||||
SET TIMESTAMP=X/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at 1669
|
||||
#<date> server id 1 end_log_pos 1711 CRC32 XXX GTID 0-1-6
|
||||
# at 1687
|
||||
#<date> server id 1 end_log_pos 1729 CRC32 XXX GTID 0-1-6
|
||||
/*!100001 SET @@session.gtid_seq_no=6*//*!*/;
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at 1711
|
||||
# at 1786
|
||||
#<date> server id 1 end_log_pos 1786 CRC32 XXX Annotate_rows:
|
||||
# at 1729
|
||||
# at 1804
|
||||
#<date> server id 1 end_log_pos 1804 CRC32 XXX Annotate_rows:
|
||||
#Q> INSERT INTO t1 VALUES (13, 1, 2, 3, 0, 5, 6, 7, "A")
|
||||
#<date> server id 1 end_log_pos 1842 CRC32 XXX Table_map: `test`.`t1` mapped to number num
|
||||
# at 1842
|
||||
#<date> server id 1 end_log_pos 1909 CRC32 XXX Write_compressed_rows: table id 32 flags: STMT_END_F
|
||||
#<date> server id 1 end_log_pos 1860 CRC32 XXX Table_map: `test`.`t1` mapped to number num
|
||||
# at 1860
|
||||
#<date> server id 1 end_log_pos 1927 CRC32 XXX Write_compressed_rows: table id 32 flags: STMT_END_F
|
||||
### INSERT INTO `test`.`t1`
|
||||
### SET
|
||||
### @1=13 /* INT meta=0 nullable=0 is_null=0 */
|
||||
@ -161,23 +161,23 @@ START TRANSACTION
|
||||
### @8=7 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### @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 xid=<xid>
|
||||
# at 1927
|
||||
#<date> server id 1 end_log_pos 2000 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
|
||||
SET TIMESTAMP=X/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at 1982
|
||||
#<date> server id 1 end_log_pos 2024 CRC32 XXX GTID 0-1-7
|
||||
# at 2000
|
||||
#<date> server id 1 end_log_pos 2042 CRC32 XXX GTID 0-1-7
|
||||
/*!100001 SET @@session.gtid_seq_no=7*//*!*/;
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at 2024
|
||||
# at 2078
|
||||
#<date> server id 1 end_log_pos 2078 CRC32 XXX Annotate_rows:
|
||||
# at 2042
|
||||
# at 2096
|
||||
#<date> server id 1 end_log_pos 2096 CRC32 XXX Annotate_rows:
|
||||
#Q> INSERT INTO t2 SELECT * FROM t1
|
||||
#<date> server id 1 end_log_pos 2134 CRC32 XXX Table_map: `test`.`t2` mapped to number num
|
||||
# at 2134
|
||||
#<date> server id 1 end_log_pos 2225 CRC32 XXX Write_compressed_rows: table id 33 flags: STMT_END_F
|
||||
#<date> server id 1 end_log_pos 2152 CRC32 XXX Table_map: `test`.`t2` mapped to number num
|
||||
# at 2152
|
||||
#<date> server id 1 end_log_pos 2243 CRC32 XXX Write_compressed_rows: table id 33 flags: STMT_END_F
|
||||
### INSERT INTO `test`.`t2`
|
||||
### SET
|
||||
### @1=10 /* INT meta=0 nullable=0 is_null=0 */
|
||||
@ -223,23 +223,23 @@ START TRANSACTION
|
||||
### @8=7 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### @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 xid=<xid>
|
||||
# at 2243
|
||||
#<date> server id 1 end_log_pos 2316 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
|
||||
SET TIMESTAMP=X/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at 2298
|
||||
#<date> server id 1 end_log_pos 2340 CRC32 XXX GTID 0-1-8
|
||||
# at 2316
|
||||
#<date> server id 1 end_log_pos 2358 CRC32 XXX GTID 0-1-8
|
||||
/*!100001 SET @@session.gtid_seq_no=8*//*!*/;
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at 2340
|
||||
# at 2406
|
||||
#<date> server id 1 end_log_pos 2406 CRC32 XXX Annotate_rows:
|
||||
# at 2358
|
||||
# at 2424
|
||||
#<date> server id 1 end_log_pos 2424 CRC32 XXX Annotate_rows:
|
||||
#Q> UPDATE t2 SET f4=5 WHERE f4>0 or f4 is NULL
|
||||
#<date> server id 1 end_log_pos 2462 CRC32 XXX Table_map: `test`.`t2` mapped to number num
|
||||
# at 2462
|
||||
#<date> server id 1 end_log_pos 2561 CRC32 XXX Update_compressed_rows: table id 33 flags: STMT_END_F
|
||||
#<date> server id 1 end_log_pos 2480 CRC32 XXX Table_map: `test`.`t2` mapped to number num
|
||||
# at 2480
|
||||
#<date> server id 1 end_log_pos 2579 CRC32 XXX Update_compressed_rows: table id 33 flags: STMT_END_F
|
||||
### UPDATE `test`.`t2`
|
||||
### WHERE
|
||||
### @1=10 /* INT meta=0 nullable=0 is_null=0 */
|
||||
@ -304,23 +304,23 @@ START TRANSACTION
|
||||
### @8=7 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### @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 xid=<xid>
|
||||
# at 2579
|
||||
#<date> server id 1 end_log_pos 2652 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
|
||||
SET TIMESTAMP=X/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at 2634
|
||||
#<date> server id 1 end_log_pos 2676 CRC32 XXX GTID 0-1-9
|
||||
# at 2652
|
||||
#<date> server id 1 end_log_pos 2694 CRC32 XXX GTID 0-1-9
|
||||
/*!100001 SET @@session.gtid_seq_no=9*//*!*/;
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at 2676
|
||||
# at 2713
|
||||
#<date> server id 1 end_log_pos 2713 CRC32 XXX Annotate_rows:
|
||||
# at 2694
|
||||
# at 2731
|
||||
#<date> server id 1 end_log_pos 2731 CRC32 XXX Annotate_rows:
|
||||
#Q> DELETE FROM t1
|
||||
#<date> server id 1 end_log_pos 2769 CRC32 XXX Table_map: `test`.`t1` mapped to number num
|
||||
# at 2769
|
||||
#<date> server id 1 end_log_pos 2861 CRC32 XXX Delete_compressed_rows: table id 32 flags: STMT_END_F
|
||||
#<date> server id 1 end_log_pos 2787 CRC32 XXX Table_map: `test`.`t1` mapped to number num
|
||||
# at 2787
|
||||
#<date> server id 1 end_log_pos 2879 CRC32 XXX Delete_compressed_rows: table id 32 flags: STMT_END_F
|
||||
### DELETE FROM `test`.`t1`
|
||||
### WHERE
|
||||
### @1=10 /* INT meta=0 nullable=0 is_null=0 */
|
||||
@ -366,23 +366,23 @@ START TRANSACTION
|
||||
### @8=7 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### @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 xid=<xid>
|
||||
# at 2879
|
||||
#<date> server id 1 end_log_pos 2952 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
|
||||
SET TIMESTAMP=X/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at 2934
|
||||
#<date> server id 1 end_log_pos 2976 CRC32 XXX GTID 0-1-10
|
||||
# at 2952
|
||||
#<date> server id 1 end_log_pos 2994 CRC32 XXX GTID 0-1-10
|
||||
/*!100001 SET @@session.gtid_seq_no=10*//*!*/;
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at 2976
|
||||
# at 3013
|
||||
#<date> server id 1 end_log_pos 3013 CRC32 XXX Annotate_rows:
|
||||
# at 2994
|
||||
# at 3031
|
||||
#<date> server id 1 end_log_pos 3031 CRC32 XXX Annotate_rows:
|
||||
#Q> DELETE FROM t2
|
||||
#<date> server id 1 end_log_pos 3069 CRC32 XXX Table_map: `test`.`t2` mapped to number num
|
||||
# at 3069
|
||||
#<date> server id 1 end_log_pos 3154 CRC32 XXX Delete_compressed_rows: table id 33 flags: STMT_END_F
|
||||
#<date> server id 1 end_log_pos 3087 CRC32 XXX Table_map: `test`.`t2` mapped to number num
|
||||
# at 3087
|
||||
#<date> server id 1 end_log_pos 3172 CRC32 XXX Delete_compressed_rows: table id 33 flags: STMT_END_F
|
||||
### DELETE FROM `test`.`t2`
|
||||
### WHERE
|
||||
### @1=10 /* INT meta=0 nullable=0 is_null=0 */
|
||||
@ -428,13 +428,13 @@ START TRANSACTION
|
||||
### @8=7 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### @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 xid=<xid>
|
||||
# at 3172
|
||||
#<date> server id 1 end_log_pos 3245 CRC32 XXX Query thread_id=5 exec_time=x error_code=0 xid=<xid>
|
||||
SET TIMESTAMP=X/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at 3227
|
||||
#<date> server id 1 end_log_pos 3275 CRC32 XXX Rotate to master-bin.000002 pos: 4
|
||||
# at 3245
|
||||
#<date> server id 1 end_log_pos 3293 CRC32 XXX Rotate to master-bin.000002 pos: 4
|
||||
DELIMITER ;
|
||||
# End of log file
|
||||
ROLLBACK /* added by mysqlbinlog */;
|
||||
|
Reference in New Issue
Block a user