1、准备好带docker的虚拟机
2、拉取mysql5.7镜像
docker pull mysql:5.7
3、创建主服务的映射
mkdir -p /mydata/mysql_master/log
mkdir -p /mydata/mysql_master/data
mkdir -p /mydata/mysql_master/conf
touch /mydata/mysql_master/conf/my.cnf
4、创建从服务的映射
mkdir -p /mydata/mysql_slave/log
mkdir -p /mydata/mysql_slave/data
mkdir -p /mydata/mysql_slave/conf
touch /mydata/mysql_slave/conf/my.cnf
5、设置主服务mysql_master配置
cd /mydata/mysql_master/conf
vim my.cnf
[client]
# 设置默认的字符集为UTF-8
default_character_set=utf8
[mysql]
# 设置默认的字符集为UTF-8
default-character-set=utf8
[mysqld]
# 设置MySQL服务器的排序规则为UTF-8
collation_server = utf8_general_ci
# 设置MySQL服务器使用的字符集为UTF-8
character_set_server = utf8
# 设置server_id,同一局域网中需要唯一
server_id=10010
# 指定不需要同步的数据库名称
binlog-ignore-db=mysql
# 开启二进制日志功能
log-bin=mysql_master-bin
# 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
# 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
# 二进制日志过期清理时间。默认为0,表示不自动清理
expire_logs_days=3
# 跳过主从复制中遇到的错误,避免slave端复制中断 1062:一些主键重复
slave_skip_errors=1062
6、设置从服务mysql_slave配置
cd /mydata/mysql_slave/conf
vim my.cnf
[client]
# 设置默认的字符集为UTF-8
default_character_set=utf8
[mysql]
# 设置默认的字符集为UTF-8
default-character-set=utf8
[mysqld]
# 设置MySQL服务器的排序规则为UTF-8
collation_server = utf8_general_ci
# 设置MySQL服务器使用的字符集为UTF-8
character_set_server = utf8
# 设置server_id,同一局域网中需要唯一
server_id=10086
# 指定不需要同步的数据库名称
binlog-ignore-db=mysql
# 开启二进制日志功能
log-bin=mysql_slave-bin
# 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
# 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
# 二进制日志过期清理时间。默认为0,表示不自动清理
expire_logs_days=3
# 配置中继日志
relay_log=mysql-relay-bin
# slave将复制事件写进自己的二进制日志
log_slave_updates=1
# 设置只读(具有super权限的用户除外)
read_only=1
7、创建主服务mysql_master实例并启动
docker run -p 10010: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 \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
8、进入主服务容器,登录msql
docker exec -it mysql_master /bin/bash
mysql -u root -p
密码:root
9、创建从服务mysql_slave用户并设置密码
CREATE USER 'mysql_slave'@'%' IDENTIFIED BY '123456';
10、给从服务mysql_slave赋权及刷新权限
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'mysql_slave'@'%';
FLUSH PRIVILEGES;
11、查看主服务mysql_master状态
show master status;
![image]()
12、创建主服务mysql_slave实例并启动
docker run -p 10086: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
13、进入从服务容器,登录msql
docker exec -it mysql_slave /bin/bash
mysql -u root -p
密码:root
14、在从服务mysql_slave配置主服务mysql_master信息
change master to master_host='主服务宿主机IP',master_port=10010,master_user='mysql_slave',master_password='123456',master_log_file='mysql_master-bin.000003',master_log_pos=781,master_connect_retry=30;
15、从服务mysql_slave查看主从状态
show slave status \G;
![image]()
16、从服务mysql_slave开启主从同步
start slave;
17、再次从服务mysql_slave查看主从状态
show slave status \G;
![image]()