docker部署MySQL主从服务集群方式
作者: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;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
