Docker安装MySQL主从配置

本文详细描述了如何在Docker中安装并配置MySQL5.7的主从架构,包括主库和从库的安装、my.cnf配置文件的修改、账号创建以及主从同步的设置。
摘要由CSDN通过智能技术生成

 

前言

        实际生产中,当数据量比较多时,特别是读多写少的应用中,常常需要用到数据库的主从架构,用于减轻主库的读请求压力,增强可用性。本文使用的数据库版本为:MySQL 5.7.30

        单机MySQL的安装可参考:Docker 安装 MySQL 5.7.30-CSDN博客

 

安装数据库

# 安装主服务器,由于3306已经被以前安装的MySQL占用了,所以这里用3305做映射端口
docker run -p 3305:3306 --name mysql-master --restart=always --privileged=true \
-v /usr/local/mysql-master/log:/var/log/mysql \
-v /usr/local/mysql-master/data:/var/lib/mysql \
-v /usr/local/mysql-master/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.30

# 安装从服务器
docker run -p 3307:3306 --name mysql-slave --restart=always --privileged=true \
-v /usr/local/mysql-slave/log:/var/log/mysql \
-v /usr/local/mysql-slave/data:/var/lib/mysql \
-v /usr/local/mysql-slave/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.30

# 查看
docker ps

d2775b06d2d54b69bd15e635348ea15d.png

 

主库 修改my.cnf 配置文件(没有,则新增)

切换目录:

cd /usr/local/mysql-master/conf
vim my.cnf

修改配置:

[mysqld]
## 主库配置

## 设置server_id,需要唯一

server_id=1000

## 指定不需要同步的数据库名称

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

 

从库 修改my.cnf 配置文件(没有,则新增)

切换目录:

cd /usr/local/mysql-master/conf
vim my.cnf

修改配置:

[mysqld]
## 从库配置

## 设置server_id,需要唯一

server_id=1001 

## 指定不需要同步的数据库名称

binlog-ignore-db=mysql  

## 开启二进制日志功能

log-bin=mysql-bin  

## 设置二进制日志使用内存大小(事务)

binlog_cache_size=1M  

## 设置使用的二进制日志格式(mixed,statement,row)

binlog_format=mixed  

## 二进制日志过期清理时间。默认值为0,表示不自动清理。

expire_logs_days=7  

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1

## slave设置为只读(具有super权限的用户除外)
read_only=1

 

主库 创建账号-用于数据同步

# 创建账号(在主库中)
CREATE USER 'user_slave'@'%' IDENTIFIED BY '123456';
# 授予权限 (*.* 指定 所有数据库.所有数据表)
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'user_slave'@'%';
# 刷新
flush privileges;

 

重启服务

# docker中重启
docker restart mysql-master
docker restart mysql-slave

 

查看 主库 配置

        查看主库的配置,用于后面设置从库的同步配置;

show master status;

7a6f880c57ef4d79aca2e5688115a52d.png

        参数说明:

        File: 二进制日志文件名(bin-log)

        Position: 当前正在写入的二进制日志文件中的位置。

        Binlog_Do_DB: 要复制的数据库名,空表示复制所有库表 

        Binlog_Ignore_DB: 忽略复制的数据库名,空表示不忽略

 

从库 设置主从同步

# 设置要同步的主库信息
change master to master_host='192.168.44.130', master_user='user_slave', master_password='Aa@@123456', master_port=3306, master_log_file='mysql-bin.000015', master_log_pos=154, master_connect_retry=30;


## 参数说明:
master_host: 主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。

# 查看 从库 状态 
show slave status;
## slave_io_running和slave_sql_running为 NO,说明未开启主从同步

f36e8fdacfe7469c939d6b5ea8deab44.png

 

从库 开启主从同步

start slave;

e9db803e277543e1ba73a1658c733951.png

验证

  • 主库新增/修改数据库,数据表,新增行记录;
  • 查看从库中是否自动产生有相同的数据库、表、以及行记录。

 

 

参考

linux环境下 mysql5.7主从同步搭建_linux mysql 5.7主从同步配置-CSDN博客

【保姆级】docker安装MySQL主从复制_docker新建一个端口为3307的同名数据库-CSDN博客

如何给运行中的docker容器增加映射端口 - 知乎

 

 

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

院长Amos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值