Description:
Replication has stopped (SQL thread only) after DDL entered on source.
Column to modify is opposite between source and replica.
Diagnosed binary log(mysql-bin.xxxxxx) using mysqlbinlog.
The ALTER TABLE statement found on source's binary log and not found on replica's
DDL entered on source
====
ALTER TABLE A.C MODIFY COLUMN brand_index int;
Expected result
====
```
before:
CREATE TABLE `C` (
...
`brand_index` varchar(2) DEFAULT NULL,
...
after:
CREATE TABLE `C` (
...
`brand_index` int DEFAULT NULL,
...
```
Actual result
====
Source:
----
```
before:
CREATE TABLE `C` (
...
`brand_index` varchar(2) DEFAULT NULL,
...
after:
CREATE TABLE `C` (
...
`brand_index` int DEFAULT NULL,
...
```
Replica:
----
```
before:
CREATE TABLE `C` (
...
`brand_index` varchar(2) DEFAULT NULL,
...
after:
CREATE TABLE `C` (
...
`brand_index` varchar(2) DEFAULT NULL,
...
> select * from performance_schema.replication_applier_status_by_worker limit 1\G
...
LAST_ERROR_NUMBER: 13146
LAST_ERROR_MESSAGE: Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-bin.003081, end_log_pos 180145036; Column 2 of table 'A.C' cannot be converted from type 'int' to type 'varchar(6(bytes) utf8mb3)'
LAST_ERROR_TIMESTAMP: 2025-06-11 15:07:19.494513
...
```
How to repeat:
Topology:
Source
-> Replica X
-> Replica Y
-> Replica Z (replicate_do_db=A,P,Q)
Server config:
- Source and Replica
- MySQL ver 8.0.39
- transaction_isolation=read-uncommitted
- binlog_format=mixed
- gtid_mode = OFF_PERMISSIVE
- collation-server = utf8mb3_general_ci
- character-set-filesystem = utf8mb3
- character-set-server = utf8mb3
- Replica only
- replicate_do_db = A,P,Q (3 databases only. not 'mysql' and 'sys')
- read_only = on
- log_slave_updates = on
Database:
create database A; (19 tables)
create database P; (49 tables)
create database Q; (7560 tables)
create database R; (731 tables)
Table:
use A;
CREATE TABLE `C` (
`seq` int NOT NULL AUTO_INCREMENT,
`contents_id` varchar(6) NOT NULL,
`brand_index` varchar(2) DEFAULT NULL,
`category_id` varchar(5) NOT NULL,
`language` varchar(7) NOT NULL,
`is_privacy` tinyint NOT NULL DEFAULT '0',
`item` varchar(10) NOT NULL,
`title` varchar(256) DEFAULT NULL,
`memo` text,
`admin` varchar(100) DEFAULT NULL,
`created_date` datetime DEFAULT NULL,
`modified_date` datetime DEFAULT NULL,
PRIMARY KEY (`seq`),
UNIQUE KEY `UNIQUE_contentsId` (`contents_id`),
KEY `INDEX_categoryId_brandIndex_language` (`category_id`,`brand_index`,`language`),
KEY `INDEX_brandIndex` (`brand_index`)
) ENGINE=InnoDB AUTO_INCREMENT=1702 DEFAULT CHARSET=utf8mb3;
Load:
OLTP avg 2000 QPS
Enter SQL on source:
ALTER TABLE A.C MODIFY COLUMN brand_index int;
check replication status on Replica Z