mysql主从服务的搭建

shigen坚持日更的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。坚持记录和分享从业两年以来的技术积累和思考,不断沉淀和成长。

shigen今天带来的文章是mysql主从服务的搭建,原谅这篇迟到的文章。

先说一下我想搭建的原因的吧。我必须申明的是:我们目前的项目接触不到。shigen是一个比较喜欢折腾的人,在接触腾讯云的云数据库(CDB)的时候,有很多的主从节点。我一想,我也可以尝试去搭建一个呢。

mysql主从服务的搭建_第1张图片

所以,本文的设计优点在于:

  1. 一个docker-compose文件即可启动;
  2. 详细的搭建过程;
  3. 结合实际业务的思考。

首先,我们需要整明白为什么需要主从节点的mysql服务,这就要对比我们单一节点的mysql了。

  1. 高可用,实时灾备,用于故障切换。比如主库挂了,可以切从库,保证系统的稳定性;
  2. 读写分离,提供查询服务,减少主库压力,提升性能;
  3. 备份数据,避免影响业务。

那好处在这里,mysql主从服务的原理是什么呢?我找到了一张图解释整个过程:

mysql主从服务的搭建_第2张图片

具体的过程是这样的:

  1. 主库提交完事务后,写入binlog日志
  2. 从库连接到主库,请求获取binlog日志
  3. 主库创建一个dump线程,将binlog推送到从库
  4. 从库开启一个IO线程读取同步过来的binlog,并记录到relay log中继日志中
  5. 从库再开启一个sql线程读取relay log中的记录,同步到数据库中
  6. 从库记录自己的binlog日志

好的,以上就是基本的理论,现在我们开始激动人心的实战篇。

Docker-compose.yaml

mysql主从服务的搭建_第3张图片

⚠️注意:

  1. 需要制定相同的同步数据库,这里是test

  2. 指定links 实现两个容器之间的内网访问

  3. 数据文件、配置文件的挂载

My.cnf

master

这里炫酷一点是为了改变默认显示灰色的字体,看起来效果不大理想。具体的配置代表的含义都有详细的注释。

mysql主从服务的搭建_第4张图片

mysql主从服务的搭建_第5张图片

好的,现在万事俱备,只欠东风了

执行docker-compose up -d命令,会发现拉取镜像、启动容器了。

启动容器

我们尝试连接一下mysql的主节点:

mysql主从服务的搭建_第6张图片

此时发现mysql的主节点上已经有一个数据库test了,但是数据表是空的。

mysql主从服务的搭建_第7张图片

魔法生成表结构哥模拟数据:

mysql主从服务的搭建_第8张图片

mysql主从服务的搭建_第9张图片

此时,我们查询一下mysql主节点的状态:

mysql主从服务的搭建_第10张图片

出现以上的结果,代表主节点的配置完成了,现在我们中心在slave节点。

我们进入slave容器,并用 curl mysql-master:3306尝试一下是否能获得相应。

shigen这里也是先执行docker inspect xxx查看了容器的详细信息,才发现可以直接用mysql-master作为主节点的IP。

mysql主从服务的搭建_第11张图片

进入容器的mysql,执行一下的命令:

在salve中执行命令

参数代表的含义:

  • master_host master的ip
  • master_port master的端口
  • master_user master 用户名
  • master_password master 密码
  • master_log_file master中此时的File 参数
  • master_log_pos master中此时的Position 参数

现在,我们看一下从节点的状态:

mysql主从服务的搭建_第12张图片

此时发现配置上没啥问题了,但是数据没同步怎么回事呢?分析了发现:master_log_pos master中此时的Position 参数设置的有问题,我们应该从0开始。

那怎么办,复制一下之前的建表语句和数据的插入语句。

mysql主从服务的搭建_第13张图片

我们再次在主节点插入一条数据,看看从节点会不会同步过来。

插入一条新的数据

mysql主从服务的搭建_第14张图片

查询了从节点的数据,发现同步过来了,代表着我的主从节点的搭建成功了!


其实还有其他的一主多从架构,加上keepalive+nginx,实现负载均衡……感兴趣的伙伴可以再去研究下。

mysql主从服务的搭建_第15张图片


以上就是今天分享的全部内容了,觉得不错的话,记得点赞 在看 关注支持一下哈,您的鼓励和支持将是shigen坚持日更的动力。同时,shigen在多个平台都有文章的同步,也可以同步的浏览和订阅:

平台 备注 链接
CSDN 知名博客平台,很少关注 shigen的CSDN主页
知乎 专注内容分享和问题解答 shigen的知乎主页
掘金 高质量博客平台 shigen的掘金主页
腾讯云开发者社区 腾讯云开发者社区 shigen的腾讯云开发者社区主页
微信公众平台 个人微信公众号,分享技术和日常 公众号名:shigen

shigen一起,每天不一样!

你可能感兴趣的:(mysql,数据库)