2017-02-21 47 views
0

今はアクセスできないサーバから新しいデータベースにMySQLデータベースを移動しています。ダンプには、バイナリ・ブロブを含むテーブルが含まれています。これは、MySQLコマンドライン・クライアントに問題を引き起こすようです。データベースを復元しようとすると、私は次のエラーを取得:バイナリブロブでMySQLダンプを復元する

ERROR at line 694: Unknown command '\''. 

を私はエラーが発生している時にラインを視察し、それが巨大なinsert文であることが判明しているようだこれ(約長さは900Kの文字。)バイナリブロブをテーブルに挿入します。

今、私はthesetwoという質問が私のものとつながっているようです。しかし、両方の答えが私の問題を解決しないことが判明しました。 --default-character-set=utf8または--default-caracter-set=latin1を追加しても、ソースデータベースサーバーにアクセスできなくなったため、何も変更されず、--hex-dumpでダンプを作成することはできません。

MySQLのコマンドラインクライアントからこのバックアップを復元する方法はありますか?はいの場合、私は何をする必要がありますか?

追加情報が必要な場合はお知らせください。

ありがとうございます。

編集:私はMySQL 5.6.35を使用しています。また、上で概説した試みに加えて、私はすでにシステム変数をサーバとクライアントの両方で最大値にまで増加させようとしましたが、役に立たないのです。

答えて

0

私が正しく覚えていれば、my.cnfのmax_allowed_pa​​cketを、ダンプファイル内の最大のデータブロブに対応できる大きさに設定し、MySQLサーバを再起動する必要があります。ここ

mysql --max_allowed_packet=64M < your_dumpfile.sql 

詳細情報:

その後、あなたはこの1のようにrestoreコマンドを使用することができます [https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_max_allowed_packet]

+0

あ、そうです。私はそれについて言及するのを忘れた、私の悪い。私はすでにmax_allowed_pa​​cketを最大値(1073741824)に設定しようとしましたが、mysqlに同じ値を加えましたが、何も変わりませんでした。エラーメッセージは同じままです。 – mezzodrinker

0

んソリューション、ちょうど私が「テキストと同じ動作を見ていたことが確認されました"長いJSON文字列を含むフィールド型。 MySQLdumpが生成するSQL(バックアップ)ファイルにはINSERT文があり、その特定のテキストフィールドの長さを "約" 64K(エスケープされた引用符/二重引用符とさまざまなUTF-8文字があります)に切り捨てますそのような打ち切りが起こったということです。

もちろん、JSON形式の文字列が早すぎて終了するため、JSON列への復元が失敗します。

この場合、バックアップされたテーブルの列がTEXTとして定義されていて、64 KBに制限されている必要があります。私は慌てて、バックアップされたテーブルのスキーマをMEDIUMTEXTに変更しました。その後、MySQLdumpは、64Kを超えるどこかのINSERT文でその文字列を切り捨てなくなりました。

MySQLdumpは列全体を出力するのではなく、最大文字列長がスキーマ情報に基づいていると思うものを切り捨て、切り捨て時には警告を出さないように見えます。

関連する問題