Maison >base de données >tutoriel mysql >Problèmes et solutions MySQL courants

Problèmes et solutions MySQL courants

小云云
小云云original
2017-11-21 09:43:102594parcourir

En tant que programmeurs, MySQL est certainement quelque chose que nous utiliserons, et c'est très important. Cependant, parfois certains problèmes surviendront inévitablement dans la base de données MySQL au travail, alors comment les gérer ? Parlons de quelques problèmes et solutions MySQL courants que nous rencontrons dans notre travail quotidien.

1. Mot de passe root MySQL oublié

1. Connectez-vous au serveur sur lequel se trouve la base de données et manuellement. tuer le processus MySQL.

(1) Connectez-vous au serveur sur lequel se trouve la base de données et tuez manuellement le processus MySQL :

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

Parmi eux, mysql.pid fait référence au fichier pid dans le répertoire de données MySQL, qui enregistre le numéro de processus du service MySQL.

(2) Utilisez l'option --skip-grant-tables pour redémarrer le service MySQL :

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

--skip-grant-tables signifie ignorer l'authentification par table d'autorisations lors du démarrage du service MySQL. Une fois démarré, root n'aura pas besoin de mot de passe pour se connecter à MySQL.

(3) Connectez-vous à mysql avec l'utilisateur root avec un mot de passe vide, et changez le mot de passe root :

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)]>

Puisque l'option --skip-grant-tables est utilisée pour démarrer , utilisez "set password "La commande pour changer le mot de passe a échoué. Après avoir directement mis à jour le champuthentication_string de la table user (la version de test est 5.7.18, le champ de mot de passe de certaines versions est 'mot de passe'), le mot de passe a été modifié avec succès. . Actualisez le tableau des autorisations pour revalider l'authentification des autorisations. Lorsque vous vous reconnecterez en tant que root, vous pourrez utiliser le mot de passe que vous venez de modifier.

2. Comment gérer la corruption de table dans le moteur de stockage myisam

Parfois, vous pouvez rencontrer une corruption de table dans myisam. Les symptômes d'une table corrompue sont généralement que les requêtes sont interrompues de manière inattendue et que les erreurs suivantes apparaissent :

'table_name.frm' est verrouillé pour les modifications

Impossible de trouver le fichier 'tbl_name.MYYI' (errcode : nnn)

Fin inattendue du fichier

Fichier d'enregistrement corrompu

Obtention de l'erreur nnn du processeur de table.

Habituellement, il existe deux solutions :

1. Utilisez l'outil myisamchk

Utilisez l'outil myisamchk fourni avec MySQL pour réparer :

shell> -r tablename

La signification du paramètre -r est recovery La méthode ci-dessus peut résoudre presque tous les problèmes. Sinon, utilisez la commande :

shell>

Le paramètre -o signifie --safe-recover, ce qui permet une réparation plus sûre.

2. Utilisez la commande sql

Utilisez les commandes check table et repair table de MySQL pour réparer ensemble. check table est utilisé pour vérifier si la table de réparation est utilisée pour réparer le mauvais ; tableau.

3. Le problème de l'espace disque insuffisant dans le répertoire de données

Une fois le système mis en ligne, à mesure que la quantité de données continue d'augmenter, vous constaterez que le L'espace disponible dans le répertoire de données devient de plus en plus petit, entraînant ainsi des risques de sécurité pour l'application.

1. Pour les tables du moteur de stockage myisam

Pour les tables du moteur de stockage myisam, vous pouvez utiliser les options suivantes lors de la création de la table pour spécifier séparément le répertoire de données et le répertoire d'index. à stocker dans différents espaces disque, et Par défaut, il sera placé dans le répertoire de données en même temps :

data directory = 'chemin absolu vers le répertoire'index directory = 'chemin absolu vers le répertoire'

Si la table a été créée, vous pouvez uniquement arrêter ou verrouiller la table pour empêcher les modifications de la table, puis déplacer les fichiers de données et les fichiers d'index de la table sur une partition suffisante du disque, puis créer un fichier symbolique. lien dans le fichier d'origine.

2. Pour les tables du moteur de stockage innodb

Étant donné que les fichiers de données et les fichiers d'index sont stockés ensemble, ils ne peuvent pas être séparés. Lorsque l'espace disque est insuffisant, un nouveau fichier de données peut être ajouté et placé sur un disque disposant de suffisamment d'espace.
La méthode d'implémentation spécifique consiste à ajouter ce fichier dans le paramètre innodb_data_file_path, et le chemin est écrit comme le chemin absolu du nouveau disque.
Par exemple, s'il n'y a pas suffisamment d'espace sous /home et que vous souhaitez ajouter un nouveau fichier sous /home1 qui peut automatiquement développer les données, alors les paramètres peuvent être écrits comme ceci :

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

Une fois le paramètre modifié, la base de données doit être redémarrée pour qu'elle prenne effet.

4. Problèmes avec la résolution inverse DNS (les versions après 5.0 ignorent la résolution inverse du nom de domaine par défaut)

Exécutez la commande show processlist sur le client, parfois beaucoup de des problèmes apparaîtront Processus, similaires à :

utilisateur non authentifié | 192.168.10.10:55644 | null | connect null | login | ne disparaîtra pas et l'application ne pourra pas répondre normalement, ce qui entraînera une paralysie du système.

Par défaut, MySQL effectuera une résolution inverse du nom de domaine pour l'adresse IP de la connexion distante. S'il n'y a pas de nom de domaine correspondant dans le fichier hosts du système, MySQL considérera la connexion comme un utilisateur invalide, Ainsi, un utilisateur non authentifié apparaît dans le processus suivant et provoque le blocage du processus.

La solution est très simple. Ajoutez l'option --skip-name-resolve lors du démarrage, MySQL peut alors ignorer le processus de résolution du nom de domaine et éviter les problèmes ci-dessus.

5. Comment se connecter à la base de données après la perte de mysql.sock

Lors de la connexion à la base de données sur le serveur MySQL lui-même, il apparaît souvent que mysql.sock n'existe pas, ce qui entraîne un problème de connexion. En effet, si vous spécifiez localhost comme nom d'hôte, mysqladmin utilise par défaut une connexion de fichier socket Unix au lieu de tcp/ip. Ce fichier socket (généralement nommé mysql.sock) est souvent supprimé pour diverses raisons. Grâce à l'option --protocol=TCP|SOCKET|PIPE|MEMORY, l'utilisateur peut spécifier explicitement le protocole de connexion. Ce qui suit montre une connexion réussie à l'aide du protocole TCP après un échec de socket Unix.

1. Connexion socket Unix :

zj@bogon:~$ mysqlERROR 2002 (HY000) : Impossible de se connecter au serveur MySQL local via le socket '/tmp/mysql.sock' (2 )

2. connexion TCP

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

cet article partage cinq problèmes et solutions que MySQL peut rencontrer. J'espère que cela pourra aider tout le monde. Si vous le trouvez utile, veuillez le récupérer rapidement.

Recommandations associées :

Comment configurer la base de données MySQL la plus sécurisée ?

Afficher la méthode d'indexation de la table de données MySQL

Questions sur les déclencheurs MySQL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn