少し質問する前に、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_packet = 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
この問題の理由は、変更ログで読み取ることができる 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 :
- サーバーを正常かつ正常にシャットダウンする必要があります。
- Ib_logfile0、ib_logfile1などの名前のログファイルを移動します(削除しないでください)。
- エラーログをチェックして、シャットダウンに問題がないことを確認します。
- 次に、サーバーを再起動し、エラーログの出力を注意深く確認します。ログファイルが存在しないというInnoDBの印刷メッセージが表示されます。新しいものを作成してから開始します。
- この時点で、InnoDBが機能していることを確認してから、古いログファイルを削除できます。
XAMPPでこれを見つけることができない人のために:
最初に、編集する正しいファイルが見つかりませんでしたinnodb_log_file_size
実際のファイル:xampp/mysql/bin/my.ini
Xampp\mysql\bin\my.iniに移動して、innodb_log_file_sizeのサイズを256 MBに変更してみてください。