services:
mysql-m:
image: mysql:8.0.27
container_name: mysql-m
platform: linux/amd64
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydb
MYSQL_USER: linnyk
MYSQL_PASSWORD: linnyk
ports:
- "3306:3306"
volumes:
- ./mysql_data_master:/var/lib/mysql
- ./mysql_logs_master:/var/log/mysql
- ./master/mysql.conf.cnf:/etc/mysql/conf.d/mysql.conf.cnf
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- my_bridge_network
mysql-s1:
image: mysql:8.0.27
container_name: mysql-s1
platform: linux/amd64
depends_on:
- mysql-m
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydb
MYSQL_USER: linnyk
MYSQL_PASSWORD: linnyk
ports:
- "3307:3306"
volumes:
- ./mysql_data_slave_1:/var/lib/mysql
- ./mysql_logs_slave_1:/var/log/mysql
- ./slave_1/mysql.conf.cnf:/etc/mysql/conf.d/mysql.conf.cnf
networks:
- my_bridge_network
mysql-s2:
image: mysql:8.0.27
container_name: mysql-s2
platform: linux/amd64
depends_on:
- mysql-m
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydb
MYSQL_USER: linnyk
MYSQL_PASSWORD: linnyk
ports:
- "3308:3306"
volumes:
- ./mysql_data_slave_2:/var/lib/mysql
- ./mysql_logs_slave_2:/var/log/mysql
- ./slave_1/mysql.conf.cnf:/etc/mysql/conf.d/mysql.conf.cnf
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
mysql-m:
image: mysql:8.0.27
container_name: mysql-m
platform: linux/amd64
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydb
MYSQL_USER: linnyk
MYSQL_PASSWORD: linnyk
ports:
- "3306:3306"
volumes:
- ./mysql_data_master:/var/lib/mysql
- ./mysql_logs_master:/var/log/mysql
- ./master/mysql.conf.cnf:/etc/mysql/conf.d/mysql.conf.cnf
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- my_bridge_network
GRANT REPLICATION SLAVE ON *.* TO 'linnyk'@'%';
FLUSH PRIVILEGES;SHOW MASTER STATUS mysql-s1:
image: mysql:8.0.27
container_name: mysql-s1
platform: linux/amd64
depends_on:
- mysql-m
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydb
MYSQL_USER: linnyk
MYSQL_PASSWORD: linnyk
ports:
- "3307:3307"
volumes:
- ./mysql_data_slave_1:/var/lib/mysql
- ./mysql_logs_slave_1:/var/log/mysql
- ./slave_1/mysql.conf.cnf:/etc/mysql/conf.d/mysql.conf.cnf
networks:
- my_bridge_network
CHANGE MASTER TO MASTER_HOST='mysql-m', MASTER_USER='linnyk', MASTER_PASSWORD='linnyk',
MASTER_LOG_FILE = 'mysql-bin.000004', MASTER_LOG_POS = 712;
START SLAVE;| Field | Value |
|---|---|
| Slave_IO_State | Waiting for source to send event |
| Master_Host | mysql-m |
| Master_User | linnyk |
| Master_Port | 3306 |
| Connect_Retry | 60 |
| Master_Log_File | mysql-bin.000004 |
| Read_Master_Log_Pos | 712 |
| Relay_Log_File | mysql-relay-bin.000002 |
| Relay_Log_Pos | 324 |
| Relay_Master_Log_File | mysql-bin.000004 |
| Slave_IO_Running | Yes |
| Slave_SQL_Running | Yes |
| Exec_Master_Log_Pos | 712 |
| Relay_Log_Space | 533 |
| Seconds_Behind_Master | 0 |
| Master_Server_Id | 1 |
| Master_UUID | ccad5c25-80ab-11ef-a5f6-0242ac130002 |
| Slave_SQL_Running_State | Replica has read all relay log; waiting for more updates |
| Master_Retry_Count | 86400 |
| Auto_Position | 0 |
mysql-s2:
image: mysql:8.0.27
container_name: mysql-s2
platform: linux/amd64
depends_on:
- mysql-m
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydb
MYSQL_USER: linnyk
MYSQL_PASSWORD: linnyk
ports:
- "3308:3308"
volumes:
- ./mysql_data_slave_2:/var/lib/mysql
- ./mysql_logs_slave_2:/var/log/mysql
- ./slave_1/mysql.conf.cnf:/etc/mysql/conf.d/mysql.conf.cnf
networks:
- my_bridge_network
CHANGE MASTER TO MASTER_HOST='mysql-m', MASTER_USER='linnyk', MASTER_PASSWORD='linnyk',
MASTER_LOG_FILE = 'mysql-bin.000004', MASTER_LOG_POS = 712;
START SLAVE;| Field | Value |
|---|---|
| Slave_IO_State | Waiting for source to send event |
| Master_Host | mysql-m |
| Master_User | linnyk |
| Master_Port | 3306 |
| Connect_Retry | 60 |
| Master_Log_File | mysql-bin.000004 |
| Read_Master_Log_Pos | 712 |
| Relay_Log_File | mysql-relay-bin.000002 |
| Relay_Log_Pos | 324 |
| Relay_Master_Log_File | mysql-bin.000004 |
| Slave_IO_Running | Yes |
| Slave_SQL_Running | Yes |
| Exec_Master_Log_Pos | 712 |
| Relay_Log_Space | 533 |
| Seconds_Behind_Master | 0 |
| Master_Server_Id | 1 |
| Master_UUID | ccad5c25-80ab-11ef-a5f6-0242ac130002 |
| Slave_SQL_Running_State | Replica has read all relay log; waiting for more updates |
| Master_Retry_Count | 86400 |
| Auto_Position | 0 |
| Field | Value |
|---|---|
| Slave_IO_State | Waiting for source to send event |
| Master_Host | mysql-m |
| Master_User | linnyk |
| Master_Port | 3306 |
| Connect_Retry | 60 |
| Master_Log_File | mysql-bin.000005 |
| Read_Master_Log_Pos | 13483218 |
| Relay_Log_File | mysql-relay-bin.000005 |
| Relay_Log_Pos | 13435785 |
| Relay_Master_Log_File | mysql-bin.000005 |
| Slave_IO_Running | Yes |
| Slave_SQL_Running | Yes |
| Exec_Master_Log_Pos | 13435570 |
| Relay_Log_Space | 13483810 |
| Seconds_Behind_Master | 0 |
| Master_Server_Id | 1 |
| Master_UUID | ccad5c25-80ab-11ef-a5f6-0242ac130002 |
| Slave_SQL_Running_State | Replica has read all relay log; waiting for more updates |
| Master_Retry_Count | 86400 |
| Auto_Position | 0 |
| Field | Value |
|---|---|
| Slave_IO_State | Waiting for source to send event |
| Master_Host | mysql-m |
| Master_User | linnyk |
| Master_Port | 3306 |
| Connect_Retry | 60 |
| Master_Log_File | mysql-bin.000005 |
| Read_Master_Log_Pos | 13626801 |
| Relay_Log_File | mysql-relay-bin.000005 |
| Relay_Log_Pos | 13606255 |
| Relay_Master_Log_File | mysql-bin.000005 |
| Slave_IO_Running | Yes |
| Slave_SQL_Running | Yes |
| Exec_Master_Log_Pos | 13606040 |
| Relay_Log_Space | 13627393 |
| Seconds_Behind_Master | 1 |
| Master_Server_Id | 1 |
| Master_UUID | ccad5c25-80ab-11ef-a5f6-0242ac130002 |
| Slave_SQL_Running_State | Reading event from the relay log |
| Master_Retry_Count | 86400 |
| Auto_Position | 0 |
| Field | Value |
|---|---|
| Slave_IO_State | Queueing source event to the relay log |
| Master_Host | mysql-m |
| Master_User | linnyk |
| Master_Port | 3306 |
| Connect_Retry | 60 |
| Master_Log_File | mysql-bin.000005 |
| Read_Master_Log_Pos | 13771920 |
| Relay_Log_File | mysql-relay-bin.000005 |
| Relay_Log_Pos | 13718345 |
| Relay_Master_Log_File | mysql-bin.000005 |
| Slave_IO_Running | Yes |
| Slave_SQL_Running | Yes |
| Exec_Master_Log_Pos | 13718130 |
| Relay_Log_Space | 13772512 |
| Seconds_Behind_Master | 0 |
| Master_Server_Id | 1 |
| Master_UUID | ccad5c25-80ab-11ef-a5f6-0242ac130002 |
| Slave_SQL_Running_State | Replica has read all relay log; waiting for more updates |
| Master_Retry_Count | 86400 |
| Auto_Position | 0 |
| Field | Value |
|---|---|
| Slave_IO_State | Waiting for source to send event |
| Master_Host | mysql-m |
| Master_User | linnyk |
| Master_Port | 3306 |
| Connect_Retry | 60 |
| Master_Log_File | mysql-bin.000005 |
| Read_Master_Log_Pos | 13915510 |
| Relay_Log_File | mysql-relay-bin.000005 |
| Relay_Log_Pos | 13886723 |
| Relay_Master_Log_File | mysql-bin.000005 |
| Slave_IO_Running | Yes |
| Slave_SQL_Running | Yes |
| Exec_Master_Log_Pos | 13886508 |
| Relay_Log_Space | 13916102 |
| Seconds_Behind_Master | 0 |
| Master_Server_Id | 1 |
| Master_UUID | ccad5c25-80ab-11ef-a5f6-0242ac130002 |
| Slave_SQL_Running_State | Replica has read all relay log; waiting for more updates |
| Master_Retry_Count | 86400 |
| Auto_Position | 0 |
Try to remove a column in database on slave node (try to delete last column and column from the middle)
alter table users
drop column password;2024-10-02T12:03:46.197341Z 9 [ERROR] [MY-013146] [Repl] Slave SQL for channel '': Worker 1 failed executing transaction 'ANONYMOUS' at master log mysql-bin.000005, end_log_pos 24224803; Column 2 of table 'mydb.users' cannot be converted from type 'varchar(200(bytes))' to type 'date', Error_code: MY-013146
2024-10-02T12:03:46.201398968Z 2024-10-02T12:03:46.201194Z 6 [ERROR] [MY-010586] [Repl] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000005' position 24177459Even though I thought it's easy to setup the replication with three nodes, I faced with troubles of user permission configuration and replication errors. But after some time I managed to setup the replication and test it. I also tried to stop one of the slave nodes and remove a column from the table on the slave node. It caused errors on the master node.


