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() を使えば、文字列を ' で囲んで、エスケープが必要な文字をエスケープして出力してくれます。
他にも 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() を使えば、文字列を ' で囲んで、エスケープが必要な文字をエスケープして出力してくれます。