前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文讲清楚mysql主从服务搭建过程

一文讲清楚mysql主从服务搭建过程

原创
作者头像
shigen
发布2023-10-21 00:01:43
1490
发布2023-10-21 00:01:43
举报

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

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

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

主从架构
主从架构

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

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

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

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

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

mysql主从复制原理
mysql主从复制原理

具体的过程是这样的:

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

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

Docker-compose.yaml

docker-compose文件的编写
docker-compose文件的编写

⚠️注意:

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

指定links 实现两个容器之间的内网访问 数据文件、配置文件的挂载

My.cnf

master

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

master的配置
master的配置
slaver的配置
slaver的配置

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

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

启动容器
启动容器

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

链接mysql主节点
链接mysql主节点

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

空数据表的数据库test
空数据表的数据库test

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

创建数据表并模拟数据
创建数据表并模拟数据
插入的数据
插入的数据

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

mysql主节点的状态
mysql主节点的状态

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

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

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

curl测试
curl测试

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

在salve中执行命令
在salve中执行命令

参数代表的含义:

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

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

查看从节点的状态
查看从节点的状态

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

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

重复之前的建表操作
重复之前的建表操作

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

插入一条新的数据
插入一条新的数据
在从节点查询
在从节点查询

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


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

nginx+mysql集群架构
nginx+mysql集群架构

以上就是今天分享的全部内容了,觉得不错的话,记得点赞 在看 关注支持一下哈,您的鼓励和支持将是shigen坚持日更的动力。

shigen一起,每天不一样!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker-compose.yaml
  • My.cnf
    • master
    相关产品与服务
    云数据库 MySQL
    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档