Ошибка «ERROR 1031 (HY000) at line 4284: Table storage engine for ‘TABLE’ doesn’t have this option»
При обновлении базы данных, получил ошибку:
ERROR 1031 (HY000) at line 4284: Table storage engine for 'catalog_product_relation' doesn't have this option
Поискав в инете, нашел решение, и я в своей статье расскажу что делать в такой ситуации чтобы исправить данную ошибку.
Исправление «ERROR 1031 (HY000) at line 4284: Table storage engine for ‘catalog_product_relation’ doesn’t have this option».
Проверяем, есть ли в дампе следующие строки:
[root@kievdev01 kassatex]# cat /home/linux-notes.org/dump.sql| grep "ROW_FORMAT" ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Catalog Product Relation Table'; ) ENGINE=InnoDB AUTO_INCREMENT=2548 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Catalog Product Super Attribute Label Table'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Catalog Product To Website Linkage Table'; ) ENGINE=InnoDB AUTO_INCREMENT=3654 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Customer Address Entity'; ) ENGINE=InnoDB AUTO_INCREMENT=4101 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Customer Entity'; ) ENGINE=InnoDB AUTO_INCREMENT=5382 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; ) ENGINE=InnoDB AUTO_INCREMENT=112629 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; ) ENGINE=InnoDB AUTO_INCREMENT=446 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Wishlist main Table'; [root@kievdev01 kassatex]#
Я вижу что имею несколько строк с ROW_FORMAT=DYNAMIC и по этому, их нужно изменить на ROW_FORMAT=FIXED. Самый простой способ сделать это — использовать sed:
# sed -ie 's/ROW_FORMAT=FIXED//g' /home/linux-notes.org/dump.sql
После чего, можно снова выполнять команду mysql и вливать дамп:
# mysql linux-notes_db < /home/linux-notes.org/dump.sql
У меня все влилось без единых ошибок.
«несколько строк с ROW_FORMAT=DYNAMIC и по этому, их нужно изменить на ROW_FORMAT=FIXED» не соответствует «’s/ROW_FORMAT=FIXED//g’».
Да и интересно не только лекарство, но и причина возникновения ошибки.
MySQL определяет формат строки таблицы как фиксированный или динамический (fixed или dynamic) в зависимости от типа данных столбца. Если таблица имеет тип данных столбца переменной длины, такие как TEXT или VARCHAR, формат строки является FIXED; в противном случае, он DYNAMIC. Строка из INT занимает фиксированные 4 байта, поэтому она FIXED. Строка из VARCHAR(20) занимает от 1 до 61 байта (utf8), поэтому она DYNAMIC.Можно заставить MySQL считать строки фиксированной длины (и тогда VARCHAR(20) будет занимать 61 байт).
А нужно менять значения, возможно из-за несоответствий версий самого MYSQL (возможно с настройками).