真正的配置文件是docker中 /etc/my.cnf
- 拉取镜像
docker pull mysql:5.7
- 启动主数据库和从数据库
docker run -p 3306:3306 --restart=always --name mysql_v1 -v /var/mysql/mysql_v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker run -p 3307:3306 --restart=always --name mysql_v2 -v /var/mysql/mysql_v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
- 用 Navicat 连接测试,都能连上说明启动正常
- 修改 docker 中 my.cnf 配置文件,需要复制到本机再修改,修改后再复制回 docker,可以用 centos 图形版自带的编辑工具
docker cp /var/mysql/mysql_v1_config/my.cnf mysql_v2:/etc/my.cnf
docker cp /var/mysql/mysql_v1_config/my.cnf mysql_v2:/etc/my.cnf
进入 master 创建账号
建master的复制账号
# 进入docker
docker exec -it mysql_v1 /bin/bash
# 进入 mysql
mysql -uroot -proot
#执行以下命令,创建复制账号,用户名和密码都是 wanger
grant replication slave on *.* to 'wanger'@'%' identified by 'wanger';
flush privileges;
- 修改 master my.cnf
[mysqld]
#修改配置文件:vim /etc/my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
#上面两行最重要,下面的可以不配置
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库 需要复制的主数据库名字
binlog-do-db=testdb
#设置logbin格式
binlog_format=STATEMENT
配置完,重启 mysql_v1, 进入mysql
输入Show master status;
记录 file 和 position
- 修改从机 my.cnf
[mysqld]
#修改配置文件:vim /etc/my.cnf
#主服务器唯一ID
server-id=2
#启用二进制日志
log-bin=mysql-bin
重启从机镜像 docker restart mysql_v2
进入 mysql 执行以下命令
CHANGE MASTER TO MASTER_HOST='主机的ip地址',
MASTER_USER='wanger',
MASTER_PASSWORD='wanger',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=438;
#解释:
# CHANGE MASTER TO MASTER_HOST='主机的IP地址',
# MASTER_USER='slave'(刚刚配置的用户名),
# MASTER_PASSWORD='123456'(刚刚授权的密码),
# master_port=主机开放的端口 我这里是3310端口,
# MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值(之前的Position);
查看从机状态show slave status\G
两个都是 Yes 表示配置成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
- 停止复制
stop slave;
- 重新配置主从
stop slave;
reset master;
参考
优化mysql
https://segmentfault.com/a/1190000040109897
指出了 docker 中 MySQL 配置文件的位置
https://blog.csdn.net/qq_45564783/article/details/126440171
教程
https://ost.51cto.com/posts/11591
更详细的教程
https://juejin.cn/post/7002217850521796639
官方 mysql docker 说明
https://hub.docker.com/_/mysql