mysqldumpの文字化け回避法@Dreamhost

2009年末にいろいろ無制限な海外サーバーDreamhostを借りて、遊んでいたんですが、 家のサーバー(ubuntu)で作ったMysqlをDreamhostに移そうとすると、いつも文字化けしてしまいました。 おそらくDremahostのDBの文字コードがlatin1なのが原因なのは分かっていたんですが、変える権限はないので 検索して、下記のような対策を発見。

mysqldumpで文字化けデータを頑張ってダンプ&リストア
http://koexuka.blogspot.com/2009/04/mysqldumpdump.html

↑は「–default-character-set=binary」をつけて、エクスポート&インポートするやり方。 やってみたけど変わらず文字化けして失敗。

MySQL 4.1 から 5.0に、文字化けせずにmysqldumpでデータを移行する
http://www.goodpic.com/mt/archives2/2009/01/mysql_41_50mysq.html

ダンプしたファイルをテキストエディタなどで開いてutf8をlatin1などに書き換える方法。
成功するけど、非常にめんどくさい&自動化が難しいので、納得できず。
書き出すときに–deafault-char-set=latin1って付けても、dumpしたファイルの中にはutf8って書いてあるんですね。

半ばあきらめてmysqldumpの公式マニュアルに目を通していたら、 charset関係のオプションを発見。しかもデフォで有効。

–set-charset 出力にSET NAMES default_character_setを追加してください。このオプションはデフォルトで有効となっています。SET NAMESステートメントを抑制するには、–skip-set-charsetを使用してください。

というわけで、–skipを使って無効にして試してみる。
前提条件として、DH側に同じ名前のデーターベースは作ってある。
試行錯誤したらから要らないオプションが付きまくってる。
コピペじゃなくて手打ちしてるから、ミスがありそう。

ローカル側
mysqldump DB_NAME -u USER_NAME -pPASSWORD --add-drop-table --default-character-set=binary --no-create-db --skip-add-drop-database --skip-set-charset >dump.sql

(↓ファイルアップロード)

ドリホ側
mysql -u USER_NAME -pPASSWORD -h MYSQL_DOMAIN DB_NAME<dump.sql

これで文字化けせずに無事移転できました。
なんかインポートの際に権限無いですよ的なエラーがでるので、何かオプションをオフにし忘れてるっぽいけど、大丈夫そう(てきとー あと、アップロードの際は、bzip2使ったりしてます。

重いプログラムなので、家のサーバーで動かして、自動で定期的にDH側と同期できればいいなぁなんて考えてるけど シェルスクリプトがまだ分からないので、いつになるか。

Posted in MySQL, PHP by admin at 2月 13th, 2010.
Tags: ,

Leave a Reply