Bug #22866 | CREATE ... SELECT is logged extraneously surrounded with BEGIN - COMMIT | ||
---|---|---|---|
Submitted: | 30 Sep 2006 21:11 | Modified: | 2 Oct 2006 9:22 |
Reporter: | Andrei Elkin | Email Updates: | |
Status: | Not a Bug | Impact on me: | |
Category: | MySQL Server: Row Based Replication ( RBR ) | Severity: | S3 (Non-critical) |
Version: | 5.1.12 | OS: | Linux (linux) |
Assigned to: | Lars Thalmann | CPU Architecture: | Any |
[30 Sep 2006 21:11]
Andrei Elkin
[1 Oct 2006 5:23]
Valeriy Kravchuk
Thank you for a problem report. Sorry, but I was not able to repeat the behaviour described: openxs@suse:~/dbs/5.1> bin/mysqld_safe --log-bin --binlog-format=row & [1] 6448 openxs@suse:~/dbs/5.1> Starting mysqld daemon with databases from /home/openxs/d bs/5.1/var openxs@suse:~/dbs/5.1> bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 5.1.12-beta-debug-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> drop table if exists t; reset master; Query OK, 0 rows affected (0.01 sec) Query OK, 0 rows affected (0.02 sec) mysql> create table t (a int) select (1) as b; Query OK, 1 row affected (0.03 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> show binlog events; +-----------------+-----+-------------+-----------+-------------+------------------------------------------------------------------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +-----------------+-----+-------------+-----------+-------------+------------------------------------------------------------------------------------------------+ | suse-bin.000001 | 4 | Format_desc | 1 | 102 | Server ver: 5.1.12-beta-debug-log, Binlog ver: 4 | | suse-bin.000001 | 102 | Query | 1 | 145 | use `test`; CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, `b` int(1) NOT NULL DEFAULT '0' ) | | suse-bin.000001 | 247 | Table_map | 1 | 184 | table_id: 31 (test.t) | | suse-bin.000001 | 286 | Write_rows | 1 | 222 | table_id: 31 flags: STMT_END_F | +-----------------+-----+-------------+-----------+-------------+------------------------------------------------------------------------------------------------+ 4 rows in set (0.01 sec) on ChangeSet@1.2328.1.2, 2006-09-28 11:25:02-07:00.
[1 Oct 2006 5:40]
Valeriy Kravchuk
Previous test was performed with autocommit=1 (by default). Let us see what happens with autocommit=0: openxs@suse:~/dbs/5.1> bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 5.1.12-beta-debug-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> drop table if exists t; reset master; Query OK, 0 rows affected (0.03 sec) mysql> set autocommit=0; Query OK, 0 rows affected (0.00 sec) mysql> create table t (a int) engine=innodb select (1) as b; Query OK, 1 row affected (0.02 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> show binlog events; +-----------------+-----+-------------+-----------+-------------+--------------- -----------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +-----------------+-----+-------------+-----------+-------------+--------------- -----------------------------------+ | suse-bin.000001 | 4 | Format_desc | 1 | 102 | Server ver: 5. 1.12-beta-debug-log, Binlog ver: 4 | +-----------------+-----+-------------+-----------+-------------+--------------- -----------------------------------+ 1 row in set (0.00 sec) The above is a BUG. We should have this statement in the binary log, as it should be committed implicitely in any case (as any DDL). mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> show binlog events; +-----------------+-----+-------------+-----------+-------------+--------------- -------------------------------------------------------------------------------- ---------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +-----------------+-----+-------------+-----------+-------------+--------------- -------------------------------------------------------------------------------- ---------------+ | suse-bin.000001 | 4 | Format_desc | 1 | 102 | Server ver: 5. 1.12-beta-debug-log, Binlog ver: 4 | | suse-bin.000001 | 102 | Query | 1 | 170 | use `test`; BE GIN | | suse-bin.000001 | 170 | Query | 1 | 159 | use `test`; CR EATE TABLE `t` ( `a` int(11) DEFAULT NULL, `b` int(1) NOT NULL DEFAULT '0' ) ENGINE=InnoDB | | suse-bin.000001 | 329 | Table_map | 1 | 198 | table_id: 31 ( test.t) | | suse-bin.000001 | 368 | Write_rows | 1 | 236 | table_id: 31 f lags: STMT_END_F | | suse-bin.000001 | 406 | Xid | 1 | 433 | COMMIT /* xid= 23 */ | +-----------------+-----+-------------+-----------+-------------+--------------- -------------------------------------------------------------------------------- ---------------+ 6 rows in set (0.00 sec) Now we have something similar to the initial report.
[2 Oct 2006 9:22]
Lars Thalmann
It is not a bug that the statement is logged as multiple log events. This is common in row-based logging.