1. Docker环境下的MySQL主从复制实战
在分布式系统中,数据库的高可用性是保障业务连续性的关键。MySQL主从复制作为经典的高可用方案,通过Docker容器化部署能够快速搭建测试环境。下面我将分享在Docker中配置MySQL 5.7主从复制的完整过程。
1.1 主从复制核心原理
MySQL主从复制的本质是基于二进制日志(binlog)的数据同步机制。当主库数据发生变化时,这些变更会被记录到binlog中,从库通过I/O线程读取主库的binlog并写入本地的中继日志(relay log),最后由SQL线程重放这些变更。
这种架构带来三个主要优势:
- 读写分离:主库处理写请求,从库承担读负载
- 数据备份:从库相当于实时备份
- 故障转移:主库宕机时可快速提升从库为主库
生产环境中建议至少配置2个从库,避免单点故障。根据业务压力,从库数量可以水平扩展。
1.2 主库容器配置实操
首先创建主库容器实例(端口映射3307):
bash复制docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
关键配置说明:
-v参数将容器内的日志、数据和配置目录挂载到宿主机,避免容器销毁时数据丢失- 建议使用固定密码而非默认的随机密码,方便后续维护
- MySQL 5.7相比8.0版本对Docker兼容性更好,适合学习环境
主库的核心配置文件my.cnf需要特别关注以下参数:
ini复制[mysqld]
server_id=101 # 集群内唯一ID
log-bin=mall-mysql-bin # 二进制日志文件名
binlog_format=mixed # 推荐使用混合模式
binlog-ignore-db=mysql # 不同步系统库
expire_logs_days=7 # 日
