UNIX 系 OS にて稼動している mysql の情報を、phpmyadmin のエクスポート機能を用いてダンプしました。
その後、自身の Windows にてリストアしようと思い、コマンドプロンプトで以下のコマンドを打ちました。
mysql -f -v -pmysql --max_allowed_packet=1280M -u root -h localhost < C:\backup.sql 2>c:\err.txt
そうすると、103行目まではきちんとinsertされるのですが、104行目以降のSQLが実行されません。
C:\err.txt には以下の内容が表示されています。
ERROR 2006 (HY000) at line 104: MySQL server has gone away
ERROR 2006 (HY000) at line 105: MySQL server has gone away
ERROR 2006 (HY000) at line 106: MySQL server has gone away
(以下省略)
また、当該エラーが発生している blob 型カラムを持つテーブルへのinsert文を全部、ダンプファイルから消すと、
正常に最後までリストア処理がおわります。
blob 型カラムを持つテーブルのリストアをうまくやる方法はないでしょうか?
7月の風ことwindofjulyです
(1文字違いのアカウントを作って不埒な活動をしている人がいますので間違えないでくださいね)
id:b-wind さん(非常に信頼できる回答者です)とのやりとりから、
エクスポートの失敗、転送の失敗等の基本事項はクリアだと仮定しますと、
max_allowed_packet=1280M の値が疑わしいです
そこまで巨大な値にしたことはなかったので上限値を調べたのですが、
4.x以降では1GBがマックスのようですから、
1280Mという値は無視されてしまっている可能性がありそうです
max_allowed_packetは一番大きなBLOBフィールドのサイズより少し大きければよいので、
100MBなど、もっともっと小さな値で可能なはずですから再チャレンジしてみてください
4.1のマニュアル
http://dev.mysql.com/doc/refman/4.1/ja/show-variables.html
使用する最大の BLOB と同じ大きさにすべきである。max_allowed_packet のプロトコル制限は MySQL 3.23 で 16MB、MySQL 4.0 で 1GB である。
5.1のマニュアル
http://dev.mysql.com/doc/refman/5.1/ja/server-system-variables.h...
max_allowed_packet のプロトコル制限は 1GB。
ちょっとしたやり取り用に「コメント・トラックバックを表示する」にチェックを入れておいていただければと思います
MySQL :: MySQL 5.1 リファレンスマニュアル :: 7.12 mysqldump — データベースバックアッププログラム
- hex-blob
16進変換表記法を使用しているバイナリカラムをダンプします(例えば、'abc'は0x616263となります)。影響を受けるデータタイプはBINARY、VARBINARY、BLOB、そしてBITになります。
必要なのはこれだろうね。
phpMyAdmin のバージョンが分からないけど、エクスポート時のオプションに「BLOBに16進数表記を利用する」ってのがないかい?
もしくはコマンドラインでなく、Windows 上でも phpMyAdmin かそれに類するツールを使うかだね。
ありがとうございます。デフォルトでBLOBに16進数表記を利用するがONになっていましたのでそこは大丈夫です。
phpMyAdminでバックアップする際、「データのBLOBに16進数表記を利用する」にチェックを入れましたか?
これがないと、どうやってもリストアできません。
蛇足ですが、回答1は常習悪質回答者です。「不適切な回答」チェックボックスにチェックを入れましょう。
回答1は適切な回答かと思いますが・・
7月の風ことwindofjulyです
(1文字違いのアカウントを作って不埒な活動をしている人がいますので間違えないでくださいね)
id:b-wind さん(非常に信頼できる回答者です)とのやりとりから、
エクスポートの失敗、転送の失敗等の基本事項はクリアだと仮定しますと、
max_allowed_packet=1280M の値が疑わしいです
そこまで巨大な値にしたことはなかったので上限値を調べたのですが、
4.x以降では1GBがマックスのようですから、
1280Mという値は無視されてしまっている可能性がありそうです
max_allowed_packetは一番大きなBLOBフィールドのサイズより少し大きければよいので、
100MBなど、もっともっと小さな値で可能なはずですから再チャレンジしてみてください
4.1のマニュアル
http://dev.mysql.com/doc/refman/4.1/ja/show-variables.html
使用する最大の BLOB と同じ大きさにすべきである。max_allowed_packet のプロトコル制限は MySQL 3.23 で 16MB、MySQL 4.0 で 1GB である。
5.1のマニュアル
http://dev.mysql.com/doc/refman/5.1/ja/server-system-variables.h...
max_allowed_packet のプロトコル制限は 1GB。
ちょっとしたやり取り用に「コメント・トラックバックを表示する」にチェックを入れておいていただければと思います
素晴らしいご回答ありがとうございます。盲点でした。
残念ながら1Gに変更してもうまくいきませんでした・・が、
この回答よりインスピレーションを得、my.cnf を色々いじってみたところうまくいきました。
何をいじったのがよかったかはわかりませんが、
read_buffer = 2M
を
read_buffer = 200M
にした、などでしょうかね。。
素晴らしいご回答ありがとうございます。盲点でした。
残念ながら1Gに変更してもうまくいきませんでした・・が、
この回答よりインスピレーションを得、my.cnf を色々いじってみたところうまくいきました。
何をいじったのがよかったかはわかりませんが、
read_buffer = 2M
を
read_buffer = 200M
にした、などでしょうかね。。