[mysqldump] 特定のテーブルだけダンプ対象外にする方法

2025/02/23

author

masyus

バージョン情報

  • MySQL: 5.7.26

特定のテーブルだけダンプ対象外にするユースケース

プロダクト開発でMySQLを使用しており、ローカル開発環境用のデータベースをダンプする際、特定のテーブルだけはレコードをダンプ対象外にしたい場合があります。たとえばログ系テーブルがあった場合は基本的にレコード数が膨大であるため、スキーマだけダンプしてレコードを対象外にすることで

  • ダンプに要する時間とダンプファイルのサイズを小さくすることができる
  • ローカル開発環境構築時にダンプデータのインポートにかかる時間を削減することができる

というメリットがあります。

このオペレーションは何らかのMySQLクライアントを使えばそのGUIに搭載された機能で実現できることが多いですが、たとえば私が使っていたSequal Aceでは日本語が含まれるデータをダンプした際に謎の文字化けが発生してしまい、ダンプデータのインポートに失敗するという問題が発生しました。そのようなケースでは代替案としてmysqldumpコマンドで実現するのですが、ここではその方法を解説します。

特定のテーブルだけダンプ対象外にする方法

3つのコマンドを使い、特定のテーブルだけダンプ対象外にしたダンプファイルを作成する方法を解説します。

1. テーブルスキーマだけをダンプする

mysqldump -u <user_name> -p -h <host> <database> \
  --no-data > table_schema.sql

--no-dataオプションを指定することで、テーブルスキーマだけをダンプすることができます。

2. 特定のテーブルデータだけを無視してダンプする

mysqldump -u <user_name> -p -h <host> <database> \
  --no-create-info \
  --ignore-table=<database>.<table1> \
  --ignore-table=<database>.<table2> \
  --ignore-table=<database>.<table3> > table_data.sql

--no-create-infoオプションを指定することでテーブルスキーマをダンプしないようにします(既に1.でスキーマだけダンプしているため)。且つ--ignore-tableオプションを指定することで、特定のテーブルだけダンプ対象外にすることができます。

3. テーブルスキーマとデータを結合し、1つのダンプファイルにまとめる

cat table_schema.sql table_data.sql | gzip > dumped.sql.gz

catコマンドを使い、2つのダンプファイルを結合し、gzipで圧縮することで1つのダンプファイルにまとめることができます。余談ですがcatコマンドは「concatenate and print files」の略で、本来はファイルを連結するコマンドです。catコマンドをファイルの中身を表示する「print files」のコマンドとして使うことが多いと思いますが、本来の使い方はこのようにファイルを連結することです。man catでコマンドの詳細を確認することができます。

参考