返回顶部
首页 > 资讯 > 数据库 >mycat实战(二)-mysql数据库管理
  • 848
分享到

mycat实战(二)-mysql数据库管理

2024-04-02 19:04:59 848人浏览 薄情痞子
摘要

前面介绍了基于mycat中间的Mysql架构,从mysql数据库、mycat集群,haproxy(或者lvs)各个环节灭掉了单点,再加上mycat的守护进程,在高可用和负载均衡上投入到生产都没啥问题。

前面介绍了基于mycat中间的Mysql架构,从mysql数据库、mycat集群,haproxy(或者lvs)各个环节灭掉了单点,再加上mycat的守护进程,在高可用负载均衡上投入到生产都没啥问题。

但是随着数据量越来越大,数据库越来越多,管理问题就被提上来了。特别是整个项目组只有你一个dba的时候,真的是压力山大。没个工具把整个集群管起来,效率会很低。目前我们mycat后面有16个mysql实例(只算主的数量,另有16个从),每个mysql实例差不多分10个分库,合计约160个分库。因为单逻辑表达到几十亿甚至百亿,所以每个分库中那些大表还是好几千万数据量的。

以下是我们遇到的一些问题,所以我只能通过建设工具平台来提高效率。

平台的部分功能已经投入使用,部分还在开发,继续完善中。这里介绍下我们的几个功能:

(说明:我们平台的开发使用非常多的开源程序,我们并不是想要重新造轮子,大部分都是基于现实问题来做的实用工具。比如平台是在开源程序yearning基础上扩展的,只是做了较大的改动,后端还用了inception、mha、gh-ost等等各种开源软件,最主要的是我们希望基于mycat形成的集群管理,而不是单个数据库的管理)

一、sql语句审核

我们作为dba角色要考虑的事情,就是帮助开发写出高效、正确的sql语句。

开源软件inception(现在好像闭源了)提供了单库下的sql审核,但是不针对mycat这种分布式的结构,同时他也不提供效率的检查。(不过他的sql规范性检查挺好的,我们也在使用。)

在以前作为单库的时候,开发一般写一个正确的sql一般没问题,效率可能差一些。但是分库之后对开发是透明的,那就有可能出现问题。

mycat实战(二)-mysql数据库管理

查询类的sql我们做3点检查:

1、是否出现了跨库关联

mycat虽然支持跨库关联(那也是只支持2表的跨库),写法上也会不一样,前面需要加一些注解,另外性能也会是个问题。所以我们都是不允许的。

mycat实战(二)-mysql数据库管理

2、sql语句在多少分库中运行,在分库不是很多的时候,一个sql语句在多个库中执行也许不是问题,但是一旦分库很多,并且语句查询量很大时,对mycat本身会造成很大的压力,这回引起mycat的处理能力下降,数据返回延时等。如下面某个语句我们按照账号查询时,分析的结果将是在139个分库中执行,就会有存在可能的风险。

mycat实战(二)-mysql数据库管理

3、sql语句在后端数据库执行的效率

通常我们会使用explain检查sql的执行计划。

后端有很多分库的时候,是否可能存在部分库索引问题等?

我们的sql语句审核功能中就提供了以上的功能。有了这个之后开发人员基本上能自己评估sql了,当然最后还是要我审核之后sql才能生效。

根据我们的分类,sql语句的风险等级分为1-10个等级,我们可以分级定权限,比如1级可以让普通运维审核即可,2级以上则需要DBA来审核。

二、DDL操作

假设要创建一张新表,那么要看这个表的分库方式,全局?分片?不分片?等等

如果是全局表或者分库表,那么我们第一步就是要确定哪些分库上要建表,没有工具的话,这并不容易。我们之前写了一些脚本来帮助我们做这些事情,但是终归不是很方便。建表之后我们还得往mycat集群上的每个mycat配置文件中添加表,也不方便。

在建表方面的规范性,这很重要。比如说我们要使用一些工具如 pt-ocs或者gh-ost,他们都需要主键(或者唯一索引),这些常常被开发同事所忽略。另外注释、字符集等等这些更容易被忽略。所以我们特别要感谢下inception这个工具,可以帮助我们实施标准规范。

在ddl方面,如果要对现有的表做修改,这个更加悲催了,以我们表的规模,即使分成了100多个分库表,每张单表也还是有几千万记录。我们都知道mysql上对大表直接操作alter table 是会造成非常可怕的后果。所以我们还需要能够支持批量处理ddl语句的功能。

现在流行的操作方式是借助通过pt-ocs 或者gh-ost 这种开源工具进行。gh-ost的侵入更少,更可控,所以我们采用了gh-ost。如页面上所示,定好时间,基本上就能自动执行了。

mycat实战(二)-mysql数据库管理

三、mha高可用,监控和操作

我们上面介绍了,使用mha搭建了mysql高可用方案。数据库多了之后,人肉方式的监控和执行肯定不行的。zabbix和nagiOS能帮我们建立一些监控。执行方面,在后台命令行方式固然很酷,但是实例多了之后就不方便。所以我们还得有一个mha监控和操作的平台。有了这个平台,有时候我们需要人工切换的时候可以直接操作了。这样即使是普通的运维人员,只要授权就可以进行切换.

mycat实战(二)-mysql数据库管理

四、mycat之间的配置同步生效

haproxy将mycat组成了集群,对数据库的请求可能发往任何一个mycat服务,所以必须保证mycat的配置一致性。在单个mycat情况下,这不是问题,在多个mycat下这就会成为一个风险点。

mycat是通过文件配置的,mycat之间不会有通信,当然也就没有同步上等待的操作。(据说2.0版会开发mycat集群,也许就没有这个问题了)

理想的操作方式:mycat做统一配置,统一配置发布后,各个mycat上锁不允许新的请求进来,然后加载新配置,新配置完成并生效后解锁可用。

现实的操作方式:选择在业务较为空闲的时间,在haproxy配置中只保留一个mycat,其他的全部注释掉。

其他mycat配置修改并生效之后,放开注释,原来留下的那个注释掉,重载haproxy配置。

将最后那个mycat配置修改好

最后把全部mycat都放开

这一系列的操作通过手工操作,容易出现纰漏,于是我们把他做成程序的自动调度方式。

mycat实战(二)-mysql数据库管理

建议:如果mycat能够提供一个配置版本号的话,我们更容易检测(监控)到配置是否是最新的。如以时间戳为版本号,我们可以比对不同mycat之间是否配置一致。

五、mysql实例迁移调度管理

在一个mysql实例下运行很多库(database),还是一个实例一个库?

我们现在的规模,最大的逻辑库被分为1百多个库,当然也有些是单库,加起来总有个150个库以上。那些比较大的逻辑表,记录数一般都是几十亿到百亿 。

分库多了之后就会带来一个问题,我们应该起多少个mysql实例?

先说现状:我们现在的规模是15个mysql,每个mysql实例内大约建10个database。每个实例数据量大约1T左右。

单个mysql到1T左右,迁移、备份和恢复都是有比较大的困难的(别跟说有从库就不用备份,那是瞎扯)。

现实是我们每个mysql都很大,也没有共享存储,所以我们无法进行快速的调度(网速也只有千兆,如果数据迁移,这个时间太长)。

如果将大的mysql实例分成10个小的mysql实例,100G左右的数据库,就会灵活很多。

假设每个mysql能快速调度到需要的服务器上(这个时间只要小于能容忍的做大时间),理论上我们每台服务器可以使用掉90%的资源,一台挂掉之后,将该台上的10个mysql分别调度到其他10台服务器上,这是不是听起来很棒,但是在4个9的稳定性要求之下,没有共享存储这种又是不可能的。

如果每个库都独立一个mysql实例,带来的问题就是一下子变成150多个实例(然后再加上1-2倍的从库),就你一个dba,立马有种要疯掉的感觉。

所以我坚持了一个mysql实例上分多个库,即使他单实例数据量大了不方便。

现在我们在平台的调度管理,10个和100个没有什么区别的时候,我们就可以把他细分了。这个我们暂时还没有完成。


问题六、备份与恢复的管理以及分片后带来的挑战

日常备份和恢复是DBA的一项重要工作,但是自动化的备份脚本扔在那里是否执行成功呢,备份是否可用呢,这些都是问题。

所以我们需要做一个备份和恢复的管理。(备份结果在mha的图中有最后备份成功时间,其他功能正在开发中)

最后我还想说下在数据被分片之后,在备份和恢复上是带来很大的问题的。

分片之后数据库多一点没有关系,只要我们有管理平台就可以。

最大的挑战是多台数据库服务器之间的备份时间一致性问题。

事务型数据库(oltp)中很重要的一个要求就是数据的时间一致性。

分库之后,我们能保证的是单库内部的一致性,却很难保证多库之间的一致性。

比如:用户U1的数据在D1库中,用户U2的数据在D2库中,如果U1和U2之间有关联的交易(如转账等)。

这个时间D1发生的奔溃,在恢复的时候必须保证D1库和D2库的时间点一致性。这很难。

事实上我们没有能够做到这点。

可做的是尽可能的将同一用户的数据存放在一个库中,加以订单表和一些冗余日志进行校验恢复。

这些工作需要在设计之初就要考虑。


七、现场慢查询的查杀

这个功能很简单,但是却非常实用。

因为分库很多,如果线上出现影响性能的慢查询,我们需要立刻把他找出来并且杀掉。以前我们手工操作,通过脚本再怎么熟练也需要不少的时间。

现在页面上可以一键查杀非常方便。

mycat实战(二)-mysql数据库管理

七、数据flashback

现在也有开源程序可以实现对数据更新语句的回滚,很好用。

如果是直接通过连接mysql的方式执行的语句,我们通常可以通过连接进程号就能精确的知道具体执行的内容。

通过mycat中间件之后执行的sql语句,就很难获得非常准确的内容。

这时只能通过时间、执行的数据库和表名等从每个mysql上获得一个大致范围,然后通过人工刷选进行确认。(这个功能还未完成)


其他还有很多我们需要的功能,目前是列了一堆计划,如果你有兴趣,可以给我提提意见。


您可能感兴趣的文档:

--结束END--

本文标题: mycat实战(二)-mysql数据库管理

本文链接: https://lsjlt.com/news/49644.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mycat实战(二)-mysql数据库管理
    前面介绍了基于mycat中间的mysql架构,从mysql数据库、mycat集群,haproxy(或者lvs)各个环节灭掉了单点,再加上mycat的守护进程,在高可用和负载均衡上投入到生产都没啥问题。 ...
    99+
    2024-04-02
  • Mysql数据库二进制日志的管理
    如果配置了log_bin参数,则需要配置expire_logs_days参数指定二进制日志保留时间,不然磁盘空间早晚会被日志占满的。如果之前没有配置,则配置步骤如下:   1、查...
    99+
    2024-04-02
  • 关系型数据库之Mysql查询及数据库管理(二)
        在关系型数据库之Mysql编译安装及数据库基础(一)我们大致了解的数据库的基本应用了,下面我们来聊聊MySQL的家常吧,在实际生产工作中我需要了解自己再数据库领域应该选...
    99+
    2024-04-02
  • 数据库管理与高可用----第二章数据库管理
    原文:https://blog.51cto.com/14625831/2547964...
    99+
    2016-07-27
    数据库管理与高可用----第二章数据库管理 数据库入门 数据库基础教程
  • MySQL数据库管理
    SQL语句概述 SQL语言 是Structured Query Language的缩写,即结构化查询语言 是关系型数据库的标准语言 用于维护管理数据库,如数据查询、数据更新、访问控制、对象管理等功能 S...
    99+
    2024-04-02
  • MySQL数据库管理2
    te  database   db102; create  table db102.t1(name char(6),age  int(3));in...
    99+
    2024-04-02
  • MySQL数据库(二)
    ####################################### Mysql-索引类型 索引类似于“书的目录” 索引的优点 加快查询的速度 索引的缺点 减慢写的速度(占用物...
    99+
    2024-04-02
  • 数据采集实战(二)-
    1. 概述 京粉(https://union.jd.com/)是京东联盟下的网站,通过分享其中的商品链接可以赚取佣金,类似淘客联盟。 采集京粉的商品,既可以练习 puppeteer的使用,平时想在京东购物时,也能用得上(采集看看...
    99+
    2015-01-09
    数据采集实战(二)-
  • Mysql数据库理论基础二
     Mysql数据库理论基础二一、简介由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点:1、是一种数据库管理系统2、是一种关联数据库管理系统3、是一种开放源码软件,且有大...
    99+
    2024-04-02
  • MYSQL数据库管理中怎么实现权限管理
    本篇文章为大家展示了MYSQL数据库管理中怎么实现权限管理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 MYSQL权限简介关于mysql的权限简单的理解就是m...
    99+
    2024-04-02
  • 如何管理mysql数据库
    管理mysql数据库的方法可以打开mysql脚本,输入密码登录,通过以下命令进行管理:查看一下数据库列表:“# show databases;”进入某个数据库:“ # use databaseName;”查看数据库的表项:“#sh...
    99+
    2024-04-02
  • 如何利用mycat实现mysql数据库读写分离
    这篇文章主要介绍了如何利用mycat实现mysql数据库读写分离,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是MyCAT一个彻底开源的...
    99+
    2024-04-02
  • Mysql数据库如何实现用户管理
    本篇文章给大家主要讲的是关于Mysql数据库如何实现用户管理的内容,感兴趣的话就一起来看看这篇文章吧,相信看完Mysql数据库如何实现用户管理对大家多少有点参考价值吧。 Mysql用户管理新建用户...
    99+
    2024-04-02
  • MySQL数据库的基本管理
    概述MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。MySQL是开放源代码的,因此任何人都可以在General Publ...
    99+
    2024-04-02
  • MySQL数据库的权限管理
    Mysql权限系统非常重要,但同时又是一个很多开发者或管理者所忽略的。权限分配不但,将会造成难以挽回的悲惨后果。我之前所在一家公司,关于数据库权限这块就完全不重视,所有开发者都有线上系统的最高权限。想想看,...
    99+
    2024-04-02
  • MySQL数据库及表的管理
    库管理1.创建数据库mysql> help create database; CREATE {DATABASE | SCHEMA}&nbs...
    99+
    2024-04-02
  • MySQL 服务和数据库管理
    目录1、启动和关闭服务指令1.1windows下Mysql5.7官方MSI安装地址1.2、windows下1.3、linux下1.4、windows下cmd窗体进入mysql:1.4...
    99+
    2024-04-02
  • MYSQL数据库管理之权限管理解读
    目录一、mysql权限简介1.MYSQL到底都有哪些权限呢?2.MYSQL的权限如何分布二、MYSQL权限经验原则三、MYSQL权限实战1.GRANT命令使用说明2.创建一个超级用户3.创建一个网站用户(程序用户)4.创...
    99+
    2023-03-20
    MYSQL数据库管理 MYSQL权限管理 MYSQL权限
  • mysql数据库中怎么利用mycat实现读写分离
    这期内容当中小编将会给大家带来有关mysql数据库中怎么利用mycat实现读写分离,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、部署mycat下载 [root@myc...
    99+
    2024-04-02
  • Node.js Sequelize 库实战技巧:搞定你的数据管理难题
    ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作