1.获取mysql镜像: docker pull mysql:5.7
2.查看镜像:docker images
3.分别启动两个mysql容器,
主库: docker run -p 3307:3306 --name master_mysql -e MYSQL_ROOT_PASSWORD=123456 -d c20987f18b13
从库: docker run -p 3308:3306 --name slave_mysql -e MYSQL_ROOT_PASSWORD=123456 -d c20987f18b13
4.分别进入两个容器《 docker exec -it 容器Id /bin/bash 》进入目录 cd /etc/mysql 需要编辑该目录下的 my.conf文件
安装vim
- apt-get update
- apt-get install vim
主库配置
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键),同步的日志路径及文件名,一定注意这个目录要是 MySQL 有权限写入的
log-bin=mysql-bin
## 可选要同步的数据库名,不配置此参数代表所有的库
#binlog-do-db=
从库配置
[mysqld]
server-id=101
log-bin=mysql-slave-binlog
#relay_log配置中继日志
relay_log=mysql-relay-bin
5.在master数据库(主库)中创建同步用户授予用户slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123';
FLUSH PRIVILEGES;
#出错使用下面命令在执行
ALTER USER ‘slave’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123’;
FLUSH PRIVILEGES;
- 第一行命令是从机登陆用户名为slave 密码为123,%代表不限制ip地址登陆,如果限制IP地址登陆把这里改成需要的设置的IP即可,登陆成功可以操作任意库中的任意表
- 第二行为刷新
6.重启master数据库 service mysql restart 重启后容器会停止,需要重新启动容器 docker restart xxx 镜像ID
- 进入容器查看master主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复:
show master status;
7.在容器外查询master_host 后面跟容器名字或者容器ID
docker inspect --format='{{.NetworkSettings.IPAddress}} 容器ID
8.从库配置完my.conf 需要重启 在进入容器执行命令
change master to master_host='172.17.0.4', master_user='slave', master_password='123', master_port=3306, master_log_file='mysqle-binlog.000001', master_log_pos= 154, master_connect_retry=30;
#执行完上一步 在刷新一下
flush privileges;
这里配置了主库的host地址 和用户名密码 端口号以及binlog日志文件 备份的节点
- 8.1启动 slave 进程
start slave;
- 8.2 查看从库状态
show slave status \G
主要这两个配置都为yes证明配置成功
注意: 如果这两个有一个不为 YES ,表示主从环境搭建失败,此时可以阅读日志,查看出错的原因,再具体问题具体解决
- 1.第一个为NO 证明是 主从配置server-id=100 这个值重复
- 2.第二个为NO 需要具体看日志分析错误情况