大家好,有人知道如何估算一个 mysql 表的大小吗?我的意思是,我打算备份我所有服务器上的所有 mysql 表,但我想知道在不进行物理转储的情况下每个转储表应该有多大。有没有什么命令可以做到这一点?我在 debian 6 上使用 mysql 5.1 干杯
答案1
正如所见这里,您可以在数据库上运行这些查询(从页面上的评论中窃取,然后进行调整)。
- 按数据库:
SELECT table_schema 'database', concat( round( sum( data_length + index_length ) / ( 1024 *1024 ) , 2 ) , 'M' ) size FROM information_schema.TABLES WHERE ENGINE=('MyISAM' || 'InnoDB' ) GROUP BY table_schema;
- 按表:
SELECT concat( table_schema, '.', table_name ) table_name, concat( round( data_length / ( 1024 *1024 ) , 2 ) , 'M' ) data_length, concat( round( index_length / ( 1024 *1024 ) , 2 ) , 'M' ) index_length, concat( round( round( data_length + index_length ) / ( 1024 *1024 ) , 2 ) , 'M' ) total_size FROM information_schema.TABLES ORDER BY ( data_length + index_length ) DESC;
答案2
由于 mysqldump 是数据库的逻辑表示,因此您只能找到实际数据。索引永远不会存储在 mysqldump 中,但表定义将决定如何填充索引。
很难从 mysqldump 中提取出一个准确的数字,因为写入 mysqldump 的内容如下:
- 扩展 INSERT 命令,包含数十、数百或数千行
- 每个 INSERT 有数十或数百个括号和逗号
- 表创建命令
- 指令
- 在 mysqldump 期间禁用外键和唯一键
- 记录日志文件和mysqldump的位置
- 禁用/启用索引(仅限 MyISAM)
- 锁定整个表以进行写入
- 保存/恢复全局变量
你可以衡量的因素只是数据长度的总和:
SELECT SUM(data_length)/POWER(1024,2) TotalDB_MB
FROM information_schema.tables;
要查看数据库的总和以及总计:
SELECT table_schema,SUM(data_length)/POWER(1024,2) DB_MB
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY table_schema
WITH ROLLUP;
要查看每个表和数据库的小计:
SELECT table_schema,table_name,SUM(data_length)/POWER(1024,2) DB_MB
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY table_schema,table_name
WITH ROLLUP;
您可以使用以下
POWER(1024,1)
以 KB 为单位的报告POWER(1024,2)
以 MB 为单位的报告POWER(1024,3)
英国报道POWER(1024,4)
结核病报告POWER(1024,5)
PB 中的报告- 这就是 PB 级的数据
- 如果你必须使用这个,我会收取合理的咨询费
你可以使用这个公式
- NOC = 每张表的列数
- 逗号数 = NOC - 1
- 报价数量 = 表中字符列数量 X 2
- NumRows = 每张表的行数
- 括号数 = 行数 X 2
- CharactersForSQLPerTable = NumRows X (NumCommas + NumQuotes) + NumParens
mysqldump 近似大小的最终公式
CharactersForSQLPerTable X NumberOfTables
+ Characters for "INSERT INTO tblname VALUES "
+ TotalDB_MB