一般社団法人 全国個人事業主支援協会

COLUMN コラム

はじめに

常日頃、保守業務で問合せ対応を行っていると、過去のダンプファイルから任意のテーブルのみリストアしたい場合がよく発生します。
今回は備忘録としてその手順をまとめておこうと思います。

 

抜き出したいテーブルの開始位置を求める

まず初めに、zegrepコマンドを使ってダンプファイルに格納されているテーブルの開始行番号を取得します。
構文は以下の通りです。

zegrep -in ‘^drop table if exists’ [対象のダンプファイル]

このコマンドを実行すると、指定したダンプファイルの各テーブルの先頭の行番号の一覧が表示されます。

22:DROP TABLE IF EXISTS `TBL-A`;
222:DROP TABLE IF EXISTS `TBL-B`;
268:DROP TABLE IF EXISTS `TBL-C`;
312:DROP TABLE IF EXISTS `TBL-D`;
413:DROP TABLE IF EXISTS `TBL-E`;

この一覧でリストアしたいテーブルの開始行番号を確認しておきます。

 

対象のダンプファイルから任意のテーブルのデータを抜き出す

次に、zcatコマンドとsedコマンドを組合わせて、対象のダンプファイルから任意のテーブルのデータブロックを抜き出します。
構文は以下の通りです。

zcat [対象のダンプファイル] | sed -n ‘[開始行],[終了行]p’ > [出力するファイル]

今回はTBL-Cを抜き出す想定で記述すると、

zcat [対象のダンプファイル] | sed -n ‘268,311p’ > 20240817_TBL-C.dmp

となります。
ここで注意する点は、終了行は次のテーブル(TBL-D)の開始行から-1した値になるということです。

ここまでくれば、単純に出力ファイルをリストアしたいスキーマーへ取り込めば、任意のテーブルのみリストアすることが可能です。

 

最後に

今回は対象のダンプファイルがgzipで圧縮されている前提でコマンドを紹介しましたが、圧縮されていない場合は、それぞれegrepコマンド、catコマンドを使用すると同様に抽出が可能です。

 

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア