Heim  >  Artikel  >  Datenbank  >  Häufige MySQL-Probleme und Lösungen

Häufige MySQL-Probleme und Lösungen

小云云
小云云Original
2017-11-21 09:43:102550Durchsuche

Als Programmierer werden wir definitiv MySQL verwenden, und es ist sehr wichtig. Manchmal treten jedoch bei der Arbeit zwangsläufig einige Probleme in der MySQL-Datenbank auf. Wie gehen wir also damit um? Lassen Sie uns über einige häufige MySQL-Probleme und Lösungen sprechen, denen wir bei unserer täglichen Arbeit begegnen.

1. MySQL-Root-Passwort vergessen

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

(1) Melden Sie sich bei dem 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, in der die Prozessnummer des MySQL-Dienstes aufgezeichnet wird.

(2) Verwenden Sie die Option --skip-grant-tables, um den MySQL-Dienst neu zu starten:

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

--skip-grant-tables“ bedeutet, die Berechtigungstabellenauthentifizierung beim Starten des MySQL-Dienstes zu überspringen. Nach dem Start benötigt Root kein Passwort, um eine Verbindung zu MySQL herzustellen.

(3) Stellen Sie mit dem Root-Benutzer mit einem leeren Passwort eine Verbindung zu MySQL her und ändern Sie das Root-Passwort:

zj@bogon:/usr/local/mysql/bin$ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3Server version: 5.7.18-log Source distribution
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> set password = password('123456');
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statementMySQL [(none)]> use mysql
Database changed
MySQL [mysql]> update user set authentication_string=password('123456') where user="root" and host="localhost";
Query OK, 1 row affected, 1 warning (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 1MySQL [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MySQL [mysql]> exit;
Bye
****************************************************************
zj@bogon:/usr/local/mysql/bin$ mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7Server version: 5.7.18-log Source distribution
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>

Da die Option --skip-grant-tables zum Starten verwendet wird , verwenden Sie „Passwort festlegen“ Der Befehl zum Ändern des Passworts ist fehlgeschlagen. Nach der direkten Aktualisierung des Felds „authentication_string“ der Benutzertabelle (die Testversion ist 5.7.18, das Passwortfeld einiger Versionen lautet „Passwort“) wurde das Passwort erfolgreich geändert . Aktualisieren Sie die Berechtigungstabelle, um die Berechtigungsauthentifizierung erneut zu validieren. Wenn Sie sich erneut als Root anmelden, können Sie das gerade geänderte Passwort verwenden.

2. So gehen Sie mit Tabellenbeschädigungen in der Myisam-Speicher-Engine um

Manchmal kann es in Myisam zu Tabellenbeschädigungen kommen. Symptome einer beschädigten Tabelle sind normalerweise, dass Abfragen unerwartet unterbrochen werden und die folgenden Fehler angezeigt werden:

'table_name.frm' ist für Änderungen gesperrt

Datei 'tbl_name.MYYI' kann nicht gefunden werden (Fehlercode : nnn)

Unerwartetes Ende der Datei

Datensatzdatei beschädigt

Fehler nnn vom Tabellenprozessor wird angezeigt.

Normalerweise gibt es zwei Lösungen:

1. Verwenden Sie das myisamchk-Tool

Verwenden Sie zum Reparieren das myisamchk-Tool, das mit MySQL geliefert wird:

Shell> -r Tabellenname

Die Bedeutung des Parameters -r ist „Recover“. Wenn nicht, verwenden Sie den Befehl:

Shell>

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

2. Verwenden Sie den SQL-Befehl

Verwenden Sie die MySQL-Befehle „check table“ und „repair table“, um zu überprüfen, ob die Tabelle beschädigt ist Tisch.

3. Das Problem des unzureichenden Speicherplatzes im Datenverzeichnis

Nachdem das System online gegangen ist und die Datenmenge weiter zunimmt, werden Sie feststellen, dass die Der verfügbare Speicherplatz im Datenverzeichnis wird immer kleiner, was zu Sicherheitsrisiken für die Anwendung führt.

1. Für die Tabellen der Myisam-Speicher-Engine

Für die Tabellen der Myisam-Speicher-Engine können Sie beim Erstellen der Tabelle die folgenden Optionen verwenden, um das Datenverzeichnis und das Indexverzeichnis separat anzugeben auf verschiedenen Festplattenplätzen gespeichert werden und standardmäßig gleichzeitig im Datenverzeichnis abgelegt werden:

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

Wenn die Tabelle erstellt wurde, können Sie die Tabelle nur anhalten oder sperren, um Tabellenänderungen zu verhindern, dann die Datendateien und Indexdateien der Tabelle auf eine ausreichende Partition auf der Festplatte verschieben und dann eine symbolische Datei erstellen Link in der Originaldatei.

2. Für Tabellen der Innodb-Speicher-Engine

Da die Datendateien und Indexdateien zusammen gespeichert werden, können sie nicht getrennt werden. Wenn der Speicherplatz nicht ausreicht, kann eine neue Datendatei hinzugefügt und auf einem Datenträger mit ausreichend Speicherplatz abgelegt werden.
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 unter /home nicht genügend Platz vorhanden ist und Sie unter /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 der Parameter geändert wurde, muss die Datenbank neu gestartet werden, damit er wirksam wird.

4. Probleme mit der umgekehrten DNS-Auflösung (Versionen nach 5.0 überspringen standardmäßig die umgekehrte Auflösung von Domänennamen)

Führen Sie den Befehl show Processlist auf dem Client aus, manchmal häufig Es treten Probleme auf, ähnlich wie bei:

nicht authentifizierter Benutzer |. null |. Diese Prozesse werden immer häufiger auftreten wird nicht verschwinden und die Anwendung kann nicht normal reagieren, was zu einer Systemlähmung führt.

Standardmäßig führt MySQL eine umgekehrte Auflösung des Domänennamens für die IP-Adresse der Remote-Verbindung durch. Wenn in der Hosts-Datei des Systems kein entsprechender Domänenname vorhanden ist, betrachtet MySQL die Verbindung als ungültigen Benutzer. Daher erscheint im nächsten Prozess ein nicht authentifizierter Benutzer und führt zur Blockierung des Prozesses.

Die Lösung ist sehr einfach. Fügen Sie beim Start die Option --skip-name-resolve hinzu, dann kann MySQL den Prozess der Domänennamenauflösung überspringen und die oben genannten Probleme vermeiden.

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

Beim Herstellen einer Verbindung zur Datenbank auf dem MySQL-Server selbst scheint es oft, dass mysql.sock existiert nicht, was dazu führt, dass die Verbindung fehlschlägt. 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 mit dem Namen mysql.sock) wird aus verschiedenen Gründen häufig gelöscht. Über die Option --protocol=TCP|SOCKET|PIPE|MEMORY kann der Benutzer das Verbindungsprotokoll explizit angeben. Das Folgende zeigt eine erfolgreiche Verbindung mit dem TCP-Protokoll nach einem Unix-Socket-Fehler.

1. Unix-Socket-Verbindung:

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

2. TCP-Verbindung

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

dieser Artikel teilt fünf Probleme und Lösungen, auf die MySQL stoßen kann. Wenn Sie es nützlich finden, speichern Sie es bitte.

Verwandte Empfehlungen:

Wie richtet man die sicherste MySQL-Datenbank ein?

Indexmethode der MySQL-Datentabelle anzeigen

Fragen zu MySQL-Triggern

Das obige ist der detaillierte Inhalt vonHäufige MySQL-Probleme und Lösungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn