Czasami w określonych okolicznościach tabela wp_options (lub dowolna inna) może stracić indeks klucza głównego (primary key).
Dokładna przyczyna tego problemu nie jest w 100% jasna. Wydaje się, że może się to zdarzyć, gdy baza danych została ręcznie zmigrowana z jednej bazy do innej lub gdy użyto pluginu lub narzędzia, które nie obsługiwało wszystkich konfiguracji — np. różnych wersji MySQL lub typów silnika InnoDB i MyISAM.
Aby było jasne: WP STAGING nie jest przyczyną tego błędu. Pomagamy ci go jedynie wykryć, wyświetlając wyraźne ostrzeżenie w panelu administratora, gdy to się zdarza:
Robimy to, ponieważ ten błąd jest krytyczny i bardzo podstępny. Nie zauważysz go, dopóki nie będzie za późno, by szybko go rozwiązać. Im dłużej czekasz z naprawą, tym trudniej go usunąć.
Dzieje się tak, ponieważ twoja witryna działa niemal tak jak wcześniej i tylko „pod maską” zachowuje się inaczej.
Krótki przykład, dlaczego ma to znaczenie dla tabeli wp_options:
Tabela wp_options ma kolumnę o nazwie option_id. To ID jest zwykle unikalne i może być przypisane do wiersza tylko raz. ID jest inkrementowany automatycznie dla każdego wiersza, na przykład:
option_id | option_name
1 | option1
2 | option2
3 | option3
Jeśli brakuje klucza głównego, option_id nie jest już inkrementowany i wszystkie nowe wiersze otrzymują option_id równe 0:
option_id | option_name
1 | option1
2 | option2
3 | option3
0 | option4
0 | option5
0 | option6
Problem pojawia się, gdy próbujesz wyeksportować i zaimportować te wiersze do innej bazy. option_id musi być unikalny, więc pojawią się błędy SQL typu „Can not insert duplicate key…” i migracja zostanie zatrzymana.
W rezultacie WP STAGING i każdy inny plugin migracyjny nie może przenieść danych bazy do innej bazy. Na przykład proces pushowania z witryny Staging na produkcję się nie powiedzie.
Ten zrzut ekranu pokazuje zwykłą tabelę wp_options z kluczem głównym ustawionym na kolumnie option_id:

Drugi zrzut ekranu pokazuje tabelę wp_options z brakującym kluczem głównym:

Uwaga: W tym poradniku potrzebujesz narzędzia do zarządzania bazą danych, np. „adminer” lub phpMyAdmin.
Zmień nazwy istniejących option_id
- Wykonaj Backup całej bazy danych i pobierz go.
- Zmodyfikuj wartości option_id dla wszystkich zduplikowanych ID.
Sugeruję wziąć największą liczbę, jaką masz w kolumnie option_id, i zwiększać ją kolejno o jeden. Ten screencast pokazuje, jak to zrobić:
Dodaj indeks klucza głównego i zmień tabelę
- Otwórz phpMyAdmin lub adminer i przejdź do tabeli wp_options.
- Kliknij „alter indexes”, jak na zrzucie:

- Następnie ustaw „option_id” jako klucz główny:

- Jeśli otrzymasz błąd „Duplicate entry '0′ for key PRIMARY”, oznacza to, że nadal masz w tabeli zduplikowane ID i nie zmieniłeś ich wszystkich:

- Jeśli tak się dzieje, znajdź pozostałe duplikaty i zwiększ ich wartości, aż w tabeli nie będzie powtórzeń. Następnie ponów próbę dodania klucza głównego do tabeli.
Po naprawieniu brakującego klucza głównego możesz pushować witrynę Staging na produkcję; nadal jednak zalecamy wcześniejszy Backup bazy.