MySQL 日常维护常用 SQL 与命令整理


在日常管理和维护 MySQL 数据库时,整理了几条常用、高频的实用命令与分析 SQL,方便日后随时查阅。


1. 跨库快速同步表结构(不生成中间文件)

如果需要将 db_a 数据库中某张表(如 table_1)的表结构直接克隆到 db_b,可以通过管道(Pipe)直接把 mysqldump 的建表语句输出送入目标数据库,无需先导出为 .sql 文件再做导入:

mysqldump -uusername -ppassword --no-data --compact \
  db_a table_1 | mysql -uusername -ppassword db_b table_1;

参数说明:

  • --no-data:只导出表结构,不导出任何数据记录;
  • --compact:精简输出,省略多余的注释与设置语句。

2. 统计每个数据库的数据与索引占用大小

通过查询系统元数据视图 information_schema.TABLES,可以按库统计所有表的数据量与索引大小总和(单位:MB),快速排查哪些库占用了较多磁盘空间:

SELECT
  table_schema AS "Database Name",
  ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size in MB"
FROM information_schema.TABLES
GROUP BY table_schema
ORDER BY "Size in MB" DESC;

3. 统计指定数据库中各单表的数据行数与空间占用

当需要深入定位某个具体数据库(如 schema_name)内部哪张表膨胀严重时,可以使用以下 SQL 查出该库下每张表的估算行数、数据大小、索引大小以及总体积:

SELECT
  TABLE_NAME AS "Table Name",
  TABLE_ROWS AS "Row Count",
  ROUND(data_length / 1024 / 1024, 2) AS "Data Size (MB)",
  ROUND(index_length / 1024 / 1024, 2) AS "Index Size (MB)",
  ROUND((data_length + index_length) / 1024 / 1024, 2) AS "Total Size (MB)"
FROM information_schema.TABLES
WHERE table_schema = 'schema_name'
ORDER BY (data_length + index_length) DESC;

Share this post

Enjoyed reading? Share it with your friends or colleagues!