Jak naprawić błąd mysql 1031 - Mechanizm przechowywania tabel dla „katalog_produktu_relacji” nie ma tej opcji?

30

Próbuję stworzyć nową wersję programistyczną naszego sklepu Magento. Zrobiłem czystą instalację El Capitan i uruchomiłem apache z PHP, Mysql (wersja 5.7.10) itp. Mam również phpmyadmin i stworzyłem bazę danych dla Magento. Jednak gdy próbuję zaimportować kopię zapasową z naszej witryny produkcyjnej, pojawia się błąd:

ERROR 1031 (HY000) at line 291001: Table storage engine for 'catalog_product_relation' doesn't have this option

Próbowałem zaimportować plik .sql przez terminal za pomocą polecenia:

mysql -h localhost -u <user> -D <database> -p < <file>

Zgubiłem się tutaj. Google odszedł trochę czasu, ale nie mógł znaleźć rozwiązania. Używam tego samego silnika, co w danych produkcyjnych.

Czy ktoś ma jakiś pomysł?

Woulei
źródło
Jak utworzyłeś eksport? Czy sprawdziłeś lokalną bazę danych, czy istnieją już tabele (po wielokrotnym przetestowaniu)? Jeśli tak, usuń wszystkie tabele przed uruchomieniem nowego importu.
Anna Völkl,
1
W przeciwnym razie: Może coś takiego: stackoverflow.com/a/32083169/865443
Anna Völkl

Odpowiedzi:

49

Ostatnio miałem ten sam problem z importem.

PROBLEM

Jest to prawdopodobnie spowodowane opcją tabeli, którą masz w CREATE TABLE DDL: ROW_FORMAT=FIXED

Sprawdźmy, czy w zrzutu SQL znajduje się taki ciąg (np .: magento-db-dump.sql).

cat magento-db-dump.sql | grep '=FIXED'

Co spowodowało, że

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Catalog Product Relation Table';
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Catalog Product To Website Linkage Table';

ROZWIĄZANIE

Usunięcie ROW_FORMAT=FIXEDopcji z CREATE TABLE DDL naprawi problem. Wypróbujmy więc możliwe rozwiązania.

# 1

sed -i 's/ROW_FORMAT=FIXED//g' magento-db-dump.sql

To nie działało dla mnie w MacOSx, co spowodowało następujący błąd:

sed: 1: „magento-db-dump.sql”: nieprawidłowy kod polecenia m

# 2

sed -i '' 's/ROW_FORMAT=FIXED//g' magento-db-dump.sql

I nawet to spowodowało:

sed: błąd RE: niedozwolona sekwencja bajtów

# 3 Ale ten działał dla mnie w MacOSx

LC_ALL=C sed -i '' 's/ROW_FORMAT=FIXED//g' magento-db-dump.sql

( źródło )

MagePsycho
źródło
Dla mnie zadziałało następujące polecenie:find -name "mysql_dump.sql" | xargs perl -pi -e 's/ROW_FORMAT=FIXED//g'
Wasiq Shahrukh,
1. pracował dla mnie na Ubuntu
Joel Davey
@JoelDavey Tak 1 # działa w Ubuntu. Miałem na myśli system MacOS.
MagePsycho
10

Ten sam problem natrafiłem na próbę zaimportowania zrzutu bazy danych Magento z MySQL 5.5 do MySQL 5.7. Problemem wydaje się być opcja tabeli ROW_FORMAT = FIXED na dwóch tabelach InnoDB. Usunięcie dwóch wystąpień tej opcji ze zrzutu bazy danych pozwoliło na uruchomienie importu bez błędów.

Wydaje się, że ta opcja dotyczy tylko tabel MyISAM , przynajmniej w MySQL 5.7.

mustdobetter
źródło
1
Mały dodatek: jest związany z ustawieniem, innodb_strict_modektóre było domyślnie wyłączone, ale jest domyślnie włączone począwszy od MySQL 5.7.7 (zgodnie z dokumentacją MySQL).
Jisse Reitsma
8
sed -ie 's/ROW_FORMAT=FIXED//g' magento-db-dump.sql

Pracuj na różnych platformach (Mac + Linux)

Aurélien
źródło
działał doskonale na mięcie linux ....
Andrew Smith,
6

Inną opcją byłoby dodanie innodb_strict_mode = offdo pliku konfiguracyjnego MySQL. Natrafiłem na ten błąd przy użyciu instalacji nienadzorowanych, magerunktóre uniemożliwiły mi edycję pliku SQL. Nie jestem pewien, czy wyłączenie trybu ścisłego InnoDb jest pożądane w środowisku produkcyjnym, ale przynajmniej działa w środowisku programistycznym.

Jisse Reitsma
źródło
1

Ta tabela oczekuje na InnoDB. Sprawdziłbym twoje ustawienia mysql, aby upewnić się, że masz włączone / dozwolone. Możliwa jest również sugestia, że ​​tabela może istnieć. Chciałbym usunąć wszystkie tabele i spróbować ponownie po sprawdzeniu, czy InnoDB działa.
Po wyłączeniu podanego komunikatu o błędzie spodziewam się, że InnodDB nie jest gotowy lub nie działa na bieżącej instalacji.

RussellAlbin
źródło
Właśnie sprawdziłem mysql. jest włączony i ustawiony jako domyślny silnik. Importuję go do zupełnie nowej bazy danych bez żadnych tabel. Spróbuje rozwiązania, które powiedziała
@Anna