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 データベースサイズ」として実行すればよい。続きは次回。