動作中の本番データベースを django アプリからダンプし、それをローカル開発環境に移行しようとしています。本番サーバーは MySQL 5.1 を実行しており、ローカルでは 5.6 を使用しています。
django-mailer の "messagelog" テーブルを移行すると、恐ろしいエラー 1118 が発生します。
ERROR 1118 (42000) at line 2226: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
このエラーについてオンラインで多くのことを読みましたが、どれも私の問題を解決していません。
注: このエラーは、テーブルの作成によるものではなく、かなり大きなデータを含む行の挿入によるものです。
ノート:
- innodb_file_format および innodb_file_format_max 変数は Barracuda に設定されています。
- ROW_FORMAT は、テーブルの作成時に DYNAMIC に設定されます。
テーブルにはあまり多くの列がありません。以下のスキーマ:
+----------------+------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | message_data | longtext | NO | | NULL | | | when_added | datetime | NO | | NULL | | | priority | varchar(1) | NO | | NULL | | | when_attempted | datetime | NO | | NULL | | | result | varchar(1) | NO | | NULL | | | log_message | longtext | NO | | NULL | | +----------------+------------+------+-----+---------+----------------+
繰り返しますが、エラーが発生するのは、非常に大きな行 (message_data が約 5 メガバイト) を挿入しようとした場合のみです。テーブルの作成は正常に機能し、失敗する前に約 500,000 行が正常に追加されます。
アイデアがありません。DYANMIC および COMPRESSED 行フォーマットを試し、関連する innodb 変数の値を 3 回チェックしました。
mysql> show variables like "%innodb_file%";
+--------------------------+-----------+
| Variable_name | Value |
+--------------------------+-----------+
| innodb_file_format | Barracuda |
| innodb_file_format_check | ON |
| innodb_file_format_max | Barracuda |
| innodb_file_per_table | ON |
+--------------------------+-----------+
作成コード (SHOW CREATE TABLE から) は次のようになります。
CREATE TABLE `mailer_messagelog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`message_data` longtext NOT NULL,
`when_added` datetime NOT NULL,
`priority` varchar(1) NOT NULL,
`when_attempted` datetime NOT NULL,
`result` varchar(1) NOT NULL,
`log_message` longtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=869906 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC