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

Posted 江南一点雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了借力 Docker ,三分钟搞定 MySQL 主从复制!相关的知识,希望对你有一定的参考价值。

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

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

关于 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';
借力 Docker ,三分钟搞定 MySQL 主从复制!

接下来开启 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 表示要同步的数据库有哪些。当从机连上主机后,并不是主机中的每一个库都要同步,这里表示配置哪些库需要同步。
借力 Docker ,三分钟搞定 MySQL 主从复制!

配置完成后,保存退出。

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

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

拷贝完成后,重启容器。

docker restart mysql1

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

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

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

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

配置从机

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

这是从机的 mysqld.cnf 配置:

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

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

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;
借力 Docker ,三分钟搞定 MySQL 主从复制!

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

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

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

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

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

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

检验

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

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

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

1、

2、

3、

4、

5、

6、

7、

8、

9、


喜欢就点个"在看"呗^_^

以上是关于借力 Docker ,三分钟搞定 MySQL 主从复制!的主要内容,如果未能解决你的问题,请参考以下文章

三分钟轻松搞定docker,建议收藏,评论继续送书

三分钟轻松搞定docker,建议收藏,评论继续送书

docker 安装 mysql

CentOS 7 MySQL5.7 主从配置-binlog 新服务器从安装mysql到主从配置完成只需要3分钟

mycat系列一基于 Docker 搭建 MySQL 主从复制的详细教程

云原生 • DockercAdvisor+Prometheus+Grafana 10分钟搞定Docker容器监控平台