Docker实现MySQL主从复制配置【简易版】
Docker实现MySQL主从复制配置
环境准备
-
安装docker
-
拉取
MySQL 8.0
镜像docker pull mysql:8.0 #检查 docker images | grep mysql
代码流程
由于Mysql8.0的ssl验证十分繁琐,在创建容器的时候一定要禁掉
-
创建自定义网络
docker network create mysql-replication-net
-
启动主库容器(禁用SSL)
docker run -d --name mysql-master \ --network mysql-replication-net \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=root \ -v $(pwd)/master-data:/var/lib/mysql \ mysql:8.0 \ --server-id=1 \ --log-bin=mysql-bin \ --binlog-format=ROW \ --gtid-mode=ON \ --enforce-gtid-consistency=ON \ --skip-ssl \ --require_secure_transport=OFF
-
启动从库容器(禁用SSL)
docker run -d --name mysql-slave \ --network mysql-replication-net \ -p 3307:3306 \ -e MYSQL_ROOT_PASSWORD=root \ -v $(pwd)/slave-data:/var/lib/mysql \ mysql:8.0 \ --server-id=2 \ --log-bin=mysql-bin \ --binlog-format=ROW \ --gtid-mode=ON \ --enforce-gtid-consistency=ON \ --skip-ssl \ --require_secure_transport=OFF
-
主库创建复制账号
docker exec -it mysql-master mysql -uroot -proot -e \ "CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'repl'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;"
-
配置从库复制
docker exec -it mysql-slave mysql -uroot -proot -e \ "STOP SLAVE; RESET SLAVE ALL; CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_AUTO_POSITION=1, MASTER_SSL=0; START SLAVE;"
-
验证主从状态
# 检查主库状态 docker exec -it mysql-master mysql -uroot -proot -e "SHOW MASTER STATUS\G" # 检查从库复制状态 docker exec -it mysql-slave mysql -uroot -proot -e \ "SHOW SLAVE STATUS\G" | grep -E 'Slave_IO_Running|Slave_SQL_Running|Last_Error' # 测试数据同步 docker exec -it mysql-master mysql -uroot -proot -e \ "CREATE DATABASE sync_test; USE sync_test; CREATE TABLE test(id INT); INSERT INTO test VALUES(1);" docker exec -it mysql-slave mysql -uroot -proot -e \ "USE sync_test; SELECT * FROM test;"
关键配置补充
-
禁用SSL的核心参数:
--skip-ssl # 完全禁用SSL功能 --require_secure_transport=OFF # 不要求安全连接
-
认证插件选择:
IDENTIFIED WITH mysql_native_password # 使用兼容性更好的传统认证
-
主从连接配置:
MASTER_SSL=0 # 明确禁用SSL连接