使用docker完成mysql集群搭建,实现主从复制
视频讲解



一、准备工作

准备两台MySql,使用docker,需要开启两个MySql容器。

docker常用命令:
一、镜像相关
在这里插入图片描述
二、DockerFile
在这里插入图片描述
三、容器相关
在这里插入图片描述

二、搭建步骤

1.创建两个mysql镜像

首先看到docker中已经安装好mysql并且该没有处于运行状态。
在这里插入图片描述
使用命令(使用时把换行符删掉):

 docker run -p 12345:3306 --name mysql_master 
-v /docker/mysql_master/conf:/etc/mysql/conf.d 
-v /docker/mysql_master/logs:/logs 
-v /docker/mysql_master/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

创建一个主服务器,mysql_master是服务器名字,其中12345为自己设置的端口号,3306为所映射到的端口号。
另外再创建一个从服务器,更改端口号和名字即可:

 docker run -p 12346:3306 --name mysql_from 
-v /docker/mysql_from/conf:/etc/mysql/conf.d 
-v /docker/mysql_from/logs:/logs 
-v /docker/mysql_from/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

在这里插入图片描述

2.配置主服务器

2.1 配置主服务器的 my.cnf 添加以下内容

进入 conf目录:

cd docker/mysql_master/conf
vim my.cnf

将以下内容写入后并保存:

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

2.2 重启服务器

首先进入容器,然后重启mysql服务,然后启动服务
在这里插入图片描述

2.3 查看 skip_networking 的状态

确保在主服务器上 skip_networking 选项处于 OFF 关闭状态, 这是默认值。如果是启用的,则从站无法与主站通信,并且复制失败。
步骤: 进入mysql后输入命令show variables like '%skip_networking%';
在这里插入图片描述

2.4 创建一个专门用来复制的用户

在mysql中admin用户包含所有权限,由于只用到了可以复制的权限,因此创建一个用户名叫repel的用户,并为他提供REPLICATION(可复制)的权限,命令如下:

CREATE USER 'repl'@'%' identified by '123456';

GRANT REPLICATION SLAVE ON *.*  TO  'repl'@'%';

在这里插入图片描述

3. 配置从服务器

3.1 配置从服务器的 my.cnf (和上面一致)

[mysqld]
server-id=2

在这里插入图片描述

3.2 重启从服务器 (和上面一致)

在这里插入图片描述

3.3 配置连接到主服务器的相关信息

在从服务器配置连接到主服务器的相关信息 (在容器里面的mysql执行)

mysql>  CHANGE MASTER TO MASTER_HOST='xxxxx', MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='123456';

上面代码的xxxxx你需要换成你的IP,docker 查看容器 IP 的命令如下:

docker inspect --format={{.NetworkSettings.IPAddress}}’ 容器名称/容器id

启动的那个从服务器的线程

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

在这里插入图片描述

如果想实现一主多从,按照上边的步骤再添加一个从服务器即可


4.主主复制

如果你上面的主从复制搞定了,那么这个主主复制就很简单了。我们把上面的从服务器也改成主服务器

1、修改上面的从服务器的my.cnf文件,和主服务器的一样(注意这个server-id不能一样)然后重启服务器
2、在从服务器里面创建一个复制用户创建命令(2.4中的步骤)(这里修改一下用户名可以改为 repl2)
3、在之前的主服务器里面运行下面这个代码

 CHANGE MASTER TO MASTER_HOST='xxxx', MASTER_PORT=3306,MASTER_USER='repl2',MASTER_PASSWORD='123456';

start slave;

三、测试

![在这里插入图片描述](https://img-blog.csdnimg.cn/aa9277faa68a437ea1c1e5f8b9781060.pn

![在这里插入图片描述](https://img-blog.csdnimg.cn/db16be11f4c6458eb619764eb7d147f8.pn

在主服务器上的所有操作(创建库,修改表之类)会被备份到从服务器上,但是在从服务器上的操作不会进入到主服务器中。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐