做MySQL运维和开发这些年,用过不少工具。有些工具用了就回不去,大大提升了工作效率。

MySQL 8.1发布之后,生态又有了一些新变化,有些工具更好用了,也出现了一些新工具。这篇文章就来推荐一下我常用的MySQL工具,从客户端到监控,从性能分析到数据迁移,希望能帮到大家。

客户端工具

第一个推荐的是DBeaver。

DBeaver是一个通用的数据库客户端,支持MySQL、PostgreSQL、Oracle等几乎所有主流数据库。免费开源,社区版功能就很强大。界面清晰,SQL编辑器有语法高亮和自动补全,数据查看和编辑也很方便。

我最喜欢DBeaver的一点是它的ER图功能,可以自动生成数据库的实体关系图,对理解数据库结构很有帮助。还有数据导入导出功能,支持CSV、Excel、JSON等多种格式,做数据迁移的时候特别方便。

DBeaver是Java写的,启动稍微有点慢,但用起来很流畅。如果你需要一个功能全面的数据库客户端,DBeaver是首选。

第二个推荐的是MySQL官方的MySQL Workbench。

这是MySQL官方出的工具,和MySQL的兼容性最好,支持最新的MySQL特性。界面比较专业,有SQL开发、数据建模、服务器管理三大模块。

数据建模功能很强,可以画ER图,正向工程生成数据库,反向工程从数据库生成模型。对于做数据库设计的人来说,这个功能很实用。

服务器管理模块可以查看服务器状态、监控性能、管理用户和权限。虽然功能不如专业监控工具全,但日常使用足够了。

第三个推荐的是TablePlus。

TablePlus是一个轻量级的数据库客户端,界面简洁,启动快,操作流畅。支持MySQL、PostgreSQL、SQLite等多种数据库。

我最喜欢TablePlus的一点是它的快捷键设计,很多操作都可以用快捷键完成,熟练之后效率很高。还有数据编辑功能,可以直接在表格里编辑数据,自动生成SQL语句,很方便。

TablePlus是付费软件,但有免费试用版。如果你喜欢轻量级工具,愿意为好的体验付费,TablePlus值得一试。

监控告警工具

第一个推荐的是Prometheus + Grafana。

这是目前最流行的监控方案,Prometheus负责采集和存储指标,Grafana负责可视化展示。配合mysqld_exporter,可以采集MySQL的各种性能指标,比如连接数、QPS、慢查询、主从延迟等。

Grafana有很多现成的MySQL监控大盘,导入就能用,展示效果很专业。还可以设置告警规则,指标异常的时候通过邮件、钉钉、企业微信等方式通知。

这个方案的优点是灵活、可扩展,不仅能监控MySQL,还能监控服务器、应用等。缺点是搭建和维护有一定门槛,需要一定的运维能力。

第二个推荐的是Percona Monitoring and Management(PMM)。

PMM是Percona出的MySQL监控工具,专门针对MySQL和MongoDB做了优化。功能很全面,包括性能监控、查询分析、主从状态监控等。

PMM的Query Analytics功能特别好用,可以分析慢查询,展示每个查询的执行时间、扫描行数、返回行数等,帮助定位性能问题。还有仪表盘功能,可以自定义监控面板。

PMM是开源免费的,搭建也比较简单,用Docker一键部署。如果你主要用MySQL,PMM是一个很好的选择。

第三个推荐的是Zabbix。

Zabbix是一个老牌的监控工具,功能非常全面,不仅能监控MySQL,还能监控服务器、网络、应用等。模板丰富,社区活跃,很多问题都能找到解决方案。

Zabbix的告警功能很强大,支持多种通知方式,还有告警升级、告警抑制等高级功能。对于大型企业来说,Zabbix是一个成熟可靠的选择。

缺点是界面比较老旧,配置也比较复杂,新手上手需要一定时间。

性能分析工具

第一个推荐的是EXPLAIN ANALYZE。

这是MySQL 8.0.18引入的功能,8.1之后更加完善。和普通的EXPLAIN不同,EXPLAIN ANALYZE会真正执行SQL,然后返回实际的执行统计信息,比如每个步骤的实际执行时间、扫描行数、返回行数等。

这个功能对于性能调优特别有用。以前EXPLAIN只能看到估算的执行计划,现在能看到实际的执行情况,更容易发现问题。比如估算扫描100行,实际扫描了10000行,说明统计信息不准或者索引没用对。

使用方法很简单,在EXPLAIN后面加上ANALYZE关键字就行。建议在分析慢查询的时候优先用这个。

第二个推荐的是pt-query-digest。

这是Percona Toolkit里的一个工具,用来分析慢查询日志。它可以把慢查询日志里的SQL按指纹分类,统计每个SQL的执行次数、总时间、平均时间、扫描行数等,生成一份详细的分析报告。

pt-query-digest是命令行工具,使用简单,功能强大。可以分析本地的慢查询日志,也可以分析远程的。还可以和其他工具配合,把分析结果存到数据库里,做长期的趋势分析。

如果你还没用过这个工具,强烈建议试试,它能帮你快速找到最耗时的SQL,是性能调优的必备工具。

第三个推荐的是sys schema。

这是MySQL 5.7引入的系统视图,8.0和8.1之后更加完善。sys schema基于performance_schema,提供了一系列易于理解的视图,可以查看各种性能相关的信息。

比如sys.statementanalysis可以查看SQL的执行统计,sys.schemaunusedindexes可以查看没用过的索引,sys.innodbbufferstatsby_table可以查看每个表占用的缓冲池大小。

sys schema的优点是不用安装额外工具,MySQL自带,直接查询就行。对于日常的性能排查很方便。

第四个推荐的是VividCortex。

这是一个商业的MySQL性能监控工具,功能非常强大。它可以实时监控MySQL的性能,自动分析慢查询,给出优化建议。还能做容量规划,预测未来的资源需求。

VividCortex的界面很专业,可视化效果很好。对于没有专门DBA的团队来说,它能帮你发现很多性能问题。缺点是收费,而且价格不便宜。

数据迁移工具

第一个推荐的是mysqldump。

这是MySQL自带的逻辑备份工具,虽然简单,但很实用。可以导出整个数据库、单个表、或者查询结果。导出的是SQL语句,兼容性好,恢复方便。

mysqldump的缺点是备份和恢复速度慢,对于大数据库不太适用。但对于中小数据库,或者做数据迁移的时候,mysqldump还是很好用的。

建议加上--single-transaction参数,做一致性备份,不会锁表。还有--routines和--triggers参数,别忘了导出存储过程和触发器。

第二个推荐的是mydumper/myloader。

这是一个开源的多线程MySQL备份和恢复工具,比mysqldump快很多。mydumper负责多线程导出,myloader负责多线程导入。

对于大数据库,mydumper的备份速度可以比mysqldump快5到10倍。而且它支持断点续传、压缩、正则过滤等功能。

如果你需要经常备份大数据库,或者做数据迁移,mydumper/myloader是很好的选择。

第三个推荐的是pt-online-schema-change。

这是Percona Toolkit里的一个工具,用来在线修改表结构。在MySQL 8.0之前,ALTER TABLE会锁表,对于大表来说影响很大。pt-online-schema-change可以在不锁表的情况下修改表结构,对业务影响很小。

它的原理是创建一个新表,把旧表的数据复制过去,同时同步增量数据,最后切换表名。整个过程在线进行,业务几乎无感知。

虽然MySQL 8.0之后支持了Instant DDL,很多ALTER操作不再锁表,但对于一些复杂的DDL,pt-online-schema-change还是很有用的。

第四个推荐的是gh-ost。

这是GitHub开源的在线DDL工具,和pt-online-schema-change类似,但实现方式不同。gh-ost用binlog来同步增量数据,不需要在原表上加触发器,对原表的影响更小。

gh-ost还支持暂停、动态调整复制速度、手动切换等功能,更加灵活。很多大公司都在用gh-ost做在线DDL。

如果你需要经常做大表的DDL,gh-ost是一个很好的工具。

其他实用工具

第一个推荐的是MySQL Shell。

这是MySQL官方推出的新一代客户端,支持SQL、JavaScript、Python三种模式。比传统的mysql命令行强大很多,有自动补全、语法高亮、历史记录等功能。

MySQL Shell还支持AdminAPI,可以用来管理InnoDB Cluster和ReplicaSet,做高可用配置很方便。还有JSON导入导出功能,可以直接把JSON文件导入到MySQL的集合类型里。

如果你还在用传统的mysql命令行,建议试试MySQL Shell,体验好很多。

第二个推荐的是Liquibase/Flyway。

这两个是数据库版本管理工具,可以把数据库的变更脚本纳入版本控制,自动执行和跟踪。对于团队协作开发来说,数据库版本管理很重要,可以避免不同环境的数据库结构不一致。

Flyway比较简单,用SQL脚本做版本管理,上手快。Liquibase功能更强大,支持XML、YAML、SQL等多种格式,还有回滚、分支管理等功能。

如果你还在手动执行SQL脚本更新数据库,建议试试这两个工具,能让数据库变更更规范、更安全。

第三个推荐的是mysql-tui。

这是一个终端里的MySQL客户端,用Rust写的,界面很现代,支持鼠标操作。有表结构查看、数据编辑、SQL执行等功能,在服务器上没有图形界面的时候很好用。

比传统的mysql命令行好用很多,又不需要图形界面,适合在服务器上快速操作数据库。

写在最后

以上就是我常用的MySQL工具推荐,从客户端到监控,从性能分析到数据迁移,覆盖了日常工作的大部分场景。

工具是为了提升效率,不用追求用得越多越好,找到适合自己的、用得顺手的就行。我自己也是慢慢摸索,从简单的命令行工具,到现在用各种专业工具,效率提升了很多。

MySQL 8.1之后,官方工具越来越完善,很多以前需要第三方工具的功能,现在MySQL自带了。建议大家多关注官方的新特性,很多时候官方工具就够用了。

希望这篇文章能帮到大家。如果你有好用的MySQL工具,也欢迎推荐。