sql >> Databáze >  >> RDS >> Mysql

MySQL – Oprava chyby – Chyba databáze WordPress Duplicitní záznam pro klíč PRIMARY pro dotaz INSERT INTO wp_options

Jak mnozí z vás ví, že tento blog běží na WordPressu a pod kapotou WordPressu je databáze MySQL. Databáze MySQL je docela dobrá a je schopna udržet masivní provoz, který tento blog dostává každý den. Nicméně, stejně jako každá databáze, MySQL potřebuje ladění a správnou správu. V tomto příspěvku na blogu budeme diskutovat o tom, jak jsem obdržel velmi zvláštní chybu Chyba databáze WordPress a jak jsem ji vyřešil.

Minulý týden mi náhle zavolal přítel, že se náš blog načítá velmi pomalu. Když je publikován nový blogový příspěvek nebo je rozeslán newsletter, je velmi běžné vidět nárůst návštěvnosti a chvilkové zpomalení výkonu webu. V tomto případě však web neustále běžel pomalu. Po chvíli jsme na webu našli několik nových problémů. Kvůli pomalému výkonu jsme také zjistili, že plánovač WordPress nepublikoval nové blogové příspěvky a neprováděl rutinní zálohování systému.

Po pečlivé diagnostice jsem zjistil, že problém je v databázi MySQL. Když jsem zkontroloval protokol chyb, našel jsem v protokolu následující chybu.

[Fri Sep 09 04:58:03 2016] [error] [client] Chyba databáze WordPress Duplicitní záznam '3354142' pro klíč 'PRIMARY' pro dotaz INSERT INTO wp_options (option_name , option_value,autoload) VALUES (…)

Bylo zcela jasné, že v tabulce možností došlo k porušení primárního klíče. Problém však nebylo snadné vyřešit, protože osobně jsem s touto tabulkou neprováděl žádné transakce nebo v poslední době neproběhly žádné nové aktualizace nebo změny pluginu. Můj první pokus byl obnovit tuto konkrétní tabulku ze starší zálohy databáze (často zálohuji svůj web a jeho databázi). I tento konkrétní problém selhal a nebyl jsem schopen se chyby zbavit.

Nakonec jsem hledal na internetu, ale bohužel se mi nepodařilo pomoci. V té době jsem se rozhodl dělat různé pokusy a omyly. Věřte mi, trávím více než 4 hodiny a různými různými triky, abych se této chyby zbavil. Bylo mi zcela jasné, že to byla chyba logické integrity databáze, musel jsem trávit čas se spoustou tabulek a logiky. Po 4 hodinách jsem konečně našel řešení a bylo to velmi jednoduché řešení. Kéž bych to věděl dříve a nestrávil více než 4 hodiny různými pokusy a omyly.

Řešení / oprava:

Právě jsem spustil následující příkaz a můj problém byl vyřešen.

REPAIR TABLE wp_options

To je ono! Bylo hotovo.

Skutečnost byla taková, že moje tabulka byla poškozená a ze stejného důvodu jsem dostával chybu související s duplicitním klíčem pro moji databázovou tabulku. Jakmile jsem opravil poškození tabulky, vše fungovalo dobře. Pamatujte, že v mém případě to byla tabulka wp_options, která byla poškozena, musíte ji nahradit názvem vaší tabulky a skript bude fungovat dobře.

Pokud navíc chcete pouze opravit všechny tabulky ve vaší databázi, můžete spustit následující skript a ten vygeneruje skripty pro každou jednotlivou tabulku ve vaší databázi MySQL. Jakmile skript spustíte, opravíte každou jednotlivou tabulku vaší databáze.

SELECT CONCAT('repair table ', table_name, ';') 
FROM information_schema.tables 
WHERE table_schema='YourDatabaseName';

Doufám, že tento příspěvek na blogu bude pro vás užitečný. Pokud budete mít jakýkoli problém s databází WordPress MySQL, kontaktujte mě, rád vám pomohu vyřešit jakoukoli související chybu.


  1. MySQL select příkaz s CASE nebo IF ELSEIF? Nejste si jisti, jak získat výsledek

  2. Jak vytvořím složený klíč pomocí SQL Server Management Studio?

  3. Jak přejmenovat databázi SQL Server pomocí T-SQL

  4. Jak převést řetězec na časové razítko v PostgreSQL