web-dev-qa-db-ja.com

大規模なバイナリデータ用にMySQL 5.6 LONGBLOBを構成する方法

少し質問する前に、MySQL 5.5データベースのMySQL Workbench 6.1を使用して、あるマシンから別のマシンの5.6にデータエクスポート/インポートを実行しています。両方のマシンは、1つの32ビットと他の64ビットのubuntuです。

データを問題なくダンプしますが、ロードしようとすると次のようになります。

1807行目のエラー1118(42000):行サイズが大きすぎます(> 8126)。一部の列をTEXTまたはBLOBに変更するか、ROW_FORMAT = DYNAMICまたはROW_FORMAT = COMPRESSEDを使用すると役立つ場合があります。現在の行形式では、768バイトのBLOBプレフィックスがインラインで格納されます。

以下がテーブル作成です。

CREATE TABLE `file_content` (
  `fileid` bigint(20) NOT NULL,
  `content` LONGBLOB NOT NULL,
  PRIMARY KEY (`fileid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

次の関連するmy.cnf設定があります...

max_allowed_pa​​cket = 1G
innodb_file_per_table = 1
innodb_file_format =バラクーダ

私は、問題が何であるかを理解しようとグーグルで多くの時間を費やしています。ところで、主キーを削除した場合(ここでは問題ありませんが、このテーブルへの外部キーを持つ別のテーブルは文句を言います。

運がよければ、ボックスにsshアクセスできるので、実際のmysqldb.logを確認できます。なぜ私が本当に面白いと思うのか...

2014-08-12 20:42:12 25246 [エラー] InnoDB:総BLOBデータ長(14179167)は、REDOログファイルサイズ(3072)の10%を超えています。 innodb_log_file_sizeを増やしてください。

したがって、REDOログファイルのサイズをLONGBLOBサイズの10倍に増やすと、問題が解決しました。ただし、1G LONGBLOB(パケットサイズのために実際の最大値)を挿入するには、10G innodb_log_file_sizeが必要です。

「redo log size error」が「row size too large(> 8126)」エラーに変わる方法を誰もが説明できますか。

ところで、私はこのデータベースの構造を制御できないので、「データベースに大きなblobを保存する理由」はありません。

TIA

39
nrapopor

この問題の理由は、変更ログで読み取ることができる MySQL 5.6.2 の変更です。

MySQL 5.6で導入されたREDOログBLOB書き込み制限の結果として、 innodb_log_file_size 設定は、テーブルの行で見つかった最大BLOBデータサイズと他の可変長の長さの10倍になりますフィールド(VARCHAR、VARBINARY、およびTEXTタイプのフィールド)。 innodb_log_file_size 設定がすでに十分に大きい場合、またはテーブルにBLOBデータが含まれていない場合、アクションは不要です。

問題を解決するには、my.iniセクションの下の[mysqld]innodb_log_file_size オプションの値を増やす必要があります。デフォルト値は48Mです。に設定する

[mysqld]
innodb_log_file_size=256M

私の場合に役立ちました。

innodb_log_file_sizeの値を変更するときは注意してください do thissafely

  1. サーバーを正常かつ正常にシャットダウンする必要があります。
  2. Ib_logfile0、ib_logfile1などの名前のログファイルを移動します(削除しないでください)。
  3. エラーログをチェックして、シャットダウンに問題がないことを確認します。
  4. 次に、サーバーを再起動し、エラーログの出力を注意深く確認します。ログファイルが存在しないというInnoDBの印刷メッセージが表示されます。新しいものを作成してから開始します。
  5. この時点で、InnoDBが機能していることを確認してから、古いログファイルを削除できます。
78
naitsirch

XAMPPでこれを見つけることができない人のために:
最初に、編集する正しいファイルが見つかりませんでしたinnodb_log_file_size

実際のファイル:xampp/mysql/bin/my.ini

1
Ingus

Xampp\mysql\bin\my.iniに移動して、innodb_log_file_sizeのサイズを256 MBに変更してみてください。

0
Natnael Abate