mysqlでデータベース、テーブルごとのサイズを取得する

(innodbを使用している場合でも)innodb_file_per_table を設定している場合、
du -sh /path/to/data/* などとすればさくっと取れる。

データベースごとのサイズ

SELECT  table_schema
	     , SUM(data_length+index_length) / 1024 / 1024 as MB 
FROM information_schema.tables
GROUP BY table_schema
ORDER BY SUM(data_length+index_length) DESC

テーブルごとのサイズ

use database_name;  
select  
table_name, engine, table_rows as tbl_rows, avg_row_length as rlen,  
floor((data_length+index_length)/1024/1024) as allMB,  
floor((data_length)/1024/1024) as dMB,  
floor((index_length)/1024/1024) as iMB  
from information_schema.tables  
where table_schema=database()  
order by (data_length+index_length) desc;