人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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


●質問者: comp2008
●カテゴリ:コンピュータ インターネット
✍キーワード:2006 AT AWAY blob HAS
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● b-wind
●100ポイント

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

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

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


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


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

◎質問者からの返答

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


2 ● windofiuly
●5ポイント

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

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

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

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

◎質問者からの返答

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


3 ● うぃんど
●200ポイント ベストアンサー

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ