1, 从官方景镜像中拉取mysql镜像:
docker pull mysql:8.0.24 --platform linux/x86_64
2, 创建master和slave容器:
在创建之前先设置网段
docker network create --subnet=172.20.0.0/24 soil_network
master:
docker run -d -p 3306:3306 --name mysql-master --net soil_network --ip 172.20.0.2 -e MYSQL_ROOT_PASSWORD=12345678 mysql:8.0.24 --platform linux/x86_64
slave:
docker run -d -p 3307:3306 --name mysql-slave --net soil_network --ip 172.20.0.3 -e MYSQL_ROOT_PASSWORD=12345678 mysql:8.0.24 --platform linux/x86_64
3, 编写master配置文件:
进入master容器内:
docker exec -it mysql-master /bin/bash
安装vim等相关命令:
apt-get update(如果执行报错,需要执行以下命令:
报错: Err:1 Index of /232905/apt/debian buster InRelease
执行: apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29 参照: W: GPG error: http://repo.mysql.com/apt/ubuntu bionic InRelease: (签名失败)_bionic inrelease' is not signed.-CSDN博客)
apt-get install vim
编写my.cnf:
vim /etc/mysql/my.cnf
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
进入到master的mysql客户端:
mysql -u root -p 然后输入密码: 12345678
创建一个slave用户可供slave登录并操作的用户:
CREATE USER 'slave'@'%' IDENTIFIED WITH 'mysql_native_password' BY '12345678';
#给slave账号添加复制权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
#当MySQL用户数据和权限有修改后,希望在"不重启MySQL服务"的情况下直接生效,那么就需要执行这个命令
FLUSH PRIVILEGES;
执行完成之后重启master容器,重启完成之后再次进入mysql客户端中查看master状态
docker exec -it mysql-master /bin/bash
mysql -u root -p
#查看master状态
show master status;
4, 编写slave的配置文件:
进入slave容器: docker exec -it mysql-slave /bin/bash
安装vim等相关命令:
apt-get update
(如果执行报错,需要执行以下命令:
报错: Err:1 Index of /232905/apt/debian buster InRelease
执行: apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29 参照: W: GPG error: http://repo.mysql.com/apt/ubuntu bionic InRelease: (签名失败)_bionic inrelease' is not signed.-CSDN博客)
apt-get install vim
编写my.cnf:
vim /etc/mysql/my.cnf
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
进入到mysql客户端开启主从复制:
#链接Master(主)和Slave(从)
change master to master_host='172.20.0.2',master_user='slave',master_password='12345678',master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=156, master_connect_retry=30;
#开启主从复制
start slave;
重启一下slave容器,然后再次进入slave容器中的mysql客户端。在客户端中我们执行 show slave status \G; 查看主从同步状态。
最后就可以连接主从mysql了,在主库上新建一个库或表,从库也会自动更新.
参照:Docker搭建Mysql主从复制(单主单从) - 知乎
其他:
下载安装ping命令、ifconfig命令:
进入容器测试ifconfig ping 没有-------->>很尴尬
apt-get install net-tools
### ifconfig
apt-get install iputils-ping
### ping
apt-get install iproute2
#### ip
如果出现Slave failed to initialize即 ERROR1872(HY000),
先 stop slave;然后reset slave;