Yearning
1.1 Yearning简介
Yearning开源的MySQL SQL语句审核平台,提供数据库字典查询、查询审计、SQL审核等多种功能。
Yearning 1.x版本需要Inception提供SQL审核及回滚功能
Inception是集审核、执行、回滚于一体的自动化运维系统,它是根据MySQL代码修改过来的,工作模式和MySQL相同。Yearning是基于python实现的Web版人机交互界面。
Yearning 2.0 版本开始无需Inception,已自己实现了SQL审核及回滚功能。
Yearning1.0 python版本已不再进行官方维护,Yearning2.0 golang版本为后续维护项目。建议使用Yearning2.0
1.2 Yearning功能
- SQL查询
- 查询导出
- 查询自动补全
- SQL审核
- 流程化工单
- SQL语句检测
- SQL语句执行
- SQL回滚
- 历史审核记录
- 推送
- 站内信工单通知
- Email工单推送
- 钉钉webhook机器人工单推送
- 其他
- todoList
- LDAP登录
- 用户权限及管理
- 拼图式细粒度权限划分
1.3 功能界面
- dashboard
dashboard主要展示Yearning各项数据包括用户数/数据源数/工单数/查询数以及其他图表。个人信息栏内用户可以修改密码/邮箱/真实姓名,同时可以查看该用户权限以及申请权限。
- 我的工单
展示用户提交的工单信息。对于执行失败/驳回的工单点击详细信息后可以重新修改sql并提交;对于执行成功的工单可以查看回滚语句并且快速提交SQL。
- DDL审核
DDL相关SQL提交审核、查看表结构、索引,SQL语法高亮、自动补全。
- DML审核
DML相关SQL提交审核,SQL语法高亮/自动补全。所有的SQL只有在检测后错误等级为0时提交按钮才会激活
- 数据库管理
添加/编辑/删除数据源。所有添加的数据源应在添加之前点击测试连接按钮进行连接性测试,保证连接性。
数据源分为查询数据源、非查询数据源。
- 用户权限管理
- 审核规则管理
Canal
canal译意为水管、管道,主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费。早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务trigger获取增量变更。从2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
基于日志增量订阅和消费的业务包括以下内容:
- 数据库镜像
- 数据库实时备份
- 索引构建和实时维护(拆分异构索引、倒排索引等)
- 业务cache刷新
- 带业务逻辑的增量数据处理
当前的canal支持源端MySQL版本包括5.1.x、5.5.x、5.6.x、5.7.x、8.0.x
2.1 canal工作原理
canal工作原理类似mysql主从同步:
- canal模拟MySQL slave的交互协议,伪装自己为MySQL slave,向MySQL master发布dump协议
- MySQL master收到dump协议请求,开始推送binlog给canal
- canal解析binlog
2.2 canal应用场景
该技术在拉勾网址为搜索业务中得到了应用,场景:在企业HR发布、更新或删除职位时,我们需要及时更新职位索引,便于求职者能快速搜索到。
DataX
3.1 DataX简介
DataX是阿里巴巴集团内被广泛使用的离线数据同步工具、平台。实现了包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS等各种异构数据源之间高效的数据同步功能。
设计理念:为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。
DataX框架设计:
DataX本身作为离线数据同步框架,采用Framework+plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。
- Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
- Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
- Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。
DataX插件体系:
DataX Framework提供了简单的接口与插件交互,提供简单的插件接入机制,只需要任意加上一种插件,就能无缝对接其他数据源。经过几年积累,DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入。DataX目前支持数据如下:
percona-toolkit
4.1 percona-toolkit简介
MySQL数据库是轻量级、开源数据库的佼佼者,因此有很多功能强大第三方的衍生产品,如percona-toolkit,XtraBackup等。percona-toolkit是一组高级命令行工具的集合,可以查看当前服务的摘要信息,磁盘检测,分析慢查询日志,查找重复索引,实现表同步等等。
percona-toolkit工具是MySQL一个重要分支产品percona的,它是一组命令的集合。
4.2 percona-toolkit 安装
工具包的下载地址:https://www.percona.com/downloads/percona-toolkit/LATEST/
安装过程很简单,下载解压即可。
4.3 常用命令
4.3.1 pt-query-digest
pt-query-digest是用于分析慢查询的工具,它可以分析binlog、General_log、slowlog,也可以通过showprocesslist或者mysqldumpslow命令进行分析。可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。
使用示例:
- 直接分析慢查询文件:
pt-query-digest slow_OAK.log > slow_report.log
- 分析最近24小时内的查询
pt-query-digest --since=24h slow_OAK.log > slow_report.log
- 分析只含有select语句的慢查询
pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i'
slow_OAK.log> slow_report.log
4.3.2 pt-index-usage
pt-index-usage命令能够连接到MySQL数据库服务器,读取慢查询日志,并使用EXPLAIN询问MySQL如何执行每个查询。分析完成时,它打印出一个关于查询没有使用的索引的报告。
对于我们已有的生产环境,随着系统运行的时间越长,DML操作越来越慢,这可能和我们最初设计的索引是有关的(变慢的情况很多),项目一旦上线,很少会有人去关注索引的使用情况。某些索引是从create开始就没使用过,这无形中就给MySQL增加了维护负担,任何对该表的DML操作,都要维护这些
没有被使用的索引。我们可以使用pt-index-usage工具找出哪些索引一直没有被使用,然后进行删除。
pt-index-usage语法格式如下:
pt-index-usage [OPTION...] [FILE...]
使用示例:
- 打印报告
pt-index-usage /path/to/slow_OAK.log --host localhost
- 报告写入数据库表(生产上使用应小心,他可能会增加负载)
pt-index-usage slow.log --no-report --save-results-database percona
4.3.3 pt-table-checksum
pt-table-checksum命令可以检查主从复制一致性。pt table checksum通过在主机上执行校验和查询来执行在线复制一致性检查。如果发现任何差异,或者出现任何警告或错误,则工具的“退出状态”为非0该命令将连接到本地主机上的复制主机,对每个表进行校验和,并报告每个检测到的复制副本的结果。
使用示例:
- 比较lagou数据库的差异情况,在主库上面执行:
./pt-table-checksum --no-check-binlog-format --nocheck-
replication-filters --databases=lagou --replicate=lagou.checksums --
host=192.168.95.130 -uroot -proot
- 比较lagou库哪些表有差异
./pt-table-checksum --no-check-binlog-format
--nocheck-replication-filters --databases=lagou --replicate=lagou.checksums
--replicate-check-only --host=192.168.95.130 -uroot -proot
MySQLMTOP
5.1 MySQLMTOP简介
MySQLMTOP 是一个由Python+PHP开发的开源MySQL企业监控系统。该系统由Python实现多进程数据采集和告警,PHP实现Web展示和管理,优点如下:
- MySQL服务器无需安装任何Agent,只需在监控WEB界面配置相关数据库信息
- 启动监控进程后,即可对上百台MySQL数据库的状态、连接数、QTS、TPS、数据库流量、复制、性能慢查询等进行实时监控。
- 可以在数据库偏离设定的正常运行阀值(如连接异常,复制异常,复制延迟) 时发送告警邮件通知到DBA进行处理。
- 可以对历史数据归档,通过图表展示数据库近期状态,以便DBA和开发人员能对遇到的问题进行分析和诊断。
MySQLMTOP 发展历史如下:
- 2014年01月,开源MySQLMTOP企业MySQL监控系统正式上线并开源
- 2014年06月,MySQLMTOP进行重构,加入了Oracle、Mongodb、Redis的支持,正式更名为Lepus
- 2014年08月,Lepus 成功取得商业软件著作权
- 2015年01月,开源MySQLMTOP被评为2014优秀开源软件
- 2015年01月,Lepus正式开源,并建立官方网站向大家免费提供服务
- 2015年06月,Lepus网站软件下载总数量统计超过10000+,并广泛应用于各大互联网企业生产数据库的监控
- 2017年01月,Lepus代码托管至github,网站软件下载总数量统计超过30000+
5.2 MySQLMTOP功能
MySQLMTOP主要功能如下:
5.2.1 实时MySQL状态监控和警报
MySQLMTOP 持续监视MySQL的基本状态和性能信息,包括数据库连接状态,启动时间,数据库版本,总连接数,活动进程,QPS,TPS,进出MySQL数据库的流量信息。在数据库状态异常或偏离正常基准水平时发出报警邮件通知。
5.2.2 实时MySQL复制监控
MySQLMTOP自动发现MySQL复制拓扑结构,自动监视数据库的延时和binlog信息,可以了解所有 MySQL主服务器和从服务器的性能、可用性和运行状况。并在问题(如从服务器延迟)导致停机前向管理员提供改正建议。
5.2.3 远程监控云中的 MySQL
适合于云和虚拟机的设计,能远程监视MySQL服务器不需要任何远程代理器。
5.3.4 直观管理所有 MySQL
MySQLMTOP提供一个基于Web的界面,可令全面深入地了解数据库性能、可用性、关键活动等;直观地查看一台服务器、自定义的应用组或所有服务器。一组丰富的实时图形和历史图形将帮助您深入了解详细的服务器统计信息。
5.3.5 可视化MySQL慢查询分析
监视实时查询性能,查看执行统计信息,筛选和定位导致性能下降的 SQL 代码。结合使用Information Schema可直接从MySQL服务器收集数据,无需额外的软件或配置。
5.3.6 性能监控
监视影响 MySQL 性能的主要指标。如Key_buffer_read_hits、Key_buffer_write_hits、Thread_cache_hits、Key_blocks_used_rate、Cre