Erreur MySQL 1118 (Ligne de taille trop grande) lors de la restauration de Django-mailer base de données
J'ai perdu un travail de production de la base de données à partir d'un django app et suis en train de migrer vers mon environnement local de développement. Le serveur de production pistes de MySQL 5.1, et localement j'ai 5.6.
Lors de la migration de django-mailer "messagelog" table, je suis en cours d'exécution dans la terrible Erreur 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.
J'ai lu beaucoup de choses en ligne à propos de cette erreur, mais rien n'a résolu mon problème.
N. B. Cette erreur est pas en provenance de la création de la table, mais plutôt l'insertion d'une ligne avec de jolies gros volumes de données.
Notes:
- La innodb_file_format et innodb_file_format_max les variables sont définies de Barracuda.
- La ROW_FORMAT est mis à la DYNAMIQUE de création de table.
-
La table ne sont pas très nombreuses colonnes. Le schéma ci-dessous:
+----------------+------------+------+-----+---------+----------------+
| 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 | |
+----------------+------------+------+-----+---------+----------------+
Encore une fois, l'erreur se produit UNIQUEMENT lorsque j'essaie d'insérer un assez grand (message_data est d'environ 5 méga-octets) de ligne; la création de la table fonctionne bien, et environ 500 000 lignes sont ajoutées à l'amende juste avant la panne.
Je suis à court d'idées; j'ai essayé d'DYANMIC et la compression des formats de lignes, et j'ai triple vérifié les valeurs de la innodb variables:
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 |
+--------------------------+-----------+
Le code de création (à partir de SHOW CREATE TABLE) ressemble à:
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
MySQL "Row size too large" when saving many text fields
OriginalL'auteur Greg Humphreys | 2014-08-14
Vous devez vous connecter pour publier un commentaire.
Selon l'une des réponses à cette question, votre problème pourrait être causé par des changements dans MySQL 5.6 (voir la InnoDB Notes sur http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-20.html):
Il aide si vous modifiez
innodb_log_file_size
à quelque chose de plus grand de plus de 50M? (Le changement de cette variable a besoin de quelques étapes pour fonctionner correctement:https://dba.stackexchange.com/questions/1261/how-to-safely-change-mysql-innodb-variable-innodb-log-file-size ).
OriginalL'auteur klasske
Si c'est utile pour tout le monde, @klasske solution n'a pas fonctionné pour moi, mais l'écriture de cette ligne dans " mon.cnf' a fait:
Permet à la base de données pour créer les tables dans la nouvelle version du Barracuda format. Mais cela ne veut pas dire qu'il va (selon votre version de MySQL et d'autres paramètres). Vous pouvez aussi avoir besoin d'ajouter
innodb_file_per_table
et ontROW_FORMAT=COMPRESSED
ouROW_FORMAT=DYNAMIC
dans votre création de la table de déclaration. Cela a résolu le rowsize problème pour moi sur MySQL 5.5OriginalL'auteur gorcajo
OriginalL'auteur ตอ ตอม