今更のデータベースバックアップ・リストア・移行(MySQL編)

仕事だとPostgreSQLばかりで、あまりMySQLを使ったことはなかったので。とにかく肝は文字化けしないようにすること。

ダンプ


mysqldump -u [ユーザ名] --default-character-set=binary -p [データベース名] > dump.sql

リストア


mysql --default-character-set=binary -u [ユーザ名] -p [データベース名] < dump.sql

文字化け

ダンプしたDBとリストアするDBが異なる(別サーバとか、MySQLの別バージョンとか)場合に、文字化けする場合。

ダンプファイルdump.sqlは文字化けしてないし、リストア先のDBとエンコーディング指定も揃っているのに何で?としばらく頭を悩ませる。MySQLのダンプ・リストアに関する文字化けは検索するとたくさん出てくるのでためしてみるけど(my.cnfの設定とか)、解決せず。。

で、自己解決。ダンプファイル中のSQLのcreate table文でデフォルトの文字セットがlatin1指定されてた。

仕方ないので、dump.sql中の"latin1"の文字を"utf8"に機械的に置換(ダンプファイルは150MBくらいあったけど、viで)。これで文字化けせずリストアできた。