mysqldumpを実行する際、進捗状況を「pv」で出力したいならば、データベースのサイズが事前に分かっていると便利。
調べて見たところ以下のようなSQLを実行すれば良いことがわかった。
テーブル毎のサイズを取得する場合:
SELECT
TABLE_SCHEMA,
TABLE_NAME,
DATA_LENGTH / POWER(1024,1) Data_KB,
DATA_LENGTH / POWER(1024,2) Data_MB,
DATA_LENGTH / POWER(1024,3) Data_GB
FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','performance_schema','mysql') ORDER BY DATA_LENGTH;
データベース全体のサイズを取得する場合:
SELECT
Data_BB / POWER(1024,1) Data_KB,
Data_BB / POWER(1024,2) Data_MB,
Data_BB / POWER(1024,3) Data_GB
FROM (SELECT SUM(data_length) Data_BB FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')) A;
実行すると例えば以下のような出力が得られる(KB単位、MB単位、GB単位)。
$ mysql < size_database.sql
Data_KB Data_MB Data_GB
39195247.68261719 38276.60906505585 37.3795010400936
実際はこのサイズを取得するシェル関数を作って「pv -s データベースサイズ」として実行すればよい。続きは次回。