Da der Festplattenspeicher der Server-Datenbank voll war, schlug das Schreiben einer großen Datenmenge fehl, was zu dem Fehler „Doppelter Eintrag ‚für Schlüssel ‚Benutzername‘“ führte. Wenn ein solcher MySQL-Datenbankfehler auftritt, liegt wahrscheinlich ein Problem mit dem MySQL-Datenbankindex vor. Also, was ist ein MySQL-Datenbankindex? 
Analyse: Wenn der Index primär oder eindeutig ist, muss das den Daten in der Datentabelle entsprechende Feld die Eindeutigkeit jedes Datensatzes sicherstellen. Andernfalls tritt dieser Fehler auf. Dies tritt normalerweise beim Schreiben in die Datenbank auf. Beispielsweise erfordert das Discuz! 4.1-Forumprogramm, dass die Benutzernamen aller Mitglieder eindeutig sein müssen, d. h. der Benutzernamenindex ist eindeutig. Wenn Sie zu diesem Zeitpunkt zwangsweise einen vorhandenen Benutzernamendatensatz in die Tabelle cdb_members einfügen oder den Benutzernamen eines Datensatzes in einen vorhandenen Benutzernamen aktualisieren, wird dieser Fehler angezeigt. Beispielsweise hatte ein Internetnutzer ein Problem mit der Website dedecms. Als er sie besuchte, wurde ihm im Vollbildmodus eine Fehlermeldung angezeigt. Er überprüfte das MySQL-Protokoll und fand die folgende Fehlermeldung: Tabelle .dedecmsv4dede_archives ist als abgestürzt markiert und sollte repariert werden
Es weist darauf hin, dass die CMS-Artikeltabelle dede_archives als problematisch markiert ist und repariert werden muss. Also habe ich schnell die historischen Daten wiederhergestellt und im Internet nach der Ursache gesucht. Endlich wurde das Problem gelöst. Die Lösung lautet wie folgt: Suchen Sie das Tool bin/myisamchk im MySQL-Installationsverzeichnis und geben Sie es in die Befehlszeile ein: myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI
Anschließend hilft Ihnen das Tool myisamchk, den Index der Datentabelle wiederherzustellen. Starten Sie MySQL neu und das Problem ist gelöst. Um die MySQL-Datenbank dann zu reparieren, können Sie im Allgemeinen das Tool myisamchk oder das Tool mysqlcheck auf diese beiden Arten verwenden: 1. myisamchk-Tool Um myisamchk zu verwenden, müssen Sie den MySQL-Server vorübergehend stoppen . Beispielsweise möchten wir die Discuz-Datenbank überarbeiten. Gehen Sie folgendermaßen vor: # service mysql stop (MySQL stoppen); # myisamchk -r /absoluter Pfad der Datenbankdatei/*MYI # Dienst MySQL starten
myisamchk prüft und repariert automatisch Indexfehler in Datentabellen. 2. MySQLCheck-Tool Die Verwendung von mysqlcheck erfordert kein Stoppen von MySQL und ermöglicht Hotfixes . Die Schritte sind wie folgt: # mysqlcheck -r discuz.* # service mysql stop (MySQL stoppen); # myisamchk -r /absoluter Pfad der Datenbankdatei/*MYI # Dienst MySQL starten
myisamchk prüft und repariert automatisch Indexfehler in Datentabellen. Hinweis: Verwenden Sie für myisamchk und mysqlcheck nicht -f, um eine Reparatur zu erzwingen. Der Parameter -f löscht einige fehlerhafte Daten, um das Problem zu beheben, wenn allgemeine Reparaturen fehlschlagen. Verwenden Sie -f daher nur, wenn es unbedingt nötig ist. Nachfolgend finden Sie Ergänzungen von anderen Internetnutzern Überprüfen und reparieren Sie alle Datenbanken: # mysqlcheck -A -o -r -p Passwort eingeben: db1 OK db2 OK db3 OK db4 OK ...... ...... ......
Reparieren Sie die angegebene Datenbank # mysqlcheck -o -r DatenbankNAME -p
Du kannst Befehlsdetails: Der mysqlcheck-Client kann MyISAM-Tabellen überprüfen und reparieren. Es kann auch Tabellen optimieren und analysieren. mysqlcheck funktioniert ähnlich wie myisamchk, arbeitet aber anders. Der Hauptunterschied besteht darin, dass mysqlcheck verwendet werden muss, wenn der mysqld-Server ausgeführt wird, während myisamchk verwendet werden sollte, wenn der Server nicht ausgeführt wird. Der Vorteil der Verwendung von mysqlcheck besteht darin, dass Sie den Server nicht anhalten müssen, um Tabellen zu überprüfen oder zu reparieren. MySQLcheck bietet Benutzern eine bequeme Möglichkeit, die SQL-Anweisungen CHECK TABLE, REPAIR TABLE, ANALYZE TABLE und OPTIMIZE TABLE zu verwenden. Es bestimmt, welche Anweisung in der auszuführenden Operation verwendet werden soll, und sendet die Anweisung dann zur Ausführung an den Server. Es gibt drei Möglichkeiten, mysqlcheck aufzurufen: Shell> mysqlcheck [Optionen] db_name [Tabellen] Shell> mysqlcheck [Optionen] ---Datenbank DB1 [DB2 DB3...] Shell> mysqlcheck [Optionen] --all --database
Wenn keine Tabelle angegeben ist oder die Option --database oder --all-database verwendet wird, wird die gesamte Datenbank überprüft. Im Vergleich zu anderen Clients verfügt mysqlcheck über eine Besonderheit. Durch das Umbenennen der Binärdatei kann das Standardverhalten der Checkliste (--check) geändert werden. Wenn Sie ein Tool möchten, das Tabellen standardmäßig reparieren kann, kopieren Sie mysqlcheck einfach zurück nach mysqlrepair oder verwenden Sie einen symbolischen Link mysqlrepair, um mysqlcheck zu verknüpfen. Durch den Aufruf von mysqlrepair können Sie die Tabelle entsprechend dem Befehl reparieren. Die folgenden Namen können verwendet werden, um das Standardverhalten von mysqlcheck zu ändern: MySQL-Reparatur Die Standardoption ist --repair
mysqlanalyze Die Standardoption ist --analyze
mysqloptimize Die Standardoption ist --optimize
mysqlcheck unterstützt die folgenden Optionen: ---helfen, -? Zeigt eine Hilfemeldung an und beendet das Programm. --alle--Datenbank, -A Überprüfen Sie alle Tabellen in allen Datenbanken. Entspricht der Verwendung der Option --database, mit der Ausnahme, dass alle Datenbanken in der Befehlszeile benannt werden. --alles-in-1, -1 Anstatt für jede Tabelle eine Anweisung auszugeben, wird für jede Datenbank eine Anweisung ausgeführt, die alle zu verarbeitenden Tabellen der Datenbank benennt. --analyze, -a Analysetabelle. --auto-reparatur Wenn eine überprüfte Tabelle beschädigt ist, wird sie automatisch repariert. Nach der Überprüfung aller Tabellen werden ggf. notwendige Reparaturen automatisch durchgeführt. --character-sets-dir=Pfad Das Verzeichnis, in dem die Zeichensätze installiert sind. Siehe Abschnitt 5.10.1, „Zeichensätze für Daten und Sortierung“. --check, -c Überprüfen Sie die Tabelle auf Fehler. --check-only-changed, -C Es werden nur Tabellen geprüft, die seit der letzten Prüfung geändert wurden oder die nicht ordnungsgemäß geschlossen wurden. --Kompresse Komprimiert alle zwischen Client und Server gesendeten Informationen (sofern beide Komprimierung unterstützen). ---Datenbank, -B Verarbeitet alle in der Datenbank genannten Tabellen. Mit dieser Option werden alle Zeichenfolgenargumente als Datenbanknamen und nicht als Tabellennamen behandelt. ---debug[=Debugoptionen], -#[Debugoptionen] Debug-Protokoll schreiben. Die Zeichenfolge „Debugoptions“ lautet normalerweise „d:t:o,file_name“. --default-character-set=Zeichensatz Verwenden Sie charset als Standardzeichensatz. Siehe Abschnitt 5.10.1, „Zeichensätze für Daten und Sortierung“. --extended, -e Wenn Sie diese Option zum Überprüfen von Tabellen verwenden, können Sie sicherstellen, dass diese hundertprozentig konsistent sind. Dies kann jedoch lange dauern. Wenn Sie diese Option zum Reparieren einer Tabelle verwenden, dauert die Ausführung einer erweiterten Reparatur nicht nur sehr lange, sondern generiert auch eine große Anzahl wertloser Zeilen. --fast, -F Es werden nur Tabellen geprüft, die nicht ordnungsgemäß geschlossen wurden. --force, -f Fahren Sie fort, auch wenn SQL-Fehler auftreten. --host=Hostname, -h Hostname Stellen Sie eine Verbindung zum MySQL-Server auf dem angegebenen Host her. --medium-check, -m Führt eine schnellere Prüfung durch als --extended. Es werden nur 99,99 % der Fehler gefunden, was in den meisten Fällen gut genug ist. --optimieren, -o Optimieren Sie die Tabelle. --password[=Passwort], -p[Passwort] Das für die Verbindung mit dem Server zu verwendende Kennwort. Wenn die kurze Optionsform (-p) verwendet wird, darf zwischen der Option und dem Passwort kein Leerzeichen stehen. Wenn auf die Option --password oder -p in der Befehlszeile kein Kennwortwert folgt, werden Sie zur Eingabe eines Kennworts aufgefordert. --port=Portnummer, -P Portnummer Die für die Verbindung zu verwendende TCP/IP-Portnummer. --protocol={TCP | SOCKET | PIPE | SPEICHER} Das zu verwendende Verbindungsprotokoll. --schnell, -q Wenn Sie diese Option für eine Prüftabelle verwenden, wird verhindert, dass die Prüfung Zeilen nach falschen Verknüpfungen durchsucht. So lässt sich dies am schnellsten überprüfen. Wenn Sie eine Tabelle mit dieser Option reparieren, wird versucht, nur den Indexbaum zu reparieren. Dies ist die schnellste Lösung. --repair, -r Führen Sie eine Korrektur durch, die die meisten Probleme behebt, außer wenn die eindeutigen Werte nicht eindeutig sind. --silent, -s Lautloser Modus. Es werden nur Fehlermeldungen ausgedruckt. --socket=Pfad, -S Pfad Die für die Verbindung zu verwendende Socket-Datei. --tables Überschreibt die Option --database oder -B. Alle der Option folgenden Argumente werden als Tabellennamen behandelt. --user=Benutzername, -u Benutzername Der für die Verbindung mit dem Server zu verwendende MySQL-Benutzername. --verbose, -v Ausführlicher Modus. Druckt Informationen zu jeder Phase des Programmbetriebs. --version, -V Versionsinformationen anzeigen und beenden.
Das könnte Sie auch interessieren:- Detaillierte Erläuterung des Binlog-Protokollanalysetools zur Überwachung von MySQL: Canal
- 5 MySQL-GUI-Tools, die Ihnen bei der Datenbankverwaltung empfohlen werden
- Detaillierte Erklärung des MySQL-Überwachungstools mysql-monitor
- Eine detaillierte Einführung in den Aufbau und die Verwendung des Tools Anemometer zeigt MySQL Slow Logs grafisch an
- So verwenden Sie MySQL-Stresstest-Tools
- Das Pycharm-Tool konnte keine Verbindung zur MySQL-Datenbank herstellen
- Analyse von Mysql-Datenmigrationsmethoden und -Tools
- Eine schnelle Lösung zum versehentlichen Löschen von MySQL-Daten (MySQL Flashback Tool)
- Das KTL-Tool realisiert die Methode zum Synchronisieren von Daten von MySQL zu MySQL
- So stellen Sie eine Verbindung zum MySQL-Visualisierungstool Navicat her
- Empfehlen Sie mehrere MySQL-bezogene Tools
|