保姆级】| 基于Docker的MySQL主从复制部署全流程
·
基于Docker的MySQL主从复制部署全流程
1. 核心概念
- 主从复制:主库(Master)将数据变更同步到从库(Slave)
- 关键组件:
- Binlog:主库的二进制日志,记录所有数据变更
- Relay Log:从库的中转日志
- IO Thread:从库拉取主库日志的线程
- SQL Thread:从库执行日志的线程
2. 环境准备
# 创建专用网络
docker network create mysql-net
# 创建数据卷
docker volume create master-data
docker volume create slave-data
3. 主库部署
步骤1:启动主库容器
docker run -d --name mysql-master \
--network mysql-net \
-v master-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=masterpass \
-p 3306:3306 \
mysql:8.0 \
--server-id=1 \
--log-bin=mysql-bin
步骤2:配置主库
# 进入容器
docker exec -it mysql-master mysql -uroot -pmasterpass
# SQL配置
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'slavepass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
# 查看主库状态(记录File和Position)
SHOW MASTER STATUS;
4. 从库部署
步骤1:启动从库容器
docker run -d --name mysql-slave \
--network mysql-net \
-v slave-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=slavepass \
-p 3307:3306 \
mysql:8.0 \
--server-id=2
步骤2:配置从库
# 进入容器
docker exec -it mysql-slave mysql -uroot -pslavepass
# SQL配置(使用主库记录的File和Position)
CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='repl',
MASTER_PASSWORD='slavepass',
MASTER_LOG_FILE='mysql-bin.000001', # 替换实际值
MASTER_LOG_POS=157; # 替换实际值
# 启动复制
START SLAVE;
5. 验证主从同步
# 在主库创建测试数据
docker exec mysql-master mysql -uroot -pmasterpass -e "CREATE DATABASE sync_test;"
# 在从库检查同步
docker exec mysql-slave mysql -uroot -pslavepass -e "SHOW DATABASES;"
6. 故障排查命令
-- 查看从库状态
SHOW SLAVE STATUS\G
-- 检查线程状态
SELECT * FROM performance_schema.replication_applier_status;
-- 重置复制(从库执行)
STOP SLAVE;
RESET SLAVE ALL;
7. 配置优化建议
# 主库my.cnf追加
[mysqld]
sync_binlog=1
innodb_flush_log_at_trx_commit=1
# 从库my.cnf追加
[mysqld]
read_only=ON
relay_log_recovery=1
关键注意事项:
- 主从
server-id必须唯一- 主库需开启
log-bin- 确保容器间网络互通(使用
--network)- 数据操作仅在主库执行
- 跨版本部署时注意MySQL版本兼容性
通过此流程,可实现每秒数千次的同步吞吐量,延迟控制在毫秒级。实际部署时建议使用docker-compose管理容器编排,并配置健康检查机制。
更多推荐
所有评论(0)