1.主从搭建步骤

1.新建主服务器容器实例3307

docker run -p 3307:3306 --name mysql-master \
-v /usr/mydata/mysql-master/log:/var/log/mysql:rw \
-v /usr/mydata/mysql-master/data:/var/lib/mysql-files:rw \
-v /usr/mydata/mysql-master/conf:/etc/mysql:rw \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.21

2. 进入/usr/mydata/mysql-master/conf目录下新建my.cnf

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

 

 

 

3.修改完配置后重启master实例

docker restart mysql-master

 

 

4.进入mysql-master容器

docker exec -it mysql-master /bin/bash
mysql -uroot -proot

 

执行SQL

#设置log
set session binlog_format=STATEMENT;
 
#重点 查看master 需要记录 File 和 Position 用于从库配置
show master status;

docker安装yum docker安装运行MySQL从机_docker

 

设置mater开启远程访问(可用navicat连接)

设置mater开启远程访问(可用navicat连接)

# 切换到mysql数据库
use mysql;

# 查询user表root用户访问权限
select user,host,plugin from user;

# 设置root用户访问权限和密码加密类型
# 默认root用户的host为localhost(本地连接),远程连接我们需要修改为%
update user set host='%' where user='root';

# 修改密码插件,mysql8默认是caching_sha_password
alter user 'root'@'%' identified by 'root' password expire never;
alter user 'root'@'%' identified with mysql_native_password by 'root';

# 设置为mysql_native_password后可以通过Navicat等工具连接
# 刷新
flush privileges;

# 退出
exit;

 

5.新建从服务器容器实例3308

docker run -p 3308:3306 --name mysql-slave \
-v /usr/mydata/mysql-slave/log:/var/log/mysql:rw \
-v /usr/mydata/mysql-slave/data:/var/lib/mysql-files:rw \
-v /usr/mydata/mysql-slave/conf:/etc/mysql:rw \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.21

 

6.进入/usr/mydata/mysql-slave/conf目录下新建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端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
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. 修改完配置后重启slave实例

docker restart mysql-slave

 

8. 在主数据库中查看主从同步状态

show master status;

 

 

9.进入mysql-slave容器

docker exec -it mysql-slave /bin/bash
mysql -uroot -proot

 

10.在从数据库中配置主从复制

# 如果已经执行过的需要先执行一下两条命令
stop slave;
reset master;
 
 
#执行这条命令
CHANGE MASTER TO 
MASTER_HOST='127.0.0.1',
MASTER_PORT=3307,
MASTER_USER='root',
MASTER_PASSWORD='root',
master_log_file='mall-mysql-bin.000001',
master_log_pos=3738,
master_connect_retry=60; 
 
 
CHANGE MASTER TO 
MASTER_HOST=master的ip地址,如果是服务器相同的话直接用服务器ip地址即可,
MASTER_PORT= master的端口,
MASTER_USER=mysql连接用户名,
MASTER_PASSWORD=mysql连接密码,
master_log_file= master上查看的File,
master_log_pos= master查看到的Position ,
master_connect_retry=60; 
 
#启动 slave 服务
start slave;
 
#查看是否启动成功
show slave status\G;

docker安装yum docker安装运行MySQL从机_docker_02

 

 

11.修改从库root密码加密方式

alter user 'root'@'%' identified by 'root' password expire never;
alter user 'root'@'%' identified with mysql_native_password by 'root';
flush privileges;

  

12.主从复制测试

主机新建库-使用库-新建表-插入数据,ok