MySQLのデータベースサイズをダンプ前に取得する

S 20210516 153816

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