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:
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
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:
|
<<: So implementieren Sie das Prototypmuster in JavaScript
>>: So installieren Sie die PHP7 Redis-Erweiterung auf CentOS7
Verwenden Sie den Linux-Befehl chmod , um zu steu...
Vorwort Dieser Artikel ist ziemlich ausführlich u...
In diesem Artikel wird der einfache Prozess der I...
Bei der Verwendung von lepus3.7 zur Überwachung d...
Überprüfen Sie, ob Ihr CUDA installiert ist Geben...
Vorwort add_header ist eine Direktive, die im Hea...
Lösung 1: Verwenden Sie bedingten Import im HTML-...
Inhaltsverzeichnis 1. Detaillierte Erklärung der ...
Nach dem Einrichten des MySQL-Master-Slaves wisse...
Da ich MySQL schon so lange verwende, glaube ich,...
Freunde fragen mich immer, wie man Linux-Prozesse...
Wie unten dargestellt: #!/usr/bin/env python3.5 p...
In diesem Artikel wird der spezifische Code von V...
Dieser Artikel beschreibt, wie man den https-Dien...
Zeigen Sie je nach Benutzerberechtigung unterschi...