Maison  >  Article  >  base de données  >  Que dois-je faire si le programme ne parvient pas à se connecter à MySQL ?

Que dois-je faire si le programme ne parvient pas à se connecter à MySQL ?

藏色散人
藏色散人original
2020-11-04 10:32:205516parcourir

Solution au problème selon lequel le programme ne peut pas se connecter à MySQL : 1. Déterminez si le service MySQL est normal et recherchez le fonctionnement et la maintenance pour confirmer le problème de réseau. 2. Augmentez la valeur "max_allowed_packet" ; . Augmentez la valeur "net_read_timeout" ;4. Augmentez la valeur "connect_timeout", etc.

Que dois-je faire si le programme ne parvient pas à se connecter à MySQL ?

Recommandé : "Tutoriel vidéo MySQL"

Résumé des problèmes lorsque le programme ne parvient pas à se connecter à MySQL

Lorsque vous ne parvenez pas à vous connecter à MySQL, il existe généralement quatre types de rapports d'erreur :

1:Can't connect to MySQL server
2:Lost connection to MySQL server
3:Sorry, due to line fault, temporarily unable to browse, we are dealing with.
4:MySQL server has gone away

Un : Impossible de se connecter au serveur MySQL

Raisons possibles :

1, le serveur mysql n'est pas démarré

2, le réseau est bloqué (iptables, selinux, instabilité réseau)

Solution correspondante :

1 , DBA confirme d'abord Le service MySQL est-il normal ?

2 Si le service MySQL est normal, contactez l'exploitation et la maintenance pour confirmer le problème de réseau

2 : Connexion perdue au serveur MySQL

.

Quatre situations peuvent provoquer ce type de rapports d'erreur :

1, problème de réseau

2, l'ensemble de résultats de la requête est trop volumineux, par exemple, une requête renvoie des millions des résultats

3, initiés par le client Lors de la connexion à la base de données, une erreur est signalée car le temps de paramétrage de connect_timeout est trop court. Si l'erreur est signalée pour cette raison, vous pouvez vérifier si la valeur a. augmenté via SHOW GLOBAL STATUS LIKE 'Aborted_connects'

4. La requête a un type blob supérieur à La limite du paramètre max_allowed_packet a été supprimée

Les solutions correspondantes pour ces quatre situations :

1. Le fonctionnement et la maintenance surveillent s'il y a des problèmes avec le réseau

2 Augmentez la valeur net_read_timeout

3, augmentez la valeur connect_timeout

4, augmentez la valeur max_allowed_packet

Trois : Désolé, en raison d'un défaut de ligne, nous ne pouvons temporairement pas naviguer, nous avons affaire à cela.

Cette erreur n'est pas une erreur MySQL native et aucune information similaire n'a été trouvé sur Internet. Actuellement, il existe trois situations dans lesquelles cette erreur se produit :

1 Il y a un problème avec le réseau

2. 3. Le compte et le mot de passe de la base de données sont incorrects

Quatre : le serveur MySQL a disparu

Les 12 situations suivantes peuvent provoquer un tel rapport d'erreur :

1, la valeur wait_timeout par défaut est de 8 heures, si la connexion inactive dépasse cette valeur, elle sera supprimée

2, dba manuel kill

3, client Le compte client n'a pas l'autorisation de se connecter au serveur mysql

4. La connexion TCP/IP du client expire, par exemple en utilisant mysql_options(..., MYSQL_OPT_READ_TIMEOUT,...) ou mysql_options(..., MYSQL_OPT_WRITE_TIMEOUT,...) Fonction

5, lorsque le client désactive la reconnexion automatique (reconnexion automatique)

6, l'instruction de requête est incorrecte

7, l'instruction de requête est trop longue, dépassant les limitations de max_allowed_packet

8, une instruction d'insertion ou de remplacement met à jour trop de lignes

9, la résolution du nom de domaine échoue

10, le pare-feu bloque le port 3306

11. Un thread bifurque plusieurs processus enfants. Lorsque plusieurs processus enfants partagent une connexion, une erreur sera signalée

12. Le serveur MySQL se bloque

La comparaison des raisons d'erreur du serveur MySQL a disparu Beaucoup, nous pouvons résoudre ce problème sous trois aspects :

1. Fonctionnement et maintenance

a. Confirmez les règles du pare-feu

b. Il n'y a aucune anomalie dans le serveur DNS

d. , configurez raisonnablement les paramètres de connexion à mysql dans php.ini

connect_timeout, la valeur par défaut est 60s

mysqli.reconnect, la valeur par défaut est off

2, DBA

a, assurez-vous qu'il n'y a pas d'anomalies dans le service mysql et le nombre de connexions

b, définissez une valeur wait_timeout raisonnable

c, définissez une valeur max_allowed_packet raisonnable côté serveur

d, Confirmez que les autorisations du compte sont correctes

3, développement

a, il est recommandé d'utiliser mysqli au lieu de mysql

b, essayez pour utiliser le moins de connexions longues possible

c, mysqli.ping () peut se reconnecter automatiquement après la déconnexion de la connexion. mysql.ping() ne prend pas en charge la reconnexion automatique depuis mysql5.0.3

d. Ne partagez pas de connexion à une base de données entre les processus enfants

En prenant gamiss comme exemple, jetons un coup d'œil aux paramètres liés à max_allowed_packet et au timeout :

>show variables like 'max_allowed_packet';
+--------------------+------------+
| Variable_name | Value |
+--------------------+------------+
| max_allowed_packet | 1073741824 |
+--------------------+------------+
>show variables like '%timeout%';
+-----------------------------+----------+
| Variable_name | Value |
+-----------------------------+----------+
| connect_timeout | 60 |
| delayed_insert_timeout | 300 |
| have_statement_timeout | YES |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 120 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 86400 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 120 |
| net_write_timeout | 120 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 3600 |
| thread_pool_idle_timeout | 60 |
| wait_timeout | 86400 |
+-----------------------------+----------+

Jetons un coup d'œil à ces timeout. paramètres liés à l'impossibilité de se connecter à la base de données :

connect_timeout : in Lors de l'obtention d'un lien, le délai d'attente pour la poignée de main est généralement de 10 s par défaut afin d'éviter la congestion de la connexion due à un mauvais réseau. la valeur peut être augmentée de manière appropriée. La configuration en ligne est de 60 s

wait_timeout/interactive_timeout: connection Le délai d'attente pour que l'état reste en veille, la valeur par défaut est de 28 800 (8 heures), maintenant ajusté à 24 heures

net_read_timeout : le délai d'attente du serveur pour attendre que le client envoie des données, la valeur par défaut est de 60 s, en ligne est de 120 s

net_write_timeout : le délai d'attente pour que le serveur écrive des données au client, la valeur par défaut est de 60 s , et il est 120s en ligne

Regardez à nouveau le paramètre max_allowed_packet : la valeur par défaut de max_allowed_packet est 1M (1048576), et la valeur maximale est 1G ( 1073741824), notre valeur en ligne actuelle est déjà la limite supérieure.

D'après la configuration ci-dessus, nous pouvons voir que les paramètres de ces paramètres sont relativement importants. Dans des circonstances normales, la base de données ne devrait pas être connectée à la configuration des paramètres de la base de données elle-même. Nous devons résoudre ce problème dans d’autres directions.

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