MySQL-Fehler 1118 (Zeilengröße zu groß) beim Wiederherstellen der Django-Mailer-Datenbank

Ich habe eine funktionierende Produktionsdatenbank aus einer Django-App kopiert und versuche, sie in meine lokale Entwicklungsumgebung zu migrieren. Auf dem Produktionsserver läuft MySQL 5.1, und lokal habe ich 5.6.

Beim Migrieren der "messagelog" -Tabelle des Django-Mailers stößt ich auf den gefürchteten Fehler 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.

Ich habe online viel über diesen Fehler gelesen, aber nichts davon hat mein Problem gelöst.

N.B. Dieser Fehler istnicht aus der Erstellung der Tabelle, sondern das Einfügen einer Zeile mit ziemlich großen Daten.

Anmerkungen:

Die Variablen innodb_file_format und innodb_file_format_max werden auf Barracuda gesetzt.Das ROW_FORMAT wird bei der Tabellenerstellung auf DYNAMISCH gesetzt.

Die Tabelle enthält nicht sehr viele Spalten. Schema unten:

+----------------+------------+------+-----+---------+----------------+ | 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 | | +----------------+------------+------+-----+---------+----------------+

Der Fehler tritt NUR dann auf, wenn ich versuche, eine recht große Zeile einzufügen (message_data ist ungefähr 5 Megabyte groß). Das Erstellen der Tabelle funktioniert einwandfrei, und ungefähr 500.000 Zeilen werden einwandfrei vor dem Fehler hinzugefügt.

Ich habe keine Ideen mehr. Ich habe DYANMIC- und COMPRESSED-Zeilenformate ausprobiert und die Werte der relevanten innodb-Variablen dreifach überprüft:

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 | +--------------------------+-----------+

Der Erstellungscode (aus SHOW CREATE TABLE) sieht folgendermaßen aus:

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

Antworten auf die Frage(3)

Ihre Antwort auf die Frage