あるテーブルを復元したいのだが、mysqldumpで取っているバックアップファイルから復元すると、すべてのテーブルが対象になって何時間もかかってしまう。さあ、どうしよう。
そこで、csplitでファイルを分割して該当のものだけ復元することにした。
まず、egrep 'CREATE TABLE' xxxx.sql で何個目にあるかを調べる。xxxx.sqlはmysqldumpで取ったときのバックアップファイルである。
[hoge@hoge batch]$ egrep 'CREATE TABLE' xxxx.sql
CREATE TABLE `aaaa` (
CREATE TABLE `bbbb` (
・・・
CREATE TABLE `koreda` ( <= 35番目
次に、以下を実行して分割する
[hoge@hoge batch]$ csplit xxxx.sql /^DROP/ {*}
そこから特定のテーブルのみ復元するには、35番目の分割ファイルだけを指定すればよい。xx35はcssplitが作成する35番目の分割ファイルである。
[hoge@hoge batch]$ mysql --user=hoge --password=xx sampledb < xx35
これで解決。
0 件のコメント:
コメントを投稿