1、下载mysql镜像
docker pull mysql:latest
2、执行安装
docker run -d --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
指定主库为3307端口,映射容器中的3306端口,指定root密码为123456
3、查看网络
docker network ls
4、把主库加入到网络中
docker network connect newwork mysql-master
5、 进入到 mysql-master 修改配置文件
编辑 docker.cnf
## 同一局域网内注意要唯一
server-id=1
## 开启二进制日志功能,可以随便取(关键)
log-bin=master-bin
binlog-format=ROW// 二级制日志格式,有三种 row,statement,mixed
6、重启主服务器 docker 容器
docker restart mysql-master
7、在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
8、配置从库
docker run -d --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
docker network connect newwork mysql-slave
docker exec -it mysql-slave /bin/bash
配置Slave
注意:mysql 8.0以上版本,会报连接错误,是由于mysql改变了加密方式
在master数据库中
执行
user mysql;
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; flush privileges; 退出重启一下主库的容器类似于Master,使用docker命令docker exec -it mysql-slave /bin/bash 进入到slave容器中,进入到etc/mysql路径,使用vim命令编辑my.cnf文件:
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
进入Master库mysql客户端:输入show master status查看Master状态:
查看主服务器的地址
docker inspect mysql-master
进入到Slave库myslq客户端,执行如下命令:
CHANGE MASTER TO MASTER_HOST='172.17.0.6', MASTER_USER='slave',MASTER_PASSWORD='root',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=157;
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态。