1.获取mysql镜像
docker pull mysql:5.7
2.运行mysql镜像复制配置文件
docker run -it --rm mysql:5.7 /bin/bash
# 查看容器id
docker ps
# 复制默认配置文件到宿主机
docker cp 容器di:/etc/mysql/mysql.conf.d ./
3.修改配置文件
cp -r mysql.conf.d mysql-master
cp -r mysql.conf.d mysql-slave
修改mysql-master中的mysql.conf,在[mysqld]中添加两句:
server-id=1 # 主机id要比从机小
log-bin=/var/log/mysql/mysql-bin.log
修改mysql-slave中的mysql.conf,在[mysqld]中添加两句:
server-id=2
general_log = 0
4.创建两个空文件夹
为了防止mysql容器意外停止导致数据丢失,在本地创建目录和容器中的数据目录共享
mkdir master-db
mkdir slave-db
5.分别运行两个容器
# mysql-master和master-db根据自己本地路径修改
docker run -d -v /mysql-master:/etc/mysql/mysql.conf.d -v /master-db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 mysql:5.7
docker run -d -v /mysql-slave:/etc/mysql/mysql.conf.d -v /slave-db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 mysql:5.7
6.连接数据库
mysql -uroot -p123456 -h 127.0.0.1 --port=3307
mysql -uroot -p123456 -h 127.0.0.1 --port=3308
master配置:
# 创建从机账号
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
# 刷新权限
FLUSH PRIVILEGES;
# 展示主机的二进制日志信息
# 展示主机的二进制日志信息
SHOW MASTER STATUS;
slave配置:
change master to master_host='172.17.0.2', master_port=3306, master_user='slave', master_password='slave',master_log_file='mysql-bin.000003', master_log_pos=582;
slave配置:
172.17.0.2
的获取是使用的docker network ls
然后检查使用 docker network inspect bridge的id
得到的,
mysql-bin.000003和
582是主机的二进制日志信息里的
172.17.0.2
的获取是使用的docker network ls
然后检查使用 docker network inspect bridge的id
得到的, # 开启从机服务
start slave;
# 展示从机服务状态
show slave status \G
如果Slave_IO_Running:Yes和
Slave_SQL_Running:Yes都是yes表示配置成功
如果Slave_IO_Running:Yes和
如果有一个不是Yes的就百度,我就不复制过来了