服务器:centos7,docker19.03.8,root账户
1.下载MySQL镜像
docker pull mysql:5.7
如果镜像下载太慢
vim /etc/docker/daemon.json
按 “i” 键进入编辑模式
文件内容:
{ "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}
按 “Esc” 键退出编辑模式
输入 :wq 确定保存
systemctl restart docker
2.创建主服务器以及从服务器的容器
注意:把主从服务器搭在同一个服务器上只是为了测试
创建自定义网络
docker network create --subnet=172.10.0.0/24 docker-br0
创建一个shell脚本,内容如下:
主服务器创建脚本:
#!/bin/bash
docker run --name master-db \
--net docker-br0 \
--ip 172.10.0.2 \
-p 33061:3306 \
-e MYSQL_ROOT_PASSWORD="password" \
-d mysql:5.7.29 \
--log-bin=mysql-bin \
--server-id=1
从服务器创建脚本:
#!/bin/bash
docker run --name slave-db \
--net docker-br0 \
--ip 172.10.0.3 \
-p 33062:3306 \
-e MYSQL_ROOT_PASSWORD="password" \
-d mysql:5.7.29 \
--log-bin=mysql-bin \
--server-id=2
运行脚本
chmod +x 脚本名称
./脚本名称
查看容器是否正常运作
docker ps -a
3.MySQL主从配置
1.进入master-db容器,输入密码mysql进入到mysql环境
docker exec -it master-db bash
mysql -uroot -p
创建从服务器连接账户
mysql>GRANT REPLICATION SLAVE ON *.* to 'user'@'%' IDENTIFIED BY 'mysql';
查看主服务器数据库状态
mysql>show master status;
记录File 的值和Position的值
2.进入slave-db容器,输入密码mysql进入到mysql环境
docker exec -it slave-db bash
mysql -uroot -p
配置连接主服务器
mysql>change master to
master_host='172.10.0.2', # 主服务器IP
master_user='user', # 连接主服务器的账户名
master_log_file='mysql-bin.000003', # 主服务器File的值
master_log_pos=000, # 主服务器Position的值
master_port=3306, # 主服务器mysql服务的端口号
master_password='mysql'; # 连接主服务器的账户名所对应的密码
mysql> start slave; #启动从服务器复制功能
如果在输入过程中不小心配置错,输入:
mysql> stop slave;
然后重新录入一遍。
3.检查主从连接状态(在从服务器中输入命令)
mysql> show slave status\G
其中
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
说明连接成功,为 No 或 Connect 说明没有连接上
其中
Last_IO_Errno: 2003
Last_IO_Error: xxxxxx
可以确认大致原因