そこそこ巨大なテーブルをmysqldumpで書き出して、nkfでEUC-JPからUTF-8に変換、テーブルの照会順序もutf8-generic-ciにして書き戻す、ということをやろうとした。
サーバのMySQLのバージョンは4.1。
$ mysqldump –version
mysqldump Ver 10.9 Distrib 4.1.20, for redhat-linux-gnu (i386)
$ mysqldump -u root -h localhost -p –complete-insert –quick –no-create-info データベース名 > datas.sql
$ nkf -Ew datas.sql > datas.utf8.sql
$ mysql -u root -h localhost -p データベース名 < datas.utf8.sql
こんな感じで実行してみたらタイトルにある”Got a packet bigger than ‘max_allowed_packet’ bytes”のエラーが発生。
SQLファイルの中身を見ると拡張INSERT文がずらーっと。しかも何かnkfが所々で文字化けを起こしてるし。
MySQLのバックアップデータをUTF8で復元する – Knowledge Database IT
–max_allowed_packet=128M のオプションとかはなぜか効かず。まぁ、効かないことが多いようですが。
Linuxでやる夫: [mysql] やる夫がmax_allowed_packetの設定をするようです。
mysqlコマンドでログインしてから「source ファイル名」でも取りこめるのですが、ちょっと面倒なので、拡張INSERTを何とかやめたい。
MySQL :: MySQL 4.1 リファレンスマニュアル :: 4.9.7 mysqldump(テーブル構造とデータのダンプ)
MySQL4.1のmysqldumpのマニュアルには–skip-系のオプションの記述がなかったのですが、MySQL5.1のマニュアルを見たら発見。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 7.12 mysqldump — データベースバックアッププログラム
使えるのかなーと思って試してみたところ成功。
$ mysqldump -u root -h localhost -p –complete-insert –skip-extended-insert –quick –no-create-info データベース名 > datas.sql
$ nkf -Ew datas.sql > datas.utf8.sql
$ mysql -u root -h localhost -p データベース名 < datas.utf8.sql
nkfの文字化けも直ったしこれで解決。