LoginSignup
0
0

More than 3 years have passed since last update.

dumpデータから不要な内容を削除する

Posted at

背景

運営サービスを開発環境にリストアする際に、特定のテーブルデータは不要であり、dumpファイルを直接編集して不要箇所を削除することにしました。
だいたいdumpデータ自体は10GB程度で、流石にエディタで開くのは厳しい量です。

削除行数の特定

先述したように通常のエディタで開くのは厳しいので、
直接ファイル内を検索し、不要箇所の行数を特定するアプローチでトライしました。

egrep -n '^DROP TABLE IF EXISTS `target_table_name`' dump.sql

...待つことしばらく...

12944:DROP TABLE IF EX...

みたいな感じで行数が特定できました。
そこでいったん扱いやすいファイルに変換します。

sed -n '12944,14000p' dump.sql > temp.sql

そのまま target_table_name に関連する内容だけ削除したいので、次のテーブル情報がどこに出てくるか検索します。

egrep -n '^DROP TABLE IF EXISTS' dump.sql

......待つこと多少の時間......

1:DROP TABLE IF EXISTS `target_table_name`;
53:DROP TABLE IF EXISTS `next_table_name`;
121:DROP TABLE IF EXISTS `2next_table_name`;

みたいに行数がわかるので今回で言えば、
12944行目から
12996(=12944+53-1)行目分を
削除すれば良いとわかりました。

特定行が削除されたdumpファイル生成

ここまで行ったらあとは削除すればOK
ただ削除時によく使うsedはそのコマンドだけだと、延々と標準出力にdumpファイルが書き出されることになるので、ファイル生成にしてあげましょう

sed -e '12944,12996d' dump.sql > deleted_dump.sql

以上で、完了です。お疲れ様でした。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0