mysqldumpの文字化け回避法@Dreamhost
2009年末にいろいろ無制限な海外サーバーDreamhostを借りて、遊んでいたんですが、 家のサーバー(ubuntu)で作ったMysqlをDreamhostに移そうとすると、いつも文字化けしてしまいました。 おそらくDremahostのDBの文字コードがlatin1なのが原因なのは分かっていたんですが、変える権限はないので 検索して、下記のような対策を発見。
mysqldumpで文字化けデータを頑張ってダンプ&リストア
http://koexuka.blogspot.com/2009/04/mysqldumpdump.html
↑は「–default-character-set=binary」をつけて、エクスポート&インポートするやり方。 やってみたけど変わらず文字化けして失敗。
ダンプしたファイルをテキストエディタなどで開いて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側と同期できればいいなぁなんて考えてるけど シェルスクリプトがまだ分からないので、いつになるか。