新建主服务器容器实例3307
docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
##这里前提是你的镜像不能有原版的,不然可能会使容器起不来
进入/mydata/mysql-master/conf目录下新建my.cnf
cd /mydata/mysql-master/conf/
vim my.cnf
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mail-mysql-bin
## 设置二进制日志适用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间,默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
slave_skip_errors=1062
修改完配置之后重启master实例
docker restart mysql-master
进入mysql-master容器
# 查看正在运行的容器
docker ps
#进入mysql-master容器
docker exec -it mysql-master /bin/bash
#登录数据库
mysql -proot
master容器实例内创建数据同步用户
create user 'xcl'@'%' identified by '123456';
grant replication slave,replication client on *.*to'xcl'@'%';
新建从服务器容器实例3308
docker run -p 3308:3306 --name mysql-slave -v /mydata/mysql-slave/log:/var/log/mysql -v /mydata/mysql-slave/data:/var/lib/mysql -v /mydata/mysql-slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
进入/mydata/mysql-slave/conf目录下新建my.cnf
cd /mydata/mysql-slave/conf/
vim my.cnf
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mail-mysql-slave1-bin
## 设置二进制日志适用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间,默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
slave_skip_errors=1062
## 配置中继日志
relay_log=mall-mysql-relay-bin
## 表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读
read_only=1
修改完配置后重启slave实例
docker restart mysql-slave
在主数据库中查看主从同步状态
show master status;
进入mysql-slave容器
docker exec -it mysql-slave /bin/bash
mysql -proot
在从数据库中配置主从复制
CHANGE MASTER TO MASTER_HOST='172.17.0.2',MASTER_USER='xcl',MASTER__PASSWORD='123456',MASTER_LOG_FILE='mail-mysql-bin.000001',MASTER_LOG_POS==613;
flush privileges
start slave
在从数据库中查看主从同步状态
show slave status\G
测试
在主库创建库 T1 创建表t1
create database T1;
use T1
create table t1(id int,name char(10),age int);
show databases;
use T1
show tables;