在日常管理和维护 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;