1.新建主服务容器
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
2. 进入/mydata/mysql-master/conf目录下新建my.cnf
2.1.在主机上vim my.cnf
[mysqld]
#设置server-id,注意要唯一
server-id=101
#开启二进制日志功能
log_bin=mall-mysql-bin
#设置二进制使用内存大小
binlog_cache_size=1M
#二级制日志格式,有三种 row,statement,mixed
binlog_format=mixed
#控制binlog日志文件保留时间,超过保留时间的binlog日志会被自动删除
expire_logs_days=7
#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
#如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
#不同步的数据库
binlog-ignore-db=mysql
3.修改完配置后重新启动master实例
docker restart mysql-master
4.进入mysql-master容器
# 重新进入到mysql-master容器中
docker exec -it mysql-master /bin/bash
# 以root的身份进入到mysql中
mysql -uroot -p
5.master容器实例内创建数据同步用户
# 创建用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
# 授权
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
6.新建从服务器容器实例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/conf.d -e MYSQL_ROOT_PASSWORD=root -d mysql
7.进入、mydata/mysql-slave/conf目录下新建my.cnf
# 1. 打开my.cnf
vim my.cnf
#2.配置内容
[mysqld]
#设置server-id,注意要唯一
server-id=102
#开启二进制日志功能,以备slave作为其他数据实例的master时使用
log_bin=mall-mysql-slave1-bin
#设置二进制使用内存大小
binlog_cache_size=1M
#二级制日志格式,有三种 row,statement,mixed
binlog_format=mixed
#控制binlog日志文件保留时间,超过保留时间的binlog日志会被自动删除
expire_logs_days=7
#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
#如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
#不同步的数据库
binlog-ignore-db=mysql
#relay_log配置中继日志
relay_log=mall-mysql-relay-bin
# log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
# slave设置为只读(具有super权限的用户除外)
read_only=1
8.修改完成后重启salve实例
docker restart mysql-slave
9.在主数据库中查看从同步状态
show master status;
10.进入mysql-slave容器
# 重新进入到mysql-slave容器中
docker exec -it mysql-slave /bin/bash
# 以root的身份进入到mysql中
mysql -uroot -p
11.在从数据库中配置主从复制
# master_host:宿主机的ip
# master_user:在主数据库创建的用于同步数据的用户账号
# master_password:在主数据库创建的用于同步数据的用户密码
# master_port:主数据库的运行端口
# master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取file参数
# master_log_pos:指定从数据库从那个位置开始复制数据,通过查看主数据的状态,或者position的参数
# master_connnect_retry:连接失败重试的时间间隔,单位为秒
change master to
master_host='172.17.0.2',
master_user='root',
master_password='123456',
master_port='3307',
master_log_file='mall-master-bin.000001',
master_log_pos=617,
master_connnect_retry=30;
12.在从数据库中查看主从同步状态
# 显示格式不同,可不加G
show slave status \G;
13.在从数据库中开启主从同步
start slave;
14.查看从数据状态发现已经同步
# 显示格式不同,可不加G
show slave status \G;
15.主从复制测试