Docker+MySQL的主从架构同步数据的方法
一、前提条件
1.1 构建好环境:基于Docker去创建MySQL的主从架构
1.2 主从关系断开(不同步)
二、MySQL主从同步恢复指南
当MySQL主从同步断开后,您需要重新建立主从同步关系。以下是详细的恢复步骤:
2.1.1 检查当前同步状态
首先在从库上检查同步状态:
SHOW SLAVE STATUS\G;
查看关键字段:
- Slave_IO_Running (I/O线程状态)
- Slave_SQL_Running (SQL线程状态)
- Last_Error (错误信息)
- Seconds_Behind_Master (落后主库的秒数)
2.1.2 根据情况选择恢复方法
2.1.2.1 情况一:少量数据不同步(可自动恢复数据,不包括建库建表语句)
比如已经断开连接,但是在主库已经新建库表情况下,此方法无法同步
-- 停止从库同步
STOP SLAVE;
-- 跳过指定数量的错误事件
SET GLOBAL sql_slave_skip_counter = 1;
-- 重新启动同步
START SLAVE;
2.1.2.2 情况二:需要完全重新同步 (推荐,但不建议高峰时运行)
在主库操作:
mysql -u root -p
锁定主库表(生产环境请在低峰期操作):
FLUSH TABLES WITH READ LOCK;
获取主库二进制日志位置,记录File和Position值,例如:
mysql> SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 | 157 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
主库容器导出主库数据(新终端中执行):
# 登录主库容器
[root@localhost ~]# docker exec -it mysql-master-1 bash
bash-4.4#
# 从数据库导出主库数据到主库容器
bash-4.4# mysqldump -u root -p --all-databases --master-data=2 > master_dump.sql
mysqldump: [Warning] World-writable config file '/etc/mysql/my.cnf' is ignored.
WARNING: --master-data is deprecated and will be removed in a future version. Use --source-data instead.
Enter password:
bash-4.4# ls
master_dump.sql
解锁主库:
UNLOCK TABLES;
在从库操作:
mysql -u root -p
停止从库服务: