1. 拉取镜像
docker pull mysql:5.7
2. 创建主从配置文件
2.1 主机配置
在/root/work_space/mysql_study/node1/
下创建my.cnf文件
[mysqld]
#主服务器唯一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
2.2 从机配置
在/root/work_space/mysql_study/node2/
下创建my.cnf文件
[mysqld]
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
3. 启动容器
主机
docker run -d -p 3310:3306 -v /root/work_space/mysql_study/node1/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
从机
docker run -d -p 3311:3306 -v /root/work_space/mysql_study/node2/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7
-
-d: 后台运行容器,并返回容器ID
-
-p 3310:3306 :将容器的3306端口映射到宿主机3310端口
-
-e MYSQL_ROOT_PASSWORD=123456 :配置环境变量,数据库连接密码
-
-v /root/work_space/mysql_study/node1/my.cnf:/etc/mysql/my.cnf :将配置文件挂载到容器中
-
–name mysql01(02):将容器命名为 mysql01(02)
4. 配置主从连接
4.1 主机
连接到主机容器终端
docker exec -it mysql01 /bin/bash #进入容器
mysql -uroot -p123456 #连接mysql
给从机授权,为了让从机能够和主机连接起来。
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
查看主机状态
show master status;
这里的File和Position记录下来,这俩信息代表了从机要从哪个binlog的哪里开始同步复制
4.2 从机
连接到从机容器终端
docker exec -it mysql02 /bin/bash
mysql -uroot -p123456
设置主机信息
CHANGE MASTER TO MASTER_HOST='172.17.0.2',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=438;
-
CHANGE MASTER TO MASTER_HOST=‘主机的IP地址’
主机IP可以通过
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container id>
知晓 -
MASTER_USER=‘slave’ (刚刚配置的用户名)
-
MASTER_PASSWORD=‘123456’ (刚刚授权的密码)
-
master_port=主机开放的端口
-
MASTER_LOG_FILE=‘mysql-bin.具体数字’ (binlog文件名,之前的File值)
-
MASTER_LOG_POS=之前的Position
重启从服务器复制功能
stop slave;
reset master;
start slave;
查看从机状态
show slave status\G
这两个参数都是Yes,则说明主从配置成功
5. 测试
主机创建数据库/表并插入数据
create database testdb;
use testdb;
create table t_vip(
id int,
name varchar(255) not null
);
insert into t_vip values(3,'demaxiya');
从机验证
show databases;
use testdb;
show tables;
select * from t_vip;
可见主从复制成功