mysqldumpできれいなInsert文を取得する
移行元と移行先でDBの同期が取れておらず、id重複でそのままデータが移行できないという泣き所に遭遇したときに使えるテクニック。
基本戦略
まずは通常のDump形式ではなく、データ一件ごとにINSERT分がセパレートされたSQLを取得する。
その後、Editor / Script等でずれているIDに補正をかけたものを投入する。
きれいなSQL取得
$ mysqldump --complete-insert --skip-extended-insert --single-transaction --no-create-info -u ${user_name} ${database_name} ${table_name} -p --where "post_type = 'faq'"
(おまけ) 取得するdumpに条件指定をつける
一例として、id = 2000以上のレコードをdumpしたいときの指定。
$ mysqldump -u ${user_name} ${database_name} ${table_name} -p --where "id > 2000"
--where
の中は割と複雑な条件もOK。
$ mysqldump -u ${user_name} ${database_name} ${table_name} -p --where "id in (select id from ${external_table} where condition = 'something')"