Life is a Translucent

I wish it was the 90's

mysqldumpできれいなInsert文を取得する

Tags: mysql

移行元と移行先で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')"