mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
71d263a198
This commit fixed the problems with S3 after the "DROP TABLE FORCE" changes. It also fixes all failing replication S3 tests. A slave is delayed if it is trying to execute replicated queries on a table that is already converted to S3 by the master later in the binlog. Fixes for replication events on S3 tables for delayed slaves: - INSERT and INSERT ... SELECT and CREATE TABLE are ignored but written to the binary log. UPDATE & DELETE will be fixed in a future commit. Other things: - On slaves with --s3-slave-ignore-updates set, allow S3 tables to be opened in read-write mode. This was done to be able to ignore-but-replicate queries like insert. Without this change any open of an S3 table failed with 'Table is read only' which is too early to be able to replicate the original query. - Errors are now printed if handler::extra() call fails in wait_while_tables_are_used(). - Error message for row changes are changed from HA_ERR_WRONG_COMMAND to HA_ERR_TABLE_READONLY. - Disable some maria_extra() calls for S3 tables. This could cause S3 tables to fail in some cases. - Added missing thr_lock_delete() to ma_open() in case of failure. - Removed from mysql_prepare_insert() the not needed argument 'table'.
124 lines
3.7 KiB
Text
124 lines
3.7 KiB
Text
include/master-slave.inc
|
|
[connection master]
|
|
set binlog_format=mixed;
|
|
RESET MASTER;
|
|
connection slave;
|
|
set binlog_format=mixed;
|
|
RESET MASTER;
|
|
connection master;
|
|
connection slave;
|
|
use database;
|
|
connection master;
|
|
#
|
|
# MDEV-23691 S3 storage engine: delayed slave can drop the table
|
|
#
|
|
connection slave;
|
|
stop slave;
|
|
connection master;
|
|
create /*or replace*/ table t100 (
|
|
pk varchar(100)
|
|
) engine = 'innodb';
|
|
insert into t100 values ('old data');
|
|
alter table t100 engine=s3;
|
|
drop table t100;
|
|
create /*or replace*/ table t100 (
|
|
pk varchar(100)
|
|
) engine= innodb;
|
|
insert into t100 select 'new data' from seq_1_to_10;
|
|
alter table t100 engine=s3;
|
|
select count(*), 'before slave start' from t100;
|
|
count(*) before slave start
|
|
10 before slave start
|
|
connection slave;
|
|
start slave;
|
|
connection master;
|
|
connection slave;
|
|
connection master;
|
|
flush tables;
|
|
select count(*), 'after slave start' from t100;
|
|
count(*) after slave start
|
|
10 after slave start
|
|
show create table t100;
|
|
Table Create Table
|
|
t100 CREATE TABLE `t100` (
|
|
`pk` varchar(100) DEFAULT NULL
|
|
) ENGINE=S3 DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
|
|
connection slave;
|
|
select count(*) from t100;
|
|
count(*)
|
|
10
|
|
connection master;
|
|
drop table t100;
|
|
#
|
|
# Test delayed slave with inserts
|
|
#
|
|
connection slave;
|
|
stop slave;
|
|
connection master;
|
|
create table t1 (a int) engine=innodb;
|
|
insert into t1 values (1),(2),(3);
|
|
insert into t1 select * from seq_4_to_6;
|
|
alter table t1 engine=s3;
|
|
connection slave;
|
|
start slave;
|
|
connection master;
|
|
connection slave;
|
|
select * from t1;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
connection master;
|
|
drop table t1;
|
|
#
|
|
# Check slave binary log
|
|
#
|
|
connection slave;
|
|
include/show_binlog_events.inc
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
slave-bin.000001 # Gtid # # GTID #-#-#
|
|
slave-bin.000001 # Query # # create database database
|
|
slave-bin.000001 # Gtid # # GTID #-#-#
|
|
slave-bin.000001 # Query # # use `database`; create /*or replace*/ table t100 (
|
|
pk varchar(100)
|
|
) engine = 'innodb'
|
|
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
|
slave-bin.000001 # Query # # use `database`; insert into t100 values ('old data')
|
|
slave-bin.000001 # Query # # COMMIT
|
|
slave-bin.000001 # Gtid # # GTID #-#-#
|
|
slave-bin.000001 # Query # # use `database`; alter table t100 engine=s3
|
|
slave-bin.000001 # Gtid # # GTID #-#-#
|
|
slave-bin.000001 # Query # # use `database`; DROP TABLE IF EXISTS `t100` /* generated by server */
|
|
slave-bin.000001 # Gtid # # GTID #-#-#
|
|
slave-bin.000001 # Query # # use `database`; create /*or replace*/ table t100 (
|
|
pk varchar(100)
|
|
) engine= innodb
|
|
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
|
slave-bin.000001 # Query # # use `database`; insert into t100 select 'new data' from seq_1_to_10
|
|
slave-bin.000001 # Query # # COMMIT
|
|
slave-bin.000001 # Gtid # # GTID #-#-#
|
|
slave-bin.000001 # Query # # use `database`; alter table t100 engine=s3
|
|
slave-bin.000001 # Gtid # # GTID #-#-#
|
|
slave-bin.000001 # Query # # use `database`; flush tables
|
|
slave-bin.000001 # Gtid # # GTID #-#-#
|
|
slave-bin.000001 # Query # # use `database`; DROP TABLE IF EXISTS `t100` /* generated by server */
|
|
slave-bin.000001 # Gtid # # GTID #-#-#
|
|
slave-bin.000001 # Query # # use `database`; create table t1 (a int) engine=innodb
|
|
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
|
slave-bin.000001 # Query # # use `database`; insert into t1 values (1),(2),(3)
|
|
slave-bin.000001 # Query # # COMMIT
|
|
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
|
slave-bin.000001 # Query # # use `database`; insert into t1 select * from seq_4_to_6
|
|
slave-bin.000001 # Query # # COMMIT
|
|
slave-bin.000001 # Gtid # # GTID #-#-#
|
|
slave-bin.000001 # Query # # use `database`; alter table t1 engine=s3
|
|
slave-bin.000001 # Gtid # # GTID #-#-#
|
|
slave-bin.000001 # Query # # use `database`; DROP TABLE IF EXISTS `t1` /* generated by server */
|
|
connection master;
|
|
#
|
|
# clean up
|
|
#
|
|
include/rpl_end.inc
|