首页 游戏 软件 资讯 排行榜 专题
首页
数据库
mysql生产系统引擎排查_列出所有MyISAM表的脚本

mysql生产系统引擎排查_列出所有MyISAM表的脚本

热心网友
65
转载
2026-04-23

查 MyISAM 表:直接用 information_schema 查引擎类型

在MySQL生产环境里,混合使用多种存储引擎的情况并不少见。但问题在于,MyISAM引擎天生缺乏事务支持和行级锁,一旦遇到高并发写入或者需要崩溃恢复的场景,就很容易“掉链子”。所以,排查工作的第一步,就是得快速、准确地揪出那些还在用MyISAM的表。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

怎么查最靠谱?答案是直接查询 information_schema.tables 系统表。这个视图能实时反映表的当前引擎状态,比去翻看建表语句或者用 SHOW CREATE TABLE 要可靠得多——毕竟后者显示的可能是“历史文档”,万一有人手动改了脚本却没实际执行 ALTER 操作呢?

  • 核心查询语句长这样:SELECT table_schema, table_name, engine FROM information_schema.tables WHERE engine = 'MyISAM' AND table_schema NOT IN ('information_schema', 'performance_schema', 'mysql', 'sys');
  • 后面那个 table_schema NOT IN (...) 条件可不能省。系统库里的MyISAM表(比如经典的 mysql.help_topic)通常不用动,也动不了。
  • 如果只想聚焦某个特定数据库,把排除条件换成 AND table_schema = 'your_db' 就行。
  • 需要提醒的是:这个查询本身不会锁表,但如果频繁扫描一个拥有海量表的 information_schema,可能会引发元数据锁等待。稳妥起见,还是建议在业务低峰期执行。

mysql生产系统引擎排查_列出所有MyISAM表的脚本

为什么不能只靠 SHOW ENGINESSHOW VARIABLES

有些朋友可能会想走捷径,但这两条路其实都行不通。SHOW ENGINES 命令只是告诉你“MyISAM引擎是否被支持”,而不是“哪些表正在用它”。至于 SHOW VARIABLES LIKE 'default_storage_engine',它仅仅反映了默认的存储引擎设置,对已经存在的表毫无影响。

  • 一个常见的误区是:明明早就把 default_storage_engine 设成了 InnoDB,就以为万事大吉。殊不知,那些历史遗留的MyISAM表依然“健在”。
  • 很多老旧的应用程序在建表语句里会显式写上 ENGINE=MyISAM,如果后来没人主动去改,它们就会一直保持原样。
  • 当然,SHOW CREATE TABLE 确实能查看单个表的引擎,可一旦面对成百上千个库、数以万计的表,用这种方式批量排查,效率就太低了,根本不现实。

脚本化排查:加过滤、导出、防误操作

在生产环境操作,可不能只靠手动敲几条SQL。最佳实践是把整个流程封装成可复用的脚本,并且要加上必要的防护措施,核心目标是避免漏查、误查,同时处理好权限和超时问题。

  • 使用类似 mysql -u$user -p$pass -e "..." 的命令行执行时,记得加上 --skip-column-names --batch 参数。这样输出结果会更干净,方便后续用 awk 或者 while read 循环来处理。
  • 在查询语句里加上 ORDER BY table_schema, table_name,能让输出结果顺序固定、可预测,方便和之前的历史报告做对比(diff)。
  • 如果执行时遇到 Access denied for user 错误,得先确认连接账号是否拥有对 information_schema 数据库的 SELECT 权限——这一点经常被忽略。
  • 对于超大型数据库实例(比如表数量超过10万),查询 information_schema 可能会超时。这时可以临时设置 SET SESSION innodb_stats_on_metadata = OFF; 来减少统计开销,这通常不会影响线上业务。

MyISAM 表迁移前必须验证的三件事

找到MyISAM表只是万&里长征第一步。真要动手把它们转成InnoDB,如果直接无脑执行 ALTER TABLE t ENGINE=InnoDB,那风险可就大了。在转换之前,至少得确认下面这三件事:

  • 检查全文索引:MyISAM的全文索引语法和InnoDB不完全兼容。如果表上有,需要先删除,等转换完成后再用InnoDB的语法重建。
  • 确认自增列属性:MyISAM允许 AUTO_INCREMENT 字段作为非主键索引的一部分,但InnoDB要求自增列必须是主键,或者至少包含主键前缀。结构不符会导致转换失败。
  • 评估表体积:通过 DATA_LENGTH + INDEX_LENGTH 计算一下表大小。如果发现MyISAM格式的表体积远大于它转为InnoDB后的预期,那很可能存在大量碎片或冗余索引。这种情况下,直接转换会耗时极长且可能锁表,更稳妥的做法是先用 OPTIMIZE TABLE(在MyISAM引擎下)整理一下,然后再进行转换。

说到底,在线上修改存储引擎从来不是敲个命令就能完事的简单操作。表越大,准备工作就要越充分:评估执行计划、预估锁表时间、检查磁盘空间是否充足……这些后续步骤的复杂度,可比“怎么把表列出来”要高得多。

来源:https://www.php.cn/faq/2311757.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

MySQL视图与用户权限管理从入门到精通
数据库
MySQL视图与用户权限管理从入门到精通

1 视图 1 1 视图的基本概念 想象一下,你面前有一张表格,但它并不真正存在于数据库的物理存储中,而是由查询语句动态生成的。这就是视图。你可以把它理解为一个“虚拟表”,它的数据来源于一个或多个基础表(或其他视图)的查询结果。用户可以对视图进行查询、更新等操作,就像操作一张普通的表一样。关键在于,

热心网友
04.24
mysql并发更新同一行数据怎么办_利用乐观锁或分段更新优化
数据库
mysql并发更新同一行数据怎么办_利用乐观锁或分段更新优化

MySQL并发更新同一行数据怎么办?利用乐观锁或分段更新优化 先说结论:最稳妥的方案,是优先采用带条件的 UPDATE 配合 ROW_COUNT() 检查,并结合 version 字段实现乐观锁。至于分段更新,它只在批量修正这类少数场景中作为兜底手段,绝不能替代核心的并发控制逻辑。 为什么不能指望

热心网友
04.23
MySQL数据库异构迁移面临的挑战_转换数据类型与存储引擎
数据库
MySQL数据库异构迁移面临的挑战_转换数据类型与存储引擎

MySQL异构迁移:四大核心挑战与实战应对指南 直接说结论:一次成功的MySQL异构迁移,远不止是数据搬运。它更像是一次精密的“器官移植”,需要针对不同“组织”的特性进行预处理。整个过程可以归纳为四类核心问题的系统化处理:时间类型必须按UTC显式转换并规避自动更新陷阱;存储引擎切换应禁用简单的ALT

热心网友
04.23
mysql如何处理mysql服务无法启动_查看error日志排查原因
数据库
mysql如何处理mysql服务无法启动_查看error日志排查原因

MySQL服务启动失败?别慌,先看懂error log在说什么 遇到MySQL服务启动失败,很多人的第一反应是重装或者四处搜索错误代码。其实,最直接、最准确的“故障诊断书”就在眼前——那就是MySQL的error log。问题在于,很多人要么找不到它,要么面对满屏的日志信息不知从何看起。今天,我们就

热心网友
04.23
mysql数据意外丢失该怎么找回_InnoDB事务日志RedoLog灾备原理
数据库
mysql数据意外丢失该怎么找回_InnoDB事务日志RedoLog灾备原理

MySQL数据意外丢失该怎么找回:InnoDB事务日志RedoLog灾备原理 开门见山,先说一个核心结论:当数据库遭遇误删,很多人第一时间想到的REDO LOG,其实**并不能直接帮你“找回”数据**。无论是手滑执行了DROP DATABASE,还是跑错了DELETE FROM语句,指望REDO L

热心网友
04.23

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

html中的dialog标签怎么用?
前端开发
html中的dialog标签怎么用?

HTML中的dialog标签怎么用? 很多开发者第一次接触 标签时,都会有个美丽的误会:以为把它写进HTML,页面就会自动弹出一个对话框。其实不然,这个标签的默认状态是“隐藏”的。你可以把它想象成一扇关着的门——写了标签只是造好了门框,想让门打开,你得要么手动加上 open 属性,要么用Ja vaS

热心网友
04.24
如何为响应式下拉菜单添加可点击关闭的“X”按钮
前端开发
如何为响应式下拉菜单添加可点击关闭的“X”按钮

本文介绍如何在基于 CSS 媒体查询和 checkbox 的响应式导航菜单中,通过重构 HTML 结构并结合轻量 Ja vaScript,实现点击汉堡图标展开菜单、再点击右上角“×”按钮即时收起的功能,解决纯 CSS 方案无法主动关闭的问题。 你是否遇到过这样的场景?在移动端,用户点击汉堡图标打开了

热心网友
04.24
如何用 Array.prototype.entries 配合 for...of 在遍历数组的同时获取索引和值
前端开发
如何用 Array.prototype.entries 配合 for...of 在遍历数组的同时获取索引和值

如何用 Array prototype entries 配合 for of 在遍历数组的同时获取索引和值 entries() 返回的是什么类型的迭代器 先说清楚一个核心概念:Array prototype entries() 返回的,是一个标准的数组迭代器对象。这意味着,每次调用它的 next(

热心网友
04.24
伊朗驳斥特朗普所谓分裂内斗
web3.0
伊朗驳斥特朗普所谓分裂内斗

伊朗驳斥特朗普所谓“分裂内斗”论调:美方言论被指为心理投射 近日,围绕伊朗国内局势的表述,美伊之间再次上演了一场外交言辞交锋。这场对话的焦点,似乎已悄然发生了转移。 谈判重心的转向与核心关切的明确 根据伊朗外交部发言人纳赛尔·卡纳尼的表态,一个关键信号已经释放:当前伊美谈判的重心,已不再局限于核问题

热心网友
04.24
HTML怎么做复古风格_html复古怀旧风格页面实现【手册】
前端开发
HTML怎么做复古风格_html复古怀旧风格页面实现【手册】

真正复古的CRT效果需叠加扫描线与亚像素抖动:用repeating-linear-gradient生成2px间距、rgba(0,0,0,0 08)透明度的黑色条纹层,并配以transform: translateX(0 5px) translateY(-0 3px)和steps(1)动画,辅以bac

热心网友
04.24