docker实现mysql 主从复制

这篇具有很好参考价值的文章主要介绍了docker实现mysql 主从复制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

docker实现mysql 主从复制

                                                              💧记录一下如何在Docker中启动两个MySQL容器来进行主从复制💧          


🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 《数据结构与算法》专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
💧 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 💐
🥣 《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~ 🌊
🪁 希望本文能够给读者带来一定的帮助~🌸文章粗浅,敬请批评指正!🐥


之前踩了不少坑,终于弄好了,和我一起来看看整个部署过程吧 !

使用Docker部署MySQL可以看看:Docker中部署MySQL

通常来说,配置好了MySQL主从复制之后,在程序中还要配置读写分离,大家可以看看我的这篇文章,完成一个简单的Java项目案例:【Spring AOP + 自定义注解 + 动态数据源 实现主从库切换&读写分离】—— 案例实战



🐳Docker实现MySQL主从复制

前言

1)、mysql主从复制用途

  • 实时灾备,用于故障切换
  • 读写分离,提供查询服务
  • 备份,避免影响业务

2)、主从部署必要条件:

  • 主库开启binlog日志(设置log-bin参数)
  • 主从server-id不同
  • 从库服务器能连通主库

利用docker实现mysql的主从复制,首先需要在服务器上安装好docker 及拉取相关mysql镜像:

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

一、部署主从Mysql服务器

在服务器创建两个目录 master 与 slave 分别对应主从数据库的data和conf ,目录结构如下
docker实现mysql 主从复制
然后在master/conf/ 路径下创建 my.cnf 里面内容如下

[mysqld]
## 同一局域网内注意要唯一
server-id=1024
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
secure_file_priv=/var/lib/mysql
default_authentication_plugin=mysql_native_password  #设置密码规则
max_connections=1000 #最大连接数设置 根据实际需要 自行调整

在slave /conf/路径下 创建 my.cnf 内容如下

[mysqld]
## 设置server_id,注意要唯一
server-id=1022 
## 开启二进制日志功能,以备Slave作为其它SlaveMaster时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
secure_file_priv=/var/lib/mysql
default_authentication_plugin=mysql_native_password  #设置密码规则
max_connections=1000 #最大连接数设置 根据实际需要 自行调整

然后利用镜像分别启动两个容器,一个master 一个slave , master端口为3339,slave为3340 对应的root密码为123456,映射配置文件和数据存储目录到mysql
启动 Master

 docker run --name master -p 3339:3306  \
 -v "$PWD/master/conf/my.cnf":/etc/mysql/my.cnf \
 -v "$PWD/master/data":/var/lib/mysql \
 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

启动Slave

  docker run --name slave -p 3340:3306 \
 -v "$PWD/slave/conf/my.cnf":/etc/mysql/my.cnf \
 -v "$PWD/slave/data":/var/lib/mysql \
 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

docker实现mysql 主从复制
启动完成后,分别测试下连接,发现都可以正常连接,接下来开始具体的主从配置
docker实现mysql 主从复制
docker实现mysql 主从复制

二、主从数据同步配置

使用navicat连接 master数据库,进行slave账户创建及相关授权
docker实现mysql 主从复制
docker实现mysql 主从复制

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
 
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

在Master进入mysql,执行show master status;

show master status;

docker实现mysql 主从复制
回到linux服务器,执行命令查看master容器的ip地址

docker inspect --format={{.NetworkSettings.IPAddress}} master
172.17.0.3

然后在slave数据库服务器中根据上面得到的信息执行命令,主要是
master_log_file和 master_log_pos这两个参数需要根据上面语句查出来的结果进行配置,IP分配的内部地址基本就是172.17.0.2,如果不是这个地址改为 上述 查询出来的地址即可。
即:

change master to master_host='172.17.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000005', master_log_pos= 1563, master_connect_retry=30;
  • master_port: Master的端口号,指的是容器的端口号.
  • master_user:用于数据同步的用户
  • master_password:用于同步的用户的密码
  • master_log_file:指定Slave从哪个日志文件开始复制数据,即上文中提到的File字段的值
  • master_log_pos:从哪个Position开始读,即上文中提到的Position字段的值
  • master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

查询下当前从服务器的状态
show slave status \G;

show slave status \G;

由于navicat 不支持 \G格式化展示,所以我们进入slave从服务器内查看

docker exec -it slave mysql -uroot -p123456
 
show slave status \G

docker实现mysql 主从复制

可以看到这两个属性都为No
设置从数据库开启主从服务

start slave;

如果中途报错,之类的,可以使用reset slave进行从服务器重置

reset slave;

如果之前的配置没配置好,第一个yes将不会正常显示
再次强调!!!即:下面这段配置一定要对应好!!

change master to master_host='172.17.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000005', master_log_pos= 1563, master_connect_retry=30;

docker实现mysql 主从复制
执行语句后,可以看到主从服务已经开启了。

三、主从同步测试

利用navicat 在主数据库新建一个TestDB数据库,然后刷新从数据库连接

docker实现mysql 主从复制
刷新:
docker实现mysql 主从复制
发现在主数据库添加的新库TestDB也被同步到从数据库上了,至此主从同步配置完成。
后续对主数据库做的操作都会基于binlog发送给从数据库的relaylog上进行同步。

docker实现mysql 主从复制

🐳总结

使用docker起两个mysql容器进行主从复制的整个过程就是这样子了,希望能够给大家带来帮助

参考博客:Docker实现Mysql 主从复制实战(谢谢这位博主,赞一个!)

下一篇:docker启动redis文章来源地址https://www.toymoban.com/news/detail-410089.html

到了这里,关于docker实现mysql 主从复制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker进阶篇-安装MySQL主从复制

      查看返回结果的文件名 File 、当前位置 Position,下面用得上 进入从数据库 配置从数据库所属的主数据库 命令详解: master_host:主数据库IP地址(即宿主机IP) master_user:在主数据库创建的用于同步数据的用户账号 master_password:在主数据库创建的用于同步数据的用户密码

    2024年01月20日
    浏览(39)
  • Docker 搭建MySQL主从复制-读写分离

    MySQL主从复制是一种常用的数据库高可用性解决方案,通过在主数据库上记录的数据变更,同步到一个或多个从数据库,实现数据的冗余备份和读写分离。在Docker环境下搭建MySQL主从复制和读写分离,不仅方便管理,还能充分发挥Docker的轻量、可移植性等特性。 在开始搭建之

    2024年02月22日
    浏览(34)
  • 在docker下进行mysql的主从复制

    Master Slave MySQL 主数据库端口为 3306,容器名称为 mysql-master,默认密码为 123456,-d 为后台运行。 MySQL 从数据库端口为 3307,容器名称为 mysql-slave,默认密码为 123456,-d 为后台运行。 进入容器: 修改配置文件: 找不到vim命令解决: 修改配置文件,添加如下配置: 重启容器:

    2024年02月12日
    浏览(23)
  • docker创建MySQL镜像,搭建主从复制环境

    学习黑马的MySQL时,在主从复制、分库分表、读写分离等阶段需要多台服务器,于是尝试用docker创建镜像搭建主从复制环境。 本文基于centos7搭建mysql镜像。 参考大佬文章: link 编写mysql_file文件: 由于需要进行编辑操作,所以需要额外下载vim 编写run.sh文件 build MySQL镜像 以特权

    2024年02月07日
    浏览(34)
  • docker笔记4:高级复杂安装-mysql主从复制

    docker run -p 3307: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 进入/mydata/mysql-master/conf目录下新建my.cnf  vim my.cnf docker restart mysql-master 进入mysql-master容器  docker exec -it

    2024年02月09日
    浏览(32)
  • 使用docker进行MYSQL主从复制(一主两从)

    目录 概述主从介绍 主从作用 主从作用有: 主从形式有:  配置步骤 主要配置 1创建三个进程 2修改配置文件 3主机配置 4从机配置 5将文件修改后,复制到容器里面 6进入主机进行配置 6.1创建用户 6.2给用户授权 6.3刷新权限 7进入从机进行配置 对M1S1 对M2S2  8最后开启主从 9测

    2024年02月16日
    浏览(31)
  • Docker搭建MySQL8.0主从复制(一主一从)

    宿主机使用的版本为 19045 的win10专业版,MySQL使用的是8.0+,Docker容器使用Linux。 略 修改Docker默认安装路径 安装包自己就提供了修改安装路径的功能,CMD中运行: “Docker Desktop Installer.exe” install --installation-dir= --installation-dir=path : changes the default installation location ( C:Program Fil

    2024年01月25日
    浏览(32)
  • 基于 Docker 的 MySQL 主从复制搭建(Mac M1版本)

    系统:Macbook M1 镜像版本:mysql:5.7 如果是要查 slave 连接不上 master 的问题,可以直接跳到文章末尾踩坑处 准备工作 拉取镜像 本地数据卷挂载 因为mysql不挂载的话,重启丢失数据,所以在本地创建三个空的文件夹 conf、data、log 即可 部署mysql_master(主) 运行master容器 不加 -

    2024年02月10日
    浏览(32)
  • 基于docker实现主从复制

    1:实现主从复制这个过程我是趟过坑的,后面是自己动手搞了几遍都成功了以后才开始决定记录的,(所以有的截图和上下文对不上的,比如说docker容器的名字对应不上,大家就用自己的就好),打算从centos8安装docker开始到最后实现主从复制,所以我从一开始将原有docker卸

    2024年02月13日
    浏览(26)
  • MySQL主从复制案例实现

    使用Sharding-JDBC实现读写分离: 1、导入maven坐标 2、 在配置文件中配置读写分离规则 3、在配置文件中配置允许bean定义覆盖配置项 可以看到已经实现了读写分离了。

    2024年02月03日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包