借力 Docker ,三分钟搞定 MySQL 主从复制!

hello 各位小伙伴大家好,今年 5 月份的时候,松哥和大家聊过如何搭建 MySQL 主从复制:

  • 提高性能,MySQL 读写分离环境搭建(一)

  • 提高性能,MySQL 读写分离环境搭建(二)

不过很多小伙伴反映在 Linux 中安装 MySQL 比较费劲,弄错了想从头开始都难,因此今天松哥就来和大家分享一下如何通过 Docker 快速搭建 MySQL 主从复制。

关于 Docker

关于 Docker,松哥这里就不再多说了,松哥之前有出过一个 Docker 教程,大家在公众号后台回复 Docker ,就可以获取教程下载地址。

主从规划

首先规划两个 MySQL 实例:

  • 192.168.66.131:33061/主机

  • 192.168.66.131:33062/从机

当然大家可以准备多个从机,从机的配置步骤是一样的。

在 Docker 中创建两个 MySQL 实例的命令如下:

docker run --name mysql1 -p 33061:3306 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
docker run --name mysql2 -p 33062:3306 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

创建完成后,通过 docker ps 命令可以查看 MySQL 实例的运行情况:

如此,表示 MySQL 实例已经在运行了。使用 Docker 配置 MySQL 主从最方便的莫过于配错了可以非常方便的从头开始。

接下来,我们就开始主从的配置。

配置主机

主机上的配置,主要是两个地方:

  • 第一个是配置一个从机登录用户

  • 第二个配置开启 binlog。

Docker 中创建的 MySQL 实例,默认只有一个用户,就是 root,这里我们需要进入到 MySQL 命令行,再给它分配一个用户。在宿主机中通过如下命令连接上主机:

mysql -u root -h 192.168.66.131 -P 33061 -p

输入密码后,进入到主机的命令行。然后给从机分配用户(因为我的宿主机上也安装了 MySQL,所以可以直接执行 mysql 命令,如果宿主机没有安装 MySQL,建议通过 docker exec 进入到 MySQL 容器中,然后执行如下命令):

GRANT REPLICATION SLAVE ON *.* to 'rep1'@'%' identified by '123';

这个表示从机一会使用 rep1/123 来登录主机,% 表示这个账户可以从任意地址登录,也可以给一个固定的 IP,表示这个账户只能从某一个 IP 登录。

接下来开启 binlog。

binlog 的开启,需要修改 MySQL 的配置,因此,我们需要进入到容器内部去执行。

首先进入到容器内部:

docker exec -it mysql1 /bin/bash

然后找到 MySQL 配置文件的位置:

/etc/mysql/mysql.conf.d/mysqld.cnf

这就是 MySQL 的配置文件。我们要在这里进行修改操作。因为 MySQL 容器中,默认没有 VI 编辑器,安装费事,所以我们可以在宿主机中将配置文件写好,然后拷贝到 MySQL 容器中,覆盖原有配置。我们主要在该配置文件中添加如下内容:

log-bin=/var/lib/mysql/binlog
server-id=1
binlog-do-db = cmdb
  • 第一行表示配置 binlog 的位置,理论上 binlog 可以放在任意位置,但是该位置,MySQL 一定要有操作权限。

  • server-id 表示集群中,每个实例的唯一标识符。

  • bindlog-do-db 表示要同步的数据库有哪些。当从机连上主机后,并不是主机中的每一个库都要同步,这里表示配置哪些库需要同步。

配置完成后,保存退出。

接下来执行命令,将宿主机中的 mysqld.cnf 拷贝到容器中:

docker cp ./mysqld.cnf mysql1:/etc/mysql/mysql.conf.d/

拷贝完成后,重启容器。

docker restart mysql1

容器重启完成后,进入到主机的命令行中,查看配置是否成功:

File 和 Position 需要记着,这两个标记了二进制日志的起点位置,在从机的配置中将使用到这两个参数。

至此,主机的配置就算完成了。

配置从机

从机的配置比较简单,不用开启 binlog,也不用配置要同步的库,只需要在配置文件中,添加一个 server-id 即可。

这是从机的 mysqld.cnf 配置:

配置完成后,一样拷贝到容器中。拷贝方式和主机一样:

docker cp ./mysqld.cnf mysql2:/etc/mysql/mysql.conf.d/

配置完成后,重启从机容器:

docker restart mysql2

重启完成后,进入到 mysql2 的命令行,执行如下命令,开启数据同步:

change master to master_host='192.168.66.131',master_port=33061,master_user='rep1',master_password='123',master_log_file='binlog.000001',master_log_pos=154;

配置完成后,开启从机进程。在从机命令行执行如下命令:

start slave;

接下来,执行 show slave status\G;查看从机状态:

这里重点查看 Slave_IO_Running 和 Slave_SQL_Running ,这两个的值必须为 Yes。如果有一个的值不为 Yes,表示配置失败,一般情况下,配置失败,下面会有失败提示。

至此,我们的 MySQL 主从就算是配置成功了。

检验

配置成功之后,我们可以通过 Navicat 或者 SQLyog 等工具连接上我们的两个 MySQL 实例,然后在主机中创建一个名为 db1 的库,你会发现从机中也会自动同步这个库。

OK,本文就说这么多,有问题欢迎大家留言讨论。


【END】

关注下方二维码,订阅更多精彩内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云服务器Debian11系统安装Linux宝塔面板 搭建WordPress个人博客

阿里云服务器可以使用Debian11镜像系统,在安装Linux宝塔面板,配置LNMP(LinuxNginxMySQLPHP)后,再搭建WordPress个人博客。 一、安装Linux宝塔面板: https://www.bt.cn/ 复制debian安装linux宝塔面板命令&#xff0c…

面试官:聊一下你对MySQL索引的理解?

作者:浪人来源:http://t.cn/AiKmcEefMySQL索引?这玩意儿还能简单聊?明显是在挖坑,幸好老夫早有准备,切听我一一道来。 一、索引是什么?索引是帮助MySQL高效获取数据的数据结构。二、索引能干什么?索引非常…

Linux新建用户可以在shell中切换到该用户也能登录到图形桌面

解决使用useradd testname,passwd testname命令确实创建了一个用户,可以在shell中切换到该用户。但不能登录到图形桌面的问题! 通过下面方法可以在Linux中新建用户,并创建用户主目录,也能登录到图形桌面 1.普通用户先…

这样写Java,同事直呼666

作者:涛姐涛哥来源:cnblogs.com/taojietaoge/p/11575376.html一、MyBatis 不要写 11当遇到多个查询条件,使用where 11 可以很方便的解决我们的问题,但是这样很可能会造成非常大的性能损失,因为添加了 “where 11 ”的过…

Lync Server 2010 安装部署系列三:添加DNS记录

为了让客户端能够自动登录系统,我们需要在DNS服务器上设置创建相关的SRV记录,首先在DNS服务器上创建一条A记录pool.Contoso.com对应IP地址为192.168.1.11,然后创建一条SRV记录对应刚才创建的A记录,服务的内容为_sipinternaltls&am…

Linux系统下MySQL导出数据库和导入数据库的命令

一、MySQL导出数据库用mysqldump命令 注意mysql的安装路径,即此命令的路径,如果你只要查询mysql的运行文件所在地址,直接用下面的命令就可以了,再切换到mysql的运行文件的路径 which mysqlcd /usr/bin/1、导出数据和表结构 命令格…

工作中 99% 会用到的 Git 命令

作者:命中水来源:https://www.cxiansheng.cn/daily/4901.分支操作git branch 创建分支git branch -b 创建并切换到新建的分支上git checkout 切换分支git branch 查看分支列表git branch -v 查看所有分支的最后一次操作git branch -vv 查看当前分支git b…

JSP tomcat 更新不生效

2019独角兽企业重金招聘Python工程师标准>>> 今天遇到一问题,更改好的jsp部署到tomcat后,无论如何页面也不生效,最后才知道是tomcat的work目录没有清的原因,借此机会也特地看了下work目录的作用以及原理,做…

Win10专业版系统Docker安装、配置和使用详细教程

一、win10专业版系统首先需要开启硬件虚拟化及Hyper-V功能,才能进行Docker for Windows软件安装。 如何开启硬件虚拟化,自行百度。可在任务栏中查看虚拟化是否开启。 win10系统,打开控制面板-“应用”-“程序和功能”,开启Hyper…

框架开发之Java注解的妙用

作者:locality来源:https://www.jianshu.com/p/b560b30726d4如果你还不会使用注解,你肯定不好意思对别人说你学过Spring,你学过Mybatis,因为它们用了大量的注解。可见注解在开发领域已经使用的非常广泛了。注解的好处&…

Win10专业版系统PyCharm专业版使用WSL(ubuntu20.04 LTS)配置Docker解释器配置环境详细教程

提前准备好环境: Win10x64专业版21H2; WSL的ubuntu20.04系统; PyCharm2020专业版; Docker for Windows软件稳定版。 一、Win10系统安装WSL(ubuntu20.04 LTS)子系统 1.按照下图,开启“适用于Linux的Windows子系统”和“虚拟机平台”功能,按照提示重启计算机。 2.在Mic…

Mybatis:颠覆你心中对事务的理解

作者:祖大俊来源:my.oschina.net/zudajun/blog/6667641.说到数据库事务,人们脑海里自然不自然的就会浮现出事务的四大特性、四大隔离级别、七大传播特性。四大还好说,问题是七大传播特性是哪儿来的?是Spring在当前线程…

Docker镜像和容器常用命令

一、.Docker帮助命令 1.显示docker的版本信息 docker version 2.显示docker的系统信息,包括镜像和容器的数量 docker info3.docker帮助命令 docker 命令 --help二、Docker镜像命令 1.查看所有本地的主机上的镜像 docker images实例测试: 2.搜索镜像…

如何学会阅读源码?

作者 | youzhibing链接 | cnblogs.com/youzhibing/p/9553752.html1.读源码的经历刚参加工作那会,没想过去读源码,更没想过去改框架的源码;总想着别人的框架应该是完美的、万能的,应该不需要改;另外即使我改了源码&…

求模和求余

一直以为求模和求余是一回事,发现这两者是不同的。以下为网上转载的资料: 通常情况下取模运算(mod)和求余(rem)运算被混为一谈,因为在大多数的编程语言里,都用%符号表示取模或者求余运算。在这里要提醒大家要十分注意当前环境下%运…

利用Dockefile将Python的py文件项目代码打包为Docker镜像

1.创建python项目 【备注:一定要将项目python环境依赖存至本项目下,默认依赖本机python环境(会造成依赖包过多)】 2.创建main.py文件,完成程序代码 主要功能就是获取"https://www.hao123.com/"网址页面源代码,并存储…

面试官:如何实现幂等性校验?

作者 | wangzaiplus来源 | https://www.jianshu.com/p/6189275403ed一、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次比如:订单接口, 不能多次创建订单支付接口, 重复支付同一笔订单只能扣一次钱支付宝回调接口, 可能会多次回调, 必须处理…

阿里为什么禁用Executors创建线程池?

作者 | 何甜甜在吗来源 | http://rrd.me/eUh6V看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,通过源码分析禁用的原因。写在前面首先感谢大家在盖楼的间隙阅读本篇文章&#xff0…

Debian11镜像更新为阿里巴巴开源镜像站镜像,切换root用户,解决用户名不在sudoers文件中此事将被报告,Debian11 文件夹对话框、火狐浏览器、命令终端等没有最大化和最小化

选择Debian作为编程开发最佳Linux的理由: Debian是面向程序员的最古老,最出色的Linux发行版之一。Debian提供了具有.deb软件包管理兼容性的超稳定发行版。Debian为程序员提供了许多最新功能。因此,它具有一个特殊的编程空间。Debian是开发人员…

SCCM2012R2部署之四:配置客户端发现

前面3个章节我们简单的,介绍了安装配置和相关的组件。接下来我们需要给大家介绍的是如何配置客户端发现,让SCCM能真正管控到AD中的所有终端,来提供IT运维的效率。首先我们打开SCCM控制台,如图4-1,这就是我们安装完SCCM…