docker搭建mysql主从同步的全过程

 更新时间:2024年04月15日 10:22:24   作者:紫金丨小飞侠  
这篇文章主要介绍了docker搭建mysql主从同步的全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

引言

以前在centos上装一个mysql redis 能搞两三天,各种编译问题,自从用了docker做开发环境之后是真的香,真正体会了一把什么叫一键启动。

最近开发环境自己搭个主从的结构使用,mark一下,顺便分享一下中间可能遇到的问题

搭建流程

docker容器准备

这里以mysql 8.0为例

# 拉取镜像,自己配一下docker镜像源,几十秒就下完了
docker pull mysql:8.0
# 创建容器之间的通信网络
docker network create mysql_db
### 启动主库
docker run -p 3340:3306 --name mysql-m --network mysql_db -e MYSQL_ROOT_PASSWORD=主库root密码 -d mysql:8.0
### 启动从库
docker run -p 3341:3306 --name mysql-s --network mysql_db -e MYSQL_ROOT_PASSWORD=从库root密码 -d mysql:8.0

接下来就是进入容器开始配置mysql主从信息了

这里记得提前创建一个用来同步的用户,记得赋权

CREATE USER `slave`@`%` IDENTIFIED WITH mysql_native_password BY '123456';
# 授权
GRANT REPLICATION SLAVE ON *.* TO  'slave'@'%' identified by '123456';
# 检查一下
show grants for 'slave'@'%';
# 没有的话刷新一下
flush PRIVILEGES;

# 修改主库配置
docker exec -it mysql-m   /bin/bash
# 这里需要安装一下vim
apt-get update
apt-get install vim
vim /etc/mysql/my.cnf

#1.配置server-id 保证同一网络中不重复,其实就普通的主从配置一样了
#2.开启logbin 主从同步其实就是读取binlog的过程
[mysqld]
server-id=101
log-bin=mysql-bin

# 修改从库配置
docker exec -it mysql-s /bin/bash
vim /etc/mysql/my.cnf
# 配置server-id log-bin和relay-log 
# mysql会将变化写入relaylog 从库来读取relaylog做同步
[mysqld]
server-id=102
log-bin=mysql-slave-bin
relay-log=mysql-relay-bin

执行同步

重启主从服务,进入主库查看主库状态 show master status;

记录binlog文件和position ,比如 mysql-bin.000002 1894;

进入从库,执行以下命令

CHANGE MASTER TO master_host = '172.17.0.2', master_user = 'slave', master_password = '123456', master_port = 3306, master_log_file = 'mysql-bin.000002', master_log_pos = 1894, master_connect_retry = 30;

查看从库状态 SHOW SLAVE STATUS; 这里应该可以看到配置的主库host和端口,日志文件及位置信息,但是此时IO是关闭的,还没有线程开始对主库binlog进行同步和对relaylog进行读取。

这里要提一下,上面docker启动容器时我们把端口映射到了3340 和3341 ,但是对于docker容器内部访问时,端口还是3306,主库ip地址可以执行 docker inspect mysql-m 查看自己配置的网络组或者bridge 的IPAddress

然后就是在从库开启slave了,start slave;

关闭同步 stop slave;

接下来就可以愉快地测试啦

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL用户授权管理及白名单的实现

    MySQL用户授权管理及白名单的实现

    MySQL作为一种常用的关系型数据库管理系统,在权限管理和用户认证方面提供了丰富的功能和方案,本文主要介绍了MySQL用户授权管理及白名单的实现,感兴趣的可以了解一下
    2023-09-09
  • MySQL中按照多字段排序及问题解决

    MySQL中按照多字段排序及问题解决

    这篇文章主要介绍了MySQL中按照多字段排序及问题解决的方法,非常的实用,有需要的小伙伴可以参考下。
    2015-03-03
  • mysql 查询重复的数据的SQL优化方案

    mysql 查询重复的数据的SQL优化方案

    这篇文章主要介绍了mysql 查询重复的数据的SQL优化方案,非常不错的方案推荐给大家。
    2015-02-02
  • MySQL中group by与max()一起使用的坑

    MySQL中group by与max()一起使用的坑

    最近在做一个项目,发现用之前SQL语句导出的余额与客户人员最近消费记录所显示的余额不一致,本文就来了解一下这个错误,感兴趣的可以了解一下
    2023-08-08
  • mysql(5.6及以下)解析json的方法实例详解

    mysql(5.6及以下)解析json的方法实例详解

    这篇文章主要介绍了mysql(5.6及以下)解析json的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • MySQL Server 层四个日志详解

    MySQL Server 层四个日志详解

    这篇文章主要介绍了MySQL Server 层四个日志,包括错误日志,查询日志,二进制日志及慢查询日志,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • 解析数据库分页的两种方法对比(row_number()over()和top的对比)

    解析数据库分页的两种方法对比(row_number()over()和top的对比)

    本篇文章是对数据库分页的两种方法对比(row_number()over()和top的对比)进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • 解读SQL语句中要不要加单引号的问题

    解读SQL语句中要不要加单引号的问题

    这篇文章主要介绍了关于SQL语句中要不要加单引号的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • MYSQL查询时间范围内的数据示例代码

    MYSQL查询时间范围内的数据示例代码

    这篇文章主要介绍了MYSQL查询时间范围内的数据,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • mysql 循环insert方式

    mysql 循环insert方式

    这篇文章主要介绍了mysql 循环insert方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08

最新评论