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

7

Ich habe eine funktionierende Produktionsdatenbank aus einer Django-App gelöscht und versuche, sie in meine lokale Entwicklungsumgebung zu migrieren. Der Produktionsserver läuft mit MySQL 5.1 und lokal habe ich 5.6.

Wenn ich die Tabelle "messagelog" des django-mailers migriere, stoße 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 ist nicht und stammt von der Erstellung der Tabelle, sondern eher vom Einfügen einer Zeile mit ziemlich großen Daten.

Anmerkungen:

  1. Die Variablen innodb_file_format und innodb_file_format_max sind auf Barracuda eingestellt.
  2. Der ROW_FORMAT wird bei der Tabellenerstellung auf DYNAMIC gesetzt.
  3. Die Tabelle hat 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 | | +----------------+------------+------+-----+---------+----------------+

Erneut tritt der Fehler NUR auf, wenn ich versuche, eine ziemlich große (message_data ist etwa 5 Megabyte) Zeile einzufügen; Erstellen der Tabelle funktioniert gut, und etwa 500.000 Zeilen werden gerade 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

    
Greg Humphreys 14.08.2014, 03:03
quelle

3 Antworten

19

Laut einer der Antworten auf diese Frage wurde Ihr Problem möglicherweise durch Änderungen in MySQL 5.6 verursacht (siehe InnoDB Hinweise zu Ссылка ):

  

InnoDB Notizen

     

Wichtige Änderung: Redo-Log schreibt für großes, extern gespeichertes BLOB   Felder könnten den letzten Checkpoint überschreiben. Der Patch 5.6.20   Begrenzt die Größe von Redo-Log-BLOB-Schreibvorgängen in 10% der Redo-Log-Datei   Größe. Der 5.7.5-Patch behebt den Fehler, ohne eine Einschränkung aufzuerlegen.   Für MySQL 5.5 bleibt der Fehler eine bekannte Einschränkung.

     

Als Folge des redo log BLOB Schreiblimits, das für MySQL 5.6 eingeführt wurde,   Die Einstellung innodb_log_file_size sollte 10 mal größer als die sein   größte BLOB-Datengröße in den Zeilen Ihrer Tabellen plus der   Länge anderer Felder variabler Länge (VARCHAR, VARBINARY und TEXT   Felder eingeben). Wenn Sie innodb_log_file_size verwenden, ist keine Aktion erforderlich   Die Einstellung ist bereits ausreichend groß oder Ihre Tabellen enthalten kein BLOB   Daten.

     

Hinweis In MySQL 5.6.22 wird das Redo-Log-BLOB-Schreiblimit auf 10% gelockert   der gesamten Redo-Log-Größe (innodb_log_file_size *   innodb_log_files_in_group).

     

(Fehler # 16963396, Fehler # 19030353, Fehler # 69477)

Hilft es, wenn Sie innodb_log_file_size auf etwas größer als 50M ändern? (Das Ändern dieser Variable benötigt einige Schritte, um korrekt zu funktionieren:

Ссылка ).

    
klasske 19.08.2014, 19:09
quelle
1

Wenn dies für irgendjemanden nützlich ist, funktionierte die Lösung von @klasske nicht für mich, aber das Schreiben dieser Zeile in 'my.cnf' hat Folgendes bewirkt:

%Vor%     
gorcajo 31.05.2016 14:49
quelle
0
%Vor%     
ตอ ตอม 30.06.2017 09:22
quelle

Tags und Links