火曜日, 10月 14, 2008

【本日の嵌り】 MySQLバックアップファイルから部分的に復元する このエントリーを含むはてなブックマーク


 あるテーブルを復元したいのだが、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 件のコメント:

 
© 2006-2015 Virtual Technology
当サイトではGoogle Analyticsを使ってウェブサイトのトラフィック情報を収集しています。詳しくは、プライバシーポリシーを参照してください。