1、启动主mysql
docker run -p 3307:3306 \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
2、设置conf中的my.cnf
vim my.conf
[mysqld]
## 设置 server_id , 同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql ## 开启二进制日志功能, 以备 Slave 作为其它数据库 实例的 Master 时使用
log-bin=mall-mysql-bin ## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M ## 设置使用的二进制日志格式( mixed,statement,row )
binlog_format=mixed ## 二进制日志过期清理时间。默认值为 0 , 表示不 自动清理。
expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错 误, 避免 slave 端复制中断。 ## 如:1 062 错误是指一些主键重复, 1 032 错误是因 为主从数据库数据不一致
slave_skip_errors=1062
3、重启主mysql
docker restart 主mysql
4、进入主mysql进行授权某个用户能访问主mysql的数据,创建数据同步用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'
5、创建从mysql
docker run -p 3308:3306 \
-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=123456 \
-d --name slave-mysql mysql:5.7
6、配置从mysql的my.cnf
[mysqld]
## 设置 server_id , 同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql ## 开启二进制日志功能, 以备 Slave 作为其它数据库 实例的 Master 时使用
log-bin=mall-mysql-slave1-bin ## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M ## 设置使用的二进制日志格式( mixed,statement,row )
binlog_format=mixed ## 二进制日志过期清理时间。默认值为 0 , 表示不 自动清理。
expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错 误, 避免 slave 端复制中断。 ## 如:1 062 错误是指一些主键重复, 1 032 错误是因 为主从数据库数据不一致
slave_skip_errors=1062
## relay_log 配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示 slave 将复制事件写进自 己的二进制日志
log_slave_updates=1
## slave 设置为只读(具有super 权限的用户除外)
read_only=1
7、重启从mysql
docker restart 从mysql
8、进入主mysql查看主mysql的position(为下一步的master_log_pos的值)
show master status
9、在从mysq进行主从复制
change master to master_host='192.168.229.130',
master_user="slave",
master_password="123456",
master_port=3307,
master_log_file="mall-mysql-bin.000001",
master_log_pos=154;
10、查看从mysql的主从同步状态(IORunning为no)
show status slave \G
11、在从数据库开启主从同步
start slave;
show status slave \G;