mysql にて、blob 型カラムのリストアに関する質問です。

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 型カラムを持つテーブルのリストアをうまくやる方法はないでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2010/12/04 18:44:33
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:windofjuly No.3

回答回数2625ベストアンサー獲得回数1149

ポイント200pt

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。

 

ちょっとしたやり取り用に「コメント・トラックバックを表示する」にチェックを入れておいていただければと思います

id:comp2008

素晴らしいご回答ありがとうございます。盲点でした。

残念ながら1Gに変更してもうまくいきませんでした・・が、

この回答よりインスピレーションを得、my.cnf を色々いじってみたところうまくいきました。

何をいじったのがよかったかはわかりませんが、

read_buffer = 2M

read_buffer = 200M

にした、などでしょうかね。。

2010/12/04 18:40:28

その他の回答2件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント100pt

MySQL :: MySQL 5.1 リファレンスマニュアル :: 7.12 mysqldump — データベースバックアッププログラム

  • hex-blob

16進変換表記法を使用しているバイナリカラムをダンプします(例えば、'abc'は0x616263となります)。影響を受けるデータタイプはBINARY、VARBINARY、BLOB、そしてBITになります。

必要なのはこれだろうね。


phpMyAdmin のバージョンが分からないけど、エクスポート時のオプションに「BLOBに16進数表記を利用する」ってのがないかい?


もしくはコマンドラインでなく、Windows 上でも phpMyAdmin かそれに類するツールを使うかだね。

id:comp2008

ありがとうございます。デフォルトでBLOBに16進数表記を利用するがONになっていましたのでそこは大丈夫です。

2010/12/03 22:34:52
id:windofiuly No.2

回答回数62ベストアンサー獲得回数2

ポイント5pt

phpMyAdminでバックアップする際、「データのBLOBに16進数表記を利用する」にチェックを入れましたか?

これがないと、どうやってもリストアできません。

 

蛇足ですが、回答1は常習悪質回答者です。「不適切な回答」チェックボックスにチェックを入れましょう。

http://q.hatena.ne.jp/

id:comp2008

回答1は適切な回答かと思いますが・・

2010/12/03 22:35:44
id:windofjuly No.3

回答回数2625ベストアンサー獲得回数1149ここでベストアンサー

ポイント200pt

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。

 

ちょっとしたやり取り用に「コメント・トラックバックを表示する」にチェックを入れておいていただければと思います

id:comp2008

素晴らしいご回答ありがとうございます。盲点でした。

残念ながら1Gに変更してもうまくいきませんでした・・が、

この回答よりインスピレーションを得、my.cnf を色々いじってみたところうまくいきました。

何をいじったのがよかったかはわかりませんが、

read_buffer = 2M

read_buffer = 200M

にした、などでしょうかね。。

2010/12/04 18:40:28

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません