问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

使用docker实现Mysql主从复制

发布网友 发布时间:2024-10-01 05:51

我来回答

1个回答

热心网友 时间:2024-10-13 17:57

前言:

在很多项目,特别是互联网项目,在使用MySQL时都会采用主从复制、读写分离的架构。

为什么要采用主从复制读写分离的架构?如何实现?有什么缺点?让我们带着这些问题开始这段学习之旅吧!

MySQL主从复制

为什么基于Docker搭建?

资源有限

虚拟机搭建对机器配置有要求,并且安装MySQL步骤繁琐

一台机器上可以运行多个Docker容器

Docker容器之间相互独立,有独立ip,互不冲突

Docker使用步骤简便,启动容器在秒级别

利用Docker搭建主从服务器

首先拉取docker镜像,我们这里使用5.7版本的mysql:

dockerpullmysql:5.7

然后使用此镜像启动容器,这里需要分别启动主从两个容器

Master(主):

dockerrun-p3339:3306--namemysql_master-eMYSQL_ROOT_PASSWORD=123456-dmysql:5.7

Slave(从):

dockerrun-p3340:3306--namemysql_slave-eMYSQL_ROOT_PASSWORD=123456-dmysql:5.7

Master对外映射的端口是3339,Slave对外映射的端口是3340。因为docker容器是相互独立的,每个容器有其独立的ip,所以不同容器使用相同的端口并不会冲突。这里我们应该尽量使用mysql默认的3306端口,否则可能会出现无法通过ip连接docker容器内mysql的问题。

使用dockerps命令查看正在运行的容器:

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

配置Master(主)

通过dockerexec-it627a2368c865/bin/bash命令进入到Master容器内部,也可以通过dockerexec-itmysql-master/bin/bash命令进入。627a2368c865是容器的id,而mysql-master是容器的名称。

cd/etc/mysql切换到/etc/mysql目录下,然后vimmy.cnf对my.cnf进行编辑。此时会报出bash:vim:commandnotfound,需要我们在docker容器内部自行安装vim。使用apt-getinstallvim命令安装vim

如果还是报错bash:vim:commandnotfound,则执行apt-getupdate,然后再次执行apt-getinstallvim即可成功安装vim。

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

配置完成之后,需要重启mysql服务使配置生效。使用servicemysqlrestart完成重启。重启mysql服务时会使得docker容器停止,我们还需要dockerstartmysql-master启动容器。

下一步在Master数据库创建数据同步用户,授予用户slaveREPLICATIONSLAVE权限和REPLICATIONCLIENT权限,用于在主从库之间同步数据。

CREATEUSER'slave'@'%'IDENTIFIEDBY'123456';GRANTREPLICATIONSLAVE,REPLICATIONCLIENTON*.*TO'slave'@'%';

配置Slave(从)

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

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

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

链接Master(主)和Slave(从)

在Master进入mysql,执行showmasterstatus;

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

在Slave中进入mysql,执行changemastertomaster_host='172.17.0.2',master_user='slave',master_password='123456',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=609,master_connect_retry=30;

命令说明:

master_host:Master的地址,指的是容器的独立ip,可以通过dockerinspect--format='{{.NetworkSettings.IPAddress}}'容器名称|容器id查询容器的ip

master_port:Master的端口号,指的是容器的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定Slave从哪个日志文件开始复制数据,即上文中提到的File字段的值

master_log_pos:从哪个Position开始读,即上文中提到的Position字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

在Slave中的mysql终端执行showslavestatus\G;用于查看主从同步状态。

正常情况下,SlaveIORunning和SlaveSQLRunning都是No,因为我们还没有开启主从复制过程。使用startslave开启主从复制过程,然后再次查询主从同步状态showslavestatus\G;。

SlaveIORunning和SlaveSQLRunning都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。

在master新建数据库master_test

在slave中查看

以上,mysql主从复制完成!!!

主从复制排错:

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

网络不通

检查ip,端口

密码不对

检查是否创建用于同步的用户和用户密码是否正确

pos不对

检查Master的Position

使用docker实现Mysql主从复制

配置Master(主)通过dockerexec-it627a2368c865/bin/bash命令进入到Master容器内部,也可以通过dockerexec-itmysql-master/bin/bash命令进入。627a2368c865是容器的id,而mysql-master是容器的名称。cd/etc/mysql切换到/etc/mysql目录下,然后vimmy.cnf对my.cnf进行编辑。此时会报出bash:vim:commandnotfou...

Docker部署MySql主从详细教程

一、引言MySQL主从复制是一种数据同步技术,主服务器将数据更改发送给从服务器,实现数据一致性。它有诸多优点,如数据冗余、高可用性和易于扩展。二、部署步骤2.1 Master节点拉取镜像创建持久化文件夹:log、data和conf编写my.cnf配置,包括SQL模式、二进制日志缓存、线程栈等参数运行镜像,映射端口并设置...

MySQL 主从复制数据不一致,怎么办?

首先,准备阶段基于Docker环境。构建MySQL主从环境需要以下步骤:1. 授权从机服务器:设置从机登录用户名和密码,限定登录地址,确保从机可以操作任意库中的任意表。注意,MySQL8中需分步进行用户创建和授权。2. 修改主库配置文件:开启binlog,设置server-id。配置完成后重启MySQL服务。3. 查看主服务器当...

如何利用docker快速构建MySQL主从复制环境

当然,在隔离性方面,传统的虚拟机方式多了一层额外的隔离。但这并不意味着Docker就不安全。Docker利用Linux系统上的多种防护机制实现了严格可靠的隔离。从1.3版本开始,Docker引入了安全选项和镜像签名机制,极大地提高了使用Docker的安全性。

docker compose一键部署主从MySQL数据库

2. 一个从库服务mysql-slave。3. 创建网络shardingSphere,mysql-master和mysql-slave均在此网络内。启动服务:运行sudo docker compose up -d命令启动服务。验证:1. 在主库端创建表并添加数据。2. 在从库端查看表及数据同步情况。解决常见问题:问题一:从库START REPLICA失败。现象:启动复制命令...

Docker安装主从mysql

执行如下指令 通过如下看出Slave_IO_Running、Slave_SQL_Running结果为no 执行如下指令,开启主从 执行如下指令 show slave status \G; 通过如下看出Slave_IO_Running、Slave_SQL_Running结果为yes,说明主从开启成功 3.4 验证 如下图所示,说明主从配置无误。以上就是docker部署主从mysql的全部过程。

如何在docker和宿主机之间复制文件

Docker通过自动配置iptables规则,实现了NAT(网络地址转换),使得容器能够访问宿主机上的资源,例如mysql数据文件。这个过程是无缝且自动的,无需额外的设置或手动配置。因此,当你需要在Docker容器和宿主机之间复制文件时,只需要确保网络连接畅通,Docker的这些内置功能就能确保数据的交换。

MacOS使用Docker创建MySQL主主数据库

一、创建MySQL容器配置目录 在当前用户目录下,创建一组目录以存放MySQL容器配置文件。Linux环境下此步骤可省略。二、配置主主数据库 分别配置mone和mtwo容器的my.cnf文件,设置server_id、复制配置和读写权限等参数。三、创建MySQL数据库容器 使用Docker运行mone和mtwo容器,指定端口映射和配置文件路径。四、...

docker容器内怎么连接外部的mysql

重启使用 docker restart <容器id>, 我个人也是使用ssh习惯了 所以依赖的镜像把ssh服务栽进去了。docker 版本:复制代码 代码如下:[root@private_network mysql]# docker version Client version: 1.6.0-rc5 Client API version: 1.18 Go version (client): go1.4.2 Git commit (client): fc482...

docker三板斧之续篇——mysql容器恢复数据库

接下来,数据库迁移的重头戏来了。确保登录到mysql容器后,依次进行数据库、用户和权限的创建。然后,将导出的SQL脚本复制到容器中,并使用source命令执行。具体操作为:进入mysql容器,执行source命令,这将完成数据库的导入。至此,迁移工作顺利完成。此外,为了扩展应用,附上创建redis容器的docker-compose...

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
高分求林志颖版绝代双骄中所有曲子,不是片头曲和片尾曲!!! 世界著名的美声音乐家 谁有林志颖版绝代双骄里面的全部配乐??知道名字也行... 丝瓜要多久才开花 新闻照怎样照才最有新闻价值 ...花木兰提名奥斯卡,不同风格的小仙女,《花木兰》有什么特色? 北师大江津附中教学质量怎样 里有什么四字成语 阅读材料,选择合适的方法把下列混合物按要求分离.材料一:如图:材料... 如果物体是易溶于水,但熔点50沸点75的话,跟水混合后,蒸馏水时会不会跟... docker启动mysql报错 盗窃罪最少多少钱立案 t8865成都到西昌火车时刻表,何时恢复的? 配带红玛瑙的禁忌 天天向上浪浪的那一期中他们穿的袜子那有卖的 微信被限制交易是什么回事儿? 什么微信不能转账了 word2003文档插入图片显示空白方框怎么办 什么软件可以录制电脑视频可以录制音频的.. ...录制的声音呢?两者如何同步?什么软件可以实现? 西充县基本概况 凤凰情内容简介 有帝王气质的古风名字男孩 让人惊艳的古风男孩名字,太好听了吧! 有帝王气质的古风名字男 有帝王气质的古风名字男有哪些 玉子烧和厚蛋烧的区别 是同一种食物 日料的煎蛋做法有哪些? 玉子烧是啥 玉子烧为什么叫玉子烧 U盘可以看到盘符,但是打不开,如图所示,也格不了。。。 我的U盘插入电脑,也显示盘符,但打不开也不能格式化?而且只显示有8M大小... 能查到U盘的盘符,就是打不开也格式化不了,是坏了吗? 擦上芦荟为什么感觉脸上有点痒痒的 用新鲜摘下来的芦荟做面膜,面部会有痒痒想抓的感觉 人教版三年级数学上册ppt课件三年级数学上册课件人教版 不能和人亲密相处是怎么回事呢 王者荣耀阿离的助力礼怎么用 王者荣耀阿离的助力礼怎么得到 喻人如隐士,喻季候如秋,喻花如菊。这句话什么意思? 承揽合同有哪些合同 奥克斯的柜式空调怎么样啊,我想买一台(急……) 请问,奥克斯的柜式空调好吗?我想买这个牌子的,请高手指点 联想ThinkPad X230(2320A23)处理器 联想ThinkPad X2302320A38 联想ThinkPad X230(2320A38)的处理器和显卡性能如何? ThinkPad X230 2320A37基本规格 ThinkPad X230 2320A37主要参数 联想ThinkPad X230(2320A24)基本参数 漂亮迷人的锁骨是什么样的呢 你们看一看我的锁骨漂亮吗?我167你们觉得我多沉? 丰田rav4两驱和四驱如何区别 河南科技大学南阳是三本吗 本人河南南阳人,已被河南科技大学录取,想问一下,大概何时能收到通知书...