docker部署MySQL主从服务集群方式
更新时间:2025年11月08日 14:25:49 作者:hello_zzw
文章介绍了如何创建目录、配置文件和搭建MySQL集群,包括设置主库和两个从库的配置,并详细说明了如何创建复制用户和连接主库
创建目录
mkdir -p ~/mysql/mysql8-cluster/{master,slave1,slave2}/{conf,data,logs}
创建网络
docker network create mysql-cluster-net # 查看网络:docker network ls
配置文件
主库
~/mysql/mysql8-cluster/master/conf/my.cnf
[mysqld] # 唯一标识(主从必须不同) server-id=1 # 开启binlog,指定日志文件名前缀 log_bin=mysql-bin # 二进制日志格式(row格式支持更精准的同步) binlog_format=ROW # 开启GTID(全局事务标识,自动跟踪binlog位置) gtid_mode=ON enforce_gtid_consistency=ON # 忽略系统库同步(可选) binlog-ignore-db=mysql binlog-ignore-db=information_schema # 字符集配置 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4
从库1
~/mysql/mysql8-cluster/slave1/conf/my.cnf
[mysqld] # 唯一标识(与主库不同) server-id=2 # 从库也可开启binlog(可选,用于级联复制) log_bin=mysql-slave-bin # 开启GTID(与主库保持一致) gtid_mode=ON enforce_gtid_consistency=ON # 中继日志(从库用于暂存主库binlog) relay_log=mysql-relay-bin # 从库只读(避免误写,可选) read_only=ON # 字符集配置 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4
从库2
~/mysql/mysql8-cluster/slave2/conf/my.cnf
[mysqld] # 唯一标识(与主库不同) server-id=3 # 从库也可开启binlog(可选,用于级联复制) log_bin=mysql-slave-bin # 开启GTID(与主库保持一致) gtid_mode=ON enforce_gtid_consistency=ON # 中继日志(从库用于暂存主库binlog) relay_log=mysql-relay-bin # 从库只读(避免误写,可选) read_only=ON # 字符集配置 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4
搭建MySQL服务
-- 主服务 docker run -d --name mysql8-master --network mysql-cluster-net -p 3316:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/mysql/mysql8-cluster/master/logs:/var/log/mysql -v ~/mysql/mysql8-cluster/master/conf:/etc/mysql/conf.d -v ~/mysql/mysql8-cluster/master/data:/var/lib/mysql mysql:8.0 -- 从服务器1 docker run -d --name mysql8-slave1 --network mysql-cluster-net -p 3317:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/mysql/mysql8-cluster/slave1/logs:/var/log/mysql -v ~/mysql/mysql8-cluster/slave1/conf:/etc/mysql/conf.d -v ~/mysql/mysql8-cluster/slave1/data:/var/lib/mysql mysql:8.0 -- 从服务器2 docker run -d --name mysql8-slave2 --network mysql-cluster-net -p 3318:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/mysql/mysql8-cluster/slave2/logs:/var/log/mysql -v ~/mysql/mysql8-cluster/slave2/conf:/etc/mysql/conf.d -v ~/mysql/mysql8-cluster/slave2/data:/var/lib/mysql mysql:8.0
主库创建复制用户
# 进入主库容器 docker exec -it mysql-master bash # 登录MySQL(输入上述ROOT密码) mysql -u root -p # 创建复制用户(允许从库连接,用户名:repl,密码:Repl@123) CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Repl@123'; # 授权复制权限 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; # 刷新权限 FLUSH PRIVILEGES; # 查看主库状态(记录binlog文件和位置,备用) SHOW MASTER STATUS;
配置从库连接主库
# 进入从库容器 docker exec -it mysql-slave1 bash # 登录MySQL mysql -u root -p # 配置主库连接信息(使用GTID简化配置) CHANGE MASTER TO MASTER_HOST='mysql8-master', # 主库容器名(同网络内可直接访问)或IP地址 MASTER_USER='repl', # 主库创建的复制用户 MASTER_PASSWORD='Repl@123', # 复制用户密码 MASTER_PORT=3306, # 主库容器内端口(默认3306) MASTER_AUTO_POSITION=1; # 启用GTID自动定位binlog(无需手动填File和Position) # 启动从库同步进程 START SLAVE;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
如何解决docker-compose网段路由冲突,docker-compose自定义网络
这篇文章主要介绍了如何解决docker-compose网段路由冲突,docker-compose自定义网络问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01
Docker 制作镜像Dockerfile和commit操作
这篇文章主要介绍了Docker 制作镜像Dockerfile和commit操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-11-11
Ubuntu使用Docker部署Redis并实现远程访问本地数据库全过程
这篇文章主要给大家介绍了关于Ubuntu使用Docker部署Redis并实现远程访问本地数据库的相关资料,Redis远程连接是指通过网络连接到Redis服务器,从而可以在不同的机器问和操作Redis数据库,需要的朋友可以参考下2024-03-03


最新评论