dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

mysqldumpが使えない場合のデータダンプ方法

2011-08-15 22:27:54 | mysql
mysqldump では -w オプションでダンプするレコードの条件を指定することができますが、例えば複数のテーブルを組み合わせた条件を指定することはできません。
他にも view の実データをダンプしたい場合に、mysqldump で view を指定すると、view のテーブル定義がダンプされるだけです。

このような場合に、select 文で insert/replace 文を生成するのはいかがでしょうか。

mysql> select * from test_dump;
+---------+---------+
| int_col | str_col |
+---------+---------+
| 1 | abc |
| 2 | a'b'c |
+---------+---------+

$ cat dump.sql
select
concat(
"replace into test_dump set"
, " int_col = ", int_col
, ", str_col = ", quote(str_col)
, ";")
from
test_dump
;

$ cat dump.sql | mysql -s DB名
replace into test_dump set int_col = 1, str_col = 'abc';
replace into test_dump set int_col = 2, str_col = 'a\\'b\\'c';


quote() を使えば、文字列を ' で囲んで、エスケープが必要な文字をエスケープして出力してくれます。