mirror of
https://github.com/MariaDB/server.git
synced 2025-05-20 13:13:59 +03:00
Table maps are now written on aquiring locks to tables and released at the end of each logical statement. mysql-test/extra/binlog_tests/ctype_cp932.test: Disabling cleanup code mysql-test/r/binlog_row_blackhole.result: Result change mysql-test/r/binlog_row_mix_innodb_myisam.result: Result change mysql-test/r/binlog_stm_ctype_cp932.result: Result change mysql-test/r/rpl_row_charset.result: Result change mysql-test/r/rpl_row_create_table.result: Result change mysql-test/t/rpl_row_create_table.test: Binlog position change sql/handler.cc: Writing table map after external_lock() sql/handler.h: Adding class for table operation hooks. sql/log.cc: Adding binlog_write_table_map() to THD. Removing write_table_map() from MYSQL_LOG. sql/log.h: Minor interface changes to move table map writing. sql/log_event.cc: Removing pre-allocation of memory for buffers. Allowing ULONG_MAX as table id denoting an event to ignore (only used to transfer flags). Adding code to collect tables while seeing table maps and lock collected tables when seeing a binrow event. Debriding code as a result of the above changes. sql/log_event.h: Minor interface changes. sql/mysql_priv.h: Adding hooks argument to create_table_from_items(). sql/parse_file.cc: Minor fix to avoid crash in debug printout. sql/rpl_rli.h: Adding list of tables to lock to RLI structure. sql/slave.cc: Using list of tables to lock from RLI structure. sql/sql_acl.cc: Removing redundant pending events flush. sql/sql_base.cc: Moving pending event flush. Using flag to guard to clear statement transaction only if this is the original open tables state. sql/sql_class.cc: Adding flag for open tables state. Removing redundant pending events flushes. Write a dummy event to indicate that the tables to lock should be emptied on the slave. sql/sql_class.h: Adding open tables state flags. Adding binlog_write_table_map() function to THD. Changes to select_create() to support new locking scheme. sql/sql_insert.cc: Adding rollback of statement transaction on error. It can now contain events after locking tables. sql/sql_load.cc: Removing redundant pending event flush. sql/sql_table.cc: Adding hooks argument to create_table_from_items(). Calling prelock hook before starting to lock tables. sql/sql_update.cc: Removing a compiler warning. sql/table.h: Minor changes.
288 lines
8.9 KiB
Plaintext
288 lines
8.9 KiB
Plaintext
drop table if exists t1, t2;
|
|
create table t1 (a int) engine=innodb;
|
|
create table t2 (a int) engine=myisam;
|
|
reset master;
|
|
begin;
|
|
insert into t1 values(1);
|
|
insert into t2 select * from t1;
|
|
commit;
|
|
show binlog events from 102;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 102 Query 1 # use `test`; BEGIN
|
|
master-bin.000001 170 Table_map 1 # test.t1
|
|
master-bin.000001 209 Write_rows 1 #
|
|
master-bin.000001 243 Table_map 1 # test.t2
|
|
master-bin.000001 282 Write_rows 1 #
|
|
master-bin.000001 316 Xid 1 # COMMIT /* xid= */
|
|
delete from t1;
|
|
delete from t2;
|
|
reset master;
|
|
begin;
|
|
insert into t1 values(2);
|
|
insert into t2 select * from t1;
|
|
rollback;
|
|
Warnings:
|
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
|
show binlog events from 102;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 102 Query 1 # use `test`; BEGIN
|
|
master-bin.000001 170 Table_map 1 # test.t1
|
|
master-bin.000001 209 Write_rows 1 #
|
|
master-bin.000001 243 Table_map 1 # test.t2
|
|
master-bin.000001 282 Write_rows 1 #
|
|
master-bin.000001 316 Query 1 # use `test`; ROLLBACK
|
|
delete from t1;
|
|
delete from t2;
|
|
reset master;
|
|
begin;
|
|
insert into t1 values(3);
|
|
savepoint my_savepoint;
|
|
insert into t1 values(4);
|
|
insert into t2 select * from t1;
|
|
rollback to savepoint my_savepoint;
|
|
Warnings:
|
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
|
commit;
|
|
show binlog events from 102;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 102 Query 1 # use `test`; BEGIN
|
|
master-bin.000001 170 Table_map 1 # test.t1
|
|
master-bin.000001 209 Write_rows 1 #
|
|
master-bin.000001 243 Query 1 # use `test`; savepoint my_savepoint
|
|
master-bin.000001 328 Table_map 1 # test.t1
|
|
master-bin.000001 367 Write_rows 1 #
|
|
master-bin.000001 401 Table_map 1 # test.t2
|
|
master-bin.000001 440 Write_rows 1 #
|
|
master-bin.000001 479 Query 1 # use `test`; rollback to savepoint my_savepoint
|
|
master-bin.000001 576 Xid 1 # COMMIT /* xid= */
|
|
delete from t1;
|
|
delete from t2;
|
|
reset master;
|
|
begin;
|
|
insert into t1 values(5);
|
|
savepoint my_savepoint;
|
|
insert into t1 values(6);
|
|
insert into t2 select * from t1;
|
|
rollback to savepoint my_savepoint;
|
|
Warnings:
|
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
|
insert into t1 values(7);
|
|
commit;
|
|
select a from t1 order by a;
|
|
a
|
|
5
|
|
7
|
|
show binlog events from 102;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 102 Query 1 # use `test`; BEGIN
|
|
master-bin.000001 170 Table_map 1 # test.t1
|
|
master-bin.000001 209 Write_rows 1 #
|
|
master-bin.000001 243 Query 1 # use `test`; savepoint my_savepoint
|
|
master-bin.000001 328 Table_map 1 # test.t1
|
|
master-bin.000001 367 Write_rows 1 #
|
|
master-bin.000001 401 Table_map 1 # test.t2
|
|
master-bin.000001 440 Write_rows 1 #
|
|
master-bin.000001 479 Query 1 # use `test`; rollback to savepoint my_savepoint
|
|
master-bin.000001 576 Table_map 1 # test.t1
|
|
master-bin.000001 615 Write_rows 1 #
|
|
master-bin.000001 649 Xid 1 # COMMIT /* xid= */
|
|
delete from t1;
|
|
delete from t2;
|
|
reset master;
|
|
select get_lock("a",10);
|
|
get_lock("a",10)
|
|
1
|
|
begin;
|
|
insert into t1 values(8);
|
|
insert into t2 select * from t1;
|
|
select get_lock("a",10);
|
|
get_lock("a",10)
|
|
1
|
|
show binlog events from 102;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 102 Query 1 # use `test`; BEGIN
|
|
master-bin.000001 170 Table_map 1 # test.t1
|
|
master-bin.000001 209 Write_rows 1 #
|
|
master-bin.000001 243 Table_map 1 # test.t2
|
|
master-bin.000001 282 Write_rows 1 #
|
|
master-bin.000001 316 Query 1 # use `test`; ROLLBACK
|
|
delete from t1;
|
|
delete from t2;
|
|
reset master;
|
|
insert into t1 values(9);
|
|
insert into t2 select * from t1;
|
|
show binlog events from 102;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 102 Table_map 1 # test.t1
|
|
master-bin.000001 141 Write_rows 1 #
|
|
master-bin.000001 175 Xid 1 # COMMIT /* xid= */
|
|
master-bin.000001 202 Table_map 1 # test.t2
|
|
master-bin.000001 241 Write_rows 1 #
|
|
delete from t1;
|
|
delete from t2;
|
|
reset master;
|
|
insert into t1 values(10);
|
|
begin;
|
|
insert into t2 select * from t1;
|
|
show binlog events from 102;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 102 Table_map 1 # test.t1
|
|
master-bin.000001 141 Write_rows 1 #
|
|
master-bin.000001 175 Xid 1 # COMMIT /* xid= */
|
|
master-bin.000001 202 Table_map 1 # test.t2
|
|
master-bin.000001 241 Write_rows 1 #
|
|
insert into t1 values(11);
|
|
commit;
|
|
show binlog events from 102;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 102 Table_map 1 # test.t1
|
|
master-bin.000001 141 Write_rows 1 #
|
|
master-bin.000001 175 Xid 1 # COMMIT /* xid= */
|
|
master-bin.000001 202 Table_map 1 # test.t2
|
|
master-bin.000001 241 Write_rows 1 #
|
|
master-bin.000001 275 Query 1 # use `test`; BEGIN
|
|
master-bin.000001 343 Table_map 1 # test.t1
|
|
master-bin.000001 382 Write_rows 1 #
|
|
master-bin.000001 416 Xid 1 # COMMIT /* xid= */
|
|
alter table t2 engine=INNODB;
|
|
delete from t1;
|
|
delete from t2;
|
|
reset master;
|
|
begin;
|
|
insert into t1 values(12);
|
|
insert into t2 select * from t1;
|
|
commit;
|
|
show binlog events from 102;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 102 Query 1 # use `test`; BEGIN
|
|
master-bin.000001 170 Table_map 1 # test.t1
|
|
master-bin.000001 209 Write_rows 1 #
|
|
master-bin.000001 243 Table_map 1 # test.t2
|
|
master-bin.000001 282 Write_rows 1 #
|
|
master-bin.000001 316 Xid 1 # COMMIT /* xid= */
|
|
delete from t1;
|
|
delete from t2;
|
|
reset master;
|
|
begin;
|
|
insert into t1 values(13);
|
|
insert into t2 select * from t1;
|
|
rollback;
|
|
show binlog events from 102;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
delete from t1;
|
|
delete from t2;
|
|
reset master;
|
|
begin;
|
|
insert into t1 values(14);
|
|
savepoint my_savepoint;
|
|
insert into t1 values(15);
|
|
insert into t2 select * from t1;
|
|
rollback to savepoint my_savepoint;
|
|
commit;
|
|
show binlog events from 102;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 102 Query 1 # use `test`; BEGIN
|
|
master-bin.000001 170 Table_map 1 # test.t1
|
|
master-bin.000001 209 Write_rows 1 #
|
|
master-bin.000001 243 Xid 1 # COMMIT /* xid= */
|
|
delete from t1;
|
|
delete from t2;
|
|
reset master;
|
|
begin;
|
|
insert into t1 values(16);
|
|
savepoint my_savepoint;
|
|
insert into t1 values(17);
|
|
insert into t2 select * from t1;
|
|
rollback to savepoint my_savepoint;
|
|
insert into t1 values(18);
|
|
commit;
|
|
select a from t1 order by a;
|
|
a
|
|
16
|
|
18
|
|
show binlog events from 102;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 102 Query 1 # use `test`; BEGIN
|
|
master-bin.000001 170 Table_map 1 # test.t1
|
|
master-bin.000001 209 Write_rows 1 #
|
|
master-bin.000001 243 Table_map 1 # test.t1
|
|
master-bin.000001 282 Write_rows 1 #
|
|
master-bin.000001 316 Xid 1 # COMMIT /* xid= */
|
|
delete from t1;
|
|
delete from t2;
|
|
alter table t2 type=MyISAM;
|
|
insert into t1 values (1);
|
|
begin;
|
|
select * from t1 for update;
|
|
a
|
|
1
|
|
select (@before:=unix_timestamp())*0;
|
|
(@before:=unix_timestamp())*0
|
|
0
|
|
begin;
|
|
select * from t1 for update;
|
|
insert into t2 values (20);
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
select (@after:=unix_timestamp())*0;
|
|
(@after:=unix_timestamp())*0
|
|
0
|
|
select (@after-@before) >= 2;
|
|
(@after-@before) >= 2
|
|
1
|
|
drop table t1,t2;
|
|
commit;
|
|
begin;
|
|
create temporary table ti (a int) engine=innodb;
|
|
rollback;
|
|
Warnings:
|
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
|
insert into ti values(1);
|
|
set autocommit=0;
|
|
create temporary table t1 (a int) engine=myisam;
|
|
commit;
|
|
insert t1 values (1);
|
|
rollback;
|
|
Warnings:
|
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
|
create table t0 (n int);
|
|
insert t0 select * from t1;
|
|
set autocommit=1;
|
|
insert into t0 select GET_LOCK("lock1",null);
|
|
set autocommit=0;
|
|
create table t2 (n int) engine=innodb;
|
|
insert into t2 values (3);
|
|
select get_lock("lock1",60);
|
|
get_lock("lock1",60)
|
|
1
|
|
show binlog events from 102;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 102 Query 1 # use `test`; BEGIN
|
|
master-bin.000001 170 Table_map 1 # test.t1
|
|
master-bin.000001 209 Write_rows 1 #
|
|
master-bin.000001 243 Table_map 1 # test.t1
|
|
master-bin.000001 282 Write_rows 1 #
|
|
master-bin.000001 316 Xid 1 # COMMIT /* xid= */
|
|
master-bin.000001 343 Table_map 1 # test.t1
|
|
master-bin.000001 382 Query 1 # use `test`; delete from t1
|
|
master-bin.000001 459 Xid 1 # COMMIT /* xid= */
|
|
master-bin.000001 486 Table_map 1 # test.t2
|
|
master-bin.000001 525 Query 1 # use `test`; delete from t2
|
|
master-bin.000001 602 Xid 1 # COMMIT /* xid= */
|
|
master-bin.000001 629 Query 1 # use `test`; alter table t2 type=MyISAM
|
|
master-bin.000001 718 Table_map 1 # test.t1
|
|
master-bin.000001 757 Write_rows 1 #
|
|
master-bin.000001 791 Xid 1 # COMMIT /* xid= */
|
|
master-bin.000001 818 Query 1 # use `test`; BEGIN
|
|
master-bin.000001 886 Table_map 1 # test.t1
|
|
master-bin.000001 925 Write_rows 1 #
|
|
master-bin.000001 954 Xid 1 # COMMIT /* xid= */
|
|
master-bin.000001 981 Query 1 # use `test`; drop table t1,t2
|
|
master-bin.000001 1060 Query 1 # use `test`; create table t0 (n int)
|
|
master-bin.000001 1146 Table_map 1 # test.t0
|
|
master-bin.000001 1185 Write_rows 1 #
|
|
master-bin.000001 1219 Table_map 1 # test.t0
|
|
master-bin.000001 1258 Write_rows 1 #
|
|
master-bin.000001 1292 Query 1 # use `test`; create table t2 (n int) engine=innodb
|
|
do release_lock("lock1");
|
|
drop table t0,t2;
|