Docker学习8 - 安装Mysql主从复制

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容器

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

 

执行SQL

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

 

设置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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[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实例

1
docker restart mysql-slave

 

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

1
show master status;

 

 

9.进入mysql-slave容器

1
2
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;

 

 

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

从机使用库-查看记录,ok
posted @   suphowe  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示

目录导航