广告
返回顶部
首页 > 资讯 > 数据库 >如何搭建基于Docker的MySQL主从复制
  • 972
分享到

如何搭建基于Docker的MySQL主从复制

2024-04-02 19:04:59 972人浏览 八月长安
摘要

下文主要给大家带来如何搭建基于Docker的Mysql主从复制,希望这些内容能够带给大家实际用处,这也是我编辑如何搭建基于Docker的mysql主从复制这篇文章的主要目的。好了,废话不多说,大家直接看下文

下文主要给大家带来如何搭建基于DockerMysql主从复制,希望这些内容能够带给大家实际用处,这也是我编辑如何搭建基于Docker的mysql主从复制这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。                                                           如何搭建基于Docker的MySQL主从复制

为什么基于Docker搭建?

  • 资源有限
  • 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐
  • 一台机器上可以运行多个Docker容器
  • Docker容器之间相互独立,有独立ip,互不冲突
  • Docker使用步骤简便,启动容器在秒级别

利用Docker搭建主从云服务器

首先拉取docker镜像,我们这里使用5.7版本的mysql:
docker pull mysql:5.7
然后使用此镜像启动容器,这里需要分别启动主从两个容器

Master(主):

docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT_PASSWord=123456 -d mysql:5.7

Slave(从)

docker run -p 3340:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
Master对外映射的端口是3339,Slave对外映射的端口是3340。因为docker容器是相互独立的,每个容器有其独立的ip,所以不同容器使用相同的端口并不会冲突。这里我们应该尽量使用mysql默认的3306端口,否则可能会出现无法通过ip连接docker容器内mysql的问题。
使用docker ps命令查看正在运行的容器:

如何搭建基于Docker的MySQL主从复制

此时可以使用Navicat等工具测试连接mysql

如何搭建基于Docker的MySQL主从复制

配置Master(主)

通过docker exec -it 5ddad8c2f368 /bin/bash命令进入到Master容器内部,也可以通过docker exec -it mysql-master /bin/bash命令进入。5ddad8c2f368是容器的id,而mysql-master是容器的名称。
cd /etc/mysql/mysql.conf.d切换到/etc/mysql/mysql.conf.d目录下,然后vim mysqld.cnf对my.cnf进行编辑。此时会报出bash: vim: command not found,需要我们在docker容器内部自行安装vim。使用apt-get install vim命令安装vim
会出现如下问题:

如何搭建基于Docker的MySQL主从复制

执行apt-get update,然后再次执行apt-get install vim即可成功安装vim。然后我们就可以使用vim编辑my.cnf,在my.cnf中添加如下配置:

[mysqld]
## 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin

配置完成之后,需要重启mysql服务使配置生效。使用service mysql restart完成重启。重启mysql服务时会使得docker容器停止,我们还需要docker start mysql-master启动容器。
下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATioN SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
首先连接mysql数据库
root@5ddad8c2f368:/# mysql -uroot -p123456
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

授予复制账号REPLICATION CLIENT权限,复制用户可以使用SHOW MASTER STATUS, SHOW SLAVE STATUS和 SHOW BINARY LOGS来确定复制状态。
授予复制账号REPLICATION SLAVE权限,复制才能真正地工作。

如何搭建基于Docker的MySQL主从复制

配置Slave(从)

和配置Master(主)一样,在Slave配置文件my.cnf中添加如下配置:

[mysqld]  
## 设置server_id,注意要唯一  server-id=101 
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用  
log-bin=mysql-slave-bin 
## relay_log配置中继日志  
relay_log=edu-mysql-relay-bin

配置完成后也需要重启mysql服务和docker容器,操作和配置Master(主)一致。

relay log很多方面都跟binary log差不多。区别是:从云服务器I/O线程将主云服务器的二进制日志读取过来记录到从云服务器本地文件,然后SQL线程会读取relay-log日志的内容并应用到从云服务器,从而使从云服务器和主云服务器的数据保持一致。

如何搭建基于Docker的MySQL主从复制

链接Master(主)和Slave(从)

在Master进入mysql,执行show master status;
如何搭建基于Docker的MySQL主从复制

File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。
在Slave 中进入 mysql,执行

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

命令说明:
master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --fORMat='{{.networkSettings.IPAddress}}' 容器名称|容器id查询容器的ip

如何搭建基于Docker的MySQL主从复制

master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态。
如何搭建基于Docker的MySQL主从复制

正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status \G;。
如何搭建基于Docker的MySQL主从复制

SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。
主从复制排错:
如何搭建基于Docker的MySQL主从复制

使用start slave开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据 Last_IO_Error提示予以排除。

  • 网络不通
    检查ip,端口
  • 密码不对
    检查是否创建用于同步的用户和用户密码是否正确
  • pos不对
    检查Master的 Position

测试主从复制

测试主从复制方式就十分多了,最简单的是在Master创建一个数据库,然后检查Slave是否存在此数据库。
Master:
如何搭建基于Docker的MySQL主从复制

Slave:
如何搭建基于Docker的MySQL主从复制

完整的主备流程图

最后让我们来看一下,一个 update 语句在节点 A 执行,然后同步到节点 B的完整流程图。
如何搭建基于Docker的MySQL主从复制

可以看到:主库接收到客户端的更新请求后,执行内部事务的更新逻辑,同时写入binlog。
备库B跟主库A之间维持了一个长连接。主库A内部有一个线程,专门用于服务备库B的这个长连接。
一个事务日志同步的完整过程是这样的:

  • 1、在备库B上通过change master命令,设置主库A的IP、端口、用户名、密码、以及要从哪个位置开始请求binlog,这个位置包含文件名和日志偏移量。
  • 2、在备库B上执行start slave命令,这时侯备库会启动两个线程,io_thread 和 sql_thread。其中, io_thread负责与主库建立连接。
  • 3、主库A校验完用户名、密码后,开始按照备库B传过来的位置,从本地读取binlog,发给B。
  • 4、备库B拿到binlog后,写到本地文件,称为中转日志(relay log)。
  • 5、sql_thread读取中转日志,解析日志里的命令,并执行。

对于以上关于如何搭建基于Docker的MySQL主从复制,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的数据库,相信你会喜欢上这些内容的。

您可能感兴趣的文档:

--结束END--

本文标题: 如何搭建基于Docker的MySQL主从复制

本文链接: https://www.lsjlt.com/news/35490.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何搭建基于Docker的MySQL主从复制
    下文主要给大家带来如何搭建基于Docker的MySQL主从复制,希望这些内容能够带给大家实际用处,这也是我编辑如何搭建基于Docker的MySQL主从复制这篇文章的主要目的。好了,废话不多说,大家直接看下文...
    99+
    2022-10-18
  • Docker搭建Mysql主从复制
    Docker搭建Mysql主从复制 前言 相信我,看完这一篇,mysql主从复制能遇到的错误在我这里都遇到了,docker能遇到的错误在我这里也遇到了,包括centos的错误,看吧,都是成长 do...
    99+
    2023-09-24
    docker mysql 容器 Linux
  • MySQL 5.7 基于GTID搭建主从复制
    MySQL 5.7 基于GTID搭建主从复制    一、搭建过程 1.1 准备三个MySQL实例 mysqld --initialize-insecure --use...
    99+
    2022-10-18
  • 基于GTID的主从复制搭建
    前置检查server-id = 10,master/slave不允许重复log-bingtid-mode = ONenforce-gtid-consistency = ON1,利用mysqlpump复制ma...
    99+
    2022-10-18
  • 通过 mysqldump 搭建基于 gtid MySQL 5.7 主从复制
    安装主从 MySQL 5.7 # 主 MySQL5.7 useradd mysql /sbin/nologin cd /usr/local tar -xvf mysql-5.7.23-linux-glibc...
    99+
    2022-10-18
  • MySQL5.7--------基于无损复制搭建主从
    1. 背景   * MySQL Replication默认都是异步(asynchronous),当主库在执行完一些事务后,是不会管备库的进度的。如果备库不幸落后,而更不幸的是主库此时又出...
    99+
    2022-10-18
  • MySQL基于GTID主从搭建
    目录一、用xtarbackup备份数据库1.1 优势1.2 安装1.3 使用1.3.1 普通备份1.3.2 tar备份1.3.3 xbstream备份1.3.4 恢复二、基于GTID做数据同步2.1 GTID的概念2.2...
    99+
    2022-08-26
  • 如何搭建mysql主从复制
    搭建mysql主从复制的方法在主从服务器开启时间同步[root@storage  ~]# ntpdate 172.18.0.1主数据库配置使用记事本打开主数据库的my.cnf配置文件,在文件中的[my...
    99+
    2022-10-18
  • Mysql主从复制搭建
    1.mysql主库会把所有的写操作记录在binlog日志中,并且生成log dump线程,将binlog日志传给从库的I/O线程,从库生成两个线程,一个是I/O线程,另外一个是SQL线程。 主将更改操作记录到binlog里从将主的binlo...
    99+
    2020-09-28
    Mysql主从复制搭建
  • docker创建MySQL镜像,搭建主从复制环境
    docker创建MySQL镜像,搭建主从复制环境 前言一、编写Dockerfile制作mysql镜像编写Dockerfile文件编写mysql_file文件:编写run.sh文件build M...
    99+
    2023-09-28
    centos linux docker
  • 如何在docker中安装mysql并搭建主从复制
    本篇内容主要讲解“如何在docker中安装mysql并搭建主从复制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何在docker中安装mysql并搭建主从复制...
    99+
    2022-10-18
  • Docker搭建MySQ主从复制原理
    目录简介使用Docker拉取MySQL镜像查看镜像启动MySQL主从容器配置Master配置Slave开启Master-Slave主从复制简介 通过docker学习主从复制可以节省资...
    99+
    2022-11-13
  • Docker搭建MySQL5.7主从复制的实现
    目录1、新建mysql-master主服务器容器实例33072、新建mysql-master主服务器配置文件my.cnf3 重启master实例4 进入mysql-master容器5 master容器实例内创建数据同步用...
    99+
    2022-06-22
    DockerMySQL主从复制 Docker搭建MySQL主从
  • 基于Docker搭建Redis主从集群的实现
    目录1、拉取 Redis 镜像2、创建 6 个 Redis 容器3、启动 Redis 容器4、组建 Redis 集群5、关于Redis集群搭建最近陆陆续续有不少园友加我好友咨询 re...
    99+
    2022-11-12
  • 基于docker环境下如何搭建redis主从集群
    基于docker环境下如何搭建redis主从集群,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1   前言笔者给大家介绍基于docker环境下搭建Red...
    99+
    2023-06-04
  • 基于GTID 的主从搭建
    备注:此处搭建的为一主多从。环境:centos7+MySQL5.7主:192.168.162.134从1:192.168.162.133从2:192.168.162.135安装参照:http://liyin...
    99+
    2022-10-18
  • docker下如何部署MySQL8基于GTID的主从复制
    这篇文章给大家介绍docker下如何部署MySQL8基于GTID的主从复制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。安装docker#yum install docker添加doc...
    99+
    2022-10-18
  • mysql搭建主从复制(一主一从,双主双从)
    主从复制原理 Mysql 中有一个binlog 二进制日志,这个日志会记录下所有修改了的SQL 语句,从服务器把主服务器上的binlog二进制日志在指定的位置开始复制主服务器所进行修改的语句到从服务器上执行一遍。 流程图 搭建一...
    99+
    2016-07-17
    mysql搭建主从复制(一主一从,双主双从)
  • Mysql主从复制搭建过程
    这篇文章主要讲解了“Mysql主从复制搭建过程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mysql主从复制搭建过程”吧! 一、相关概念mysql主从复...
    99+
    2022-10-18
  • mysql主从复制环境搭建
    mysql 主从第一次我用不同版本mysql做会出不同步问题,建议用相同版本的mysql做主从主my.cnf文件 (192.168.1.64)mysqld模块加入log-bin=mysql-bin 启动二进...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作