Zusammenfassung häufiger Probleme und Anwendungskenntnisse in MySQL

Zusammenfassung häufiger Probleme und Anwendungskenntnisse in MySQL

Vorwort

Bei der täglichen Entwicklung oder Wartung von MySQL sind einige Probleme oder Fehler oft unvermeidbar, wie z. B. verlorene Passwörter und beschädigte Tabellen. Hier finden Sie eine Zusammenfassung häufiger Probleme, falls Sie diese in Zukunft erneut benötigen.

1. MySQL-Root-Passwort vergessen

1. Melden Sie sich beim Server an, auf dem sich die Datenbank befindet, und beenden Sie den MySQL-Prozess manuell.

(1) Melden Sie sich beim Server an, auf dem sich die Datenbank befindet, und beenden Sie den MySQL-Prozess manuell:

root@bogon:/data/mysql# kill `cat ./mysql.pid`

Unter diesen bezieht sich mysql.pid auf die PID-Datei im MySQL-Datenverzeichnis, die die Prozess-ID des MySQL-Dienstes aufzeichnet.

(2) Starten Sie den MySQL-Dienst mit der Option --skip-grant-tables neu:

zj@bogon:/data/mysql$ sudo /usr/local/mysql/bin/mysqld --skip-grant-tables --user=root &

Die Option --skip-grant-tables ermöglicht es, die Authentifizierung der Autorisierungstabelle beim Starten des MySQL-Dienstes zu überspringen. Nach dem Start ist für die Verbindung mit MySQL als Root kein Kennwort mehr erforderlich.

(3) Melden Sie sich als Root-Benutzer und mit leerem Passwort bei MySQL an und ändern Sie das Root-Passwort:

zj@bogon:/usr/local/mysql/bin$ mysql -uroot
Willkommen beim MySQL-Monitor. Befehle enden mit ; ​​oder \g.
Ihre MySQL-Verbindungs-ID ist 3
Serverversion: 5.7.18-log Quellverteilung

Copyright (c) 2000, 2017, Oracle und/oder Tochtergesellschaften. Alle Rechte vorbehalten.

Oracle ist eine eingetragene Marke der Oracle Corporation und/oder ihrer
Tochtergesellschaften. Andere Namen können Marken ihrer jeweiligen
Eigentümer.

Geben Sie „help;“ oder „\h“ ein, um Hilfe zu erhalten. Geben Sie „\c“ ein, um die aktuelle Eingabeanweisung zu löschen.

MySQL [(keine)]> Passwort festlegen = Passwort('123456');
FEHLER 1290 (HY000): Der MySQL-Server läuft mit der Option --skip-grant-tables und kann diese Anweisung daher nicht ausführen.
MySQL [(keine)]> mysql verwenden
Datenbank geändert
MySQL [mysql]> Benutzer aktualisieren, Authentication_string=Passwort('123456') wobei user="root" und host="localhost";
Abfrage OK, 1 Zeile betroffen, 1 Warnung (0,02 Sek.)
Übereinstimmende Zeilen: 1 Geändert: 1 Warnungen: 1

MySQL [mysql]> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

MySQL [mysql]> beenden;
Tschüss

****************************************************************

zj@bogon:/usr/local/mysql/bin$ mysql -uroot -p123456
mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein.
Willkommen beim MySQL-Monitor. Befehle enden mit ; ​​oder \g.
Ihre MySQL-Verbindungs-ID ist 7
Serverversion: 5.7.18-log Quellverteilung

Copyright (c) 2000, 2017, Oracle und/oder Tochtergesellschaften. Alle Rechte vorbehalten.

Oracle ist eine eingetragene Marke der Oracle Corporation und/oder ihrer
Tochtergesellschaften. Andere Namen können Marken ihrer jeweiligen
Eigentümer.

Geben Sie „help;“ oder „\h“ ein, um Hilfe zu erhalten. Geben Sie „\c“ ein, um die aktuelle Eingabeanweisung zu löschen.

MySQL [(keine)]>

Da zum Starten des Systems die Option --skip-grant-tables verwendet wurde, konnte das Passwort nicht mit dem Befehl „set password“ geändert werden. Das Passwort wurde erfolgreich geändert, nachdem das Feld authentication_string der Benutzertabelle direkt aktualisiert wurde (die getestete Version ist 5.7.18, und das Passwortfeld in einigen Versionen ist „password“). Aktualisieren Sie die Berechtigungstabelle, um die Berechtigungsauthentifizierung wieder wirksam zu machen. Wenn Sie sich erneut als Root anmelden, können Sie das gerade geänderte Passwort verwenden.

2. Umgang mit Tabellenbeschädigungen in der MyISAM-Speicher-Engine

Manchmal kann es vorkommen, dass die Myisam-Tabelle beschädigt ist. Symptome einer beschädigten Tabelle sind in der Regel Abfragen, die unerwartet beendet werden und Fehler wie die folgenden anzeigen:

  • „table_name.frm“ ist gesperrt und kann nicht geändert werden
  • Datei „tbl_name.MYYI“ kann nicht gefunden werden (Fehlercode: nnn)
  • Unerwartetes Dateiende
  • Die Protokolldatei ist beschädigt
  • Vom Tabellenprozessor ist der Fehler nnn aufgetreten.

Normalerweise gibt es zwei Lösungen:

1. Verwenden Sie das Tool myisamchk

Verwenden Sie das mit MySQL mitgelieferte Tool myisamchk zur Reparatur von:

shell> myisamchk -r Tabellenname

Der Parameter -r bedeutet Wiederherstellen. Die obige Methode kann fast alle Probleme lösen. Wenn es nicht funktioniert, verwenden Sie den Befehl:

shell> mysiamchk -o Tabellenname

Der Parameter -o bedeutet --safe-recover, was eine sicherere Wiederherstellung ermöglicht.

2. Verwenden Sie den SQL-Befehl

Verwenden Sie die MySQL-Befehle „check table“ und „repair table“ zusammen, um Reparaturen durchzuführen. „check table“ wird verwendet, um zu prüfen, ob die Tabelle beschädigt ist; „repair table“ wird verwendet, um beschädigte Tabellen zu reparieren.

3. Nicht genügend Speicherplatz im Datenverzeichnis

Nach dem Start des Systems wird mit der kontinuierlichen Zunahme der Datenmenge festgestellt, dass der verfügbare Speicherplatz im Datenverzeichnis immer kleiner wird, was ein Sicherheitsrisiko für die Anwendung darstellt.

1. Für Tabellen, die die MyISAM-Speicher-Engine verwenden

Für Tabellen, die die Speicher-Engine MyISAM verwenden, können Sie mit den folgenden Optionen festlegen, dass das Datenverzeichnis und das Indexverzeichnis beim Erstellen der Tabelle in unterschiedlichen Speicherplatzbereichen gespeichert werden. Standardmäßig werden beide im Datenverzeichnis gespeichert:

Datenverzeichnis = 'absoluter Pfad zum Verzeichnis'
Indexverzeichnis = 'absoluter Pfad zum Verzeichnis'

Wenn die Tabelle erstellt wurde, können Sie die Tabelle nur herunterfahren oder sperren, um Änderungen an der Tabelle zu verhindern. Anschließend können Sie die Datendateien und Indexdateien der Tabelle per MV auf eine Partition mit ausreichend Speicherplatz verschieben und anschließend symbolische Links zu den Originaldateien erstellen.

2. Für Tabellen, die die InnoDB-Speicher-Engine verwenden

Da Datendateien und Indexdateien zusammen gespeichert werden, können sie nicht getrennt werden. Wenn der Speicherplatz nicht ausreicht, können Sie eine neue Datendatei hinzufügen, die auf einer Festplatte mit ausreichend Speicherplatz abgelegt wird.

Die spezifische Implementierungsmethode besteht darin, diese Datei im Parameter innodb_data_file_path hinzuzufügen und den Pfad als absoluten Pfad der neuen Festplatte zu schreiben.

Wenn beispielsweise in /home nicht genügend Speicherplatz vorhanden ist und Sie in /home1 eine neue Datei hinzufügen möchten, die Daten automatisch erweitern kann, können die Parameter wie folgt geschrieben werden:

innodb_data_file_path = /home/ibdata1:2000M;/home1/ibdata2:2000M:autoextend

Nachdem die Parameter geändert wurden, muss die Datenbank neu gestartet werden, damit die Änderungen wirksam werden.

4. Problem der umgekehrten DNS-Auflösung (Versionen nach 5.0 überspringen standardmäßig die umgekehrte Domänennamenauflösung)

Wenn Sie den Befehl „show processlist“ auf dem Client ausführen, werden manchmal viele Prozesse angezeigt, ähnlich den folgenden:

nicht authentifizierter Benutzer | 192.168.10.10:55644 | null | verbinden | null | anmelden | null

Diese Prozesse häufen sich immer mehr an und verschwinden nicht mehr. Die Anwendung kann nicht mehr normal reagieren, was zu einem Systemabsturz führt.

Standardmäßig führt MySQL eine umgekehrte Domänennamenauflösung für remote verbundene IP-Adressen durch. Wenn in der Hosts-Datei des Systems kein entsprechender Domänenname vorhanden ist, betrachtet MySQL die Verbindung als ungültigen Benutzer, sodass im nächsten Prozess ein nicht authentifizierter Benutzer angezeigt wird und der Prozess blockiert wird.

Die Lösung ist ganz einfach. Fügen Sie beim Starten von MySQL die Option --skip-name-resolve hinzu. MySQL überspringt dann den Domänennamenauflösungsprozess und vermeidet so die oben genannten Probleme.

5. So stellen Sie eine Verbindung zur Datenbank her, nachdem mysql.sock verloren gegangen ist

Beim Herstellen einer Verbindung mit einer Datenbank auf dem lokalen MySQL-Server tritt häufig das Problem auf, dass mysql.sock nicht vorhanden ist, was zu einem Verbindungsfehler führt. Dies liegt daran, dass mysqladmin standardmäßig eine Unix-Socket-Dateiverbindung anstelle von TCP/IP verwendet, wenn Sie localhost als Hostnamen angeben. Diese Socket-Datei (normalerweise mysql.sock genannt) wird häufig aus verschiedenen Gründen gelöscht. Der Benutzer kann das Verbindungsprotokoll explizit über die Option --protocol=TCP|SOCKET|PIPE|MEMORY angeben. Das folgende Beispiel zeigt, wie nach einer fehlgeschlagenen Unix-Socket-Verbindung eine erfolgreiche Verbindung mit dem TCP-Protokoll hergestellt werden kann.

1. Unix-Socket-Verbindung:

zj@bogon:~$ mysql
FEHLER 2002 (HY000): Verbindung zum lokalen MySQL-Server über Socket '/tmp/mysql.sock' nicht möglich (2)

2. TCP-Verbindung

zj@bogon:~$ mysql --protocol=TCP

6. Die MyISAM-Tabelle ist zu groß und kann nicht aufgerufen werden

Zunächst können wir den Befehl myisamchk verwenden, um den Status der MyISAM-Tabelle anzuzeigen. Wie unten gezeigt, überprüfe ich die Admin-Tabelle


  • datefile length repräsentiert die aktuelle Dateigröße
  • Die Länge der Schlüsseldatei stellt die Größe der Indexdatei dar
  • Max. Länge der Datumsdatei Maximale Dateigröße
  • Maximale Schlüsseldateilänge Maximale Indexgröße

Mit dem folgenden Befehl können Sie die Datendateigröße erweitern

Tabelle ändern Tabellenname MAX_ROWS=88888888 AVG_ROW_LE=66666

7. Nicht genügend Speicherplatz im Datenverzeichnis

Für die MyISAM-Speicher-Engine

Das Datenverzeichnis und das Indexverzeichnis können auf unterschiedlichen Datenträgern gespeichert werden.

Für die InnoDB-Speicher-Engine

Bei Tabellen, die die Speicher-Engine InnoDB verwenden, werden Datendateien und Indexdateien zusammen gespeichert. Es ist daher unmöglich, sie zu trennen. Wenn der Speicherplatz nicht ausreicht, können Sie eine neue Datendatei hinzufügen und auf einer Festplatte mit ausreichend Speicherplatz platzieren. Die spezifische Implementierung besteht darin, diese Datei in InnoDB_data_file_path hinzuzufügen.

innodb_data_file_path=/home/mysql/data:10000M;/Benutzer/mysql/data:10000M:autoextend

Nachdem die Parameter geändert wurden, müssen Sie den Server neu starten, damit die Änderungen wirksam werden.

8. Installieren Sie mehrere Mysql auf demselben Host

Zusätzlich dazu, dass jedes MySQL-Installationsverzeichnis unterschiedlich sein muss, müssen auch Port und Socket unterschiedlich sein.

mysql.sock wird vom Client zur Kommunikation mit MySQL verwendet. Die Socket-Datei kann nur lokal verwendet werden und Remote-Verbindungen müssen über TCP/IP hergestellt werden.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Allgemeine Download-, Installations- und Konfigurationsmethoden und einfache Bedienungskenntnisse für MySQL 5.7.20 (kostenlose Installation der Dekomprimierungsversion)
  • So verwenden Sie Java Web zum Herstellen einer Verbindung zur MySQL-Datenbank
  • So verwenden Sie tcpdump zum Erfassen von Paketen für MySQL
  • Detaillierte Erläuterung von 30 SQL-Abfrageoptimierungstechniken für MySQL-Zehnmillionen großer Datenmengen
  • Mysql-Optimierungstechniken zum Abfragen von Daten basierend auf der Zeit
  • 10 SQL-Anweisungsoptimierungstechniken zur Verbesserung der MySQL-Abfrageeffizienz
  • MySQL-Techniken zum schnellen Datenvergleich
  • 5 Tipps zum Schutz Ihres MySQL Data Warehouse
  • Teilen Sie 101 MySQL-Debugging- und Optimierungstipps
  • Tipps zur MySql-SQL-Optimierung teilen
  • Zusammenfassung der MySQL-Injection-Bypass-Filtertechniken
  • Zusammenfassung der allgemeinen Bedienungskenntnisse der MySQL-Datenbank

<<:  So implementieren Sie das Prototypmuster in JavaScript

>>:  So installieren Sie die PHP7 Redis-Erweiterung auf CentOS7

Artikel empfehlen

Lokale MySQL-Installation und Problemlösung

Vorwort Dieser Artikel ist ziemlich ausführlich u...

Linux CentOS6.5 yum installiere mysql5.6

In diesem Artikel wird der einfache Prozess der I...

Importieren von CSS-Dateien unter Verwendung von Beurteilungsbedingungen

Lösung 1: Verwenden Sie bedingten Import im HTML-...

MySQL-Import- und Export-Sicherungsdetails

Inhaltsverzeichnis 1. Detaillierte Erklärung der ...

Detaillierte Erklärung, wie Zabbix den Master-Slave-Status von MySQL überwacht

Nach dem Einrichten des MySQL-Master-Slaves wisse...

Eine Codezeile zeigt Ihnen, wie Sie Linux-Prozesse verbergen

Freunde fragen mich immer, wie man Linux-Prozesse...

MySQL-Inspektionsskript (unbedingt lesen)

Wie unten dargestellt: #!/usr/bin/env python3.5 p...

Vue macht Div-Höhe verschiebbar

In diesem Artikel wird der spezifische Code von V...

Detaillierte Erklärung zum Aktivieren des https-Dienstes in Apache unter Linux

Dieser Artikel beschreibt, wie man den https-Dien...