Sophocle
08/06/2003, 00h22
Ce sujet de discussion porte sur la résolution des problèmes liés à la base de données, qu'il s'agisse de l'impossibilité de s'y connecter aux problèmes d'import / export.
Comme des sujets ont déjà été ouverts sur la plupart de ces thèmes, je me contenterai de lister les problèmes, d'apporter une réponse brève et de renvoyer aux discussions idoines pour les explications.
La plupart des questions abordées concernent des erreurs MySQL. Fort heureusement, vBB génère un rapport d'erreur qui permet de circonscrire la cause du problème. Le texte des warnings varie suivant la cause de la difficulté. A chaque fois que c'est possible, je tenterai de mettre le warning et le moyen de remédier au problème.
Préambule - Exécuter des requêtes
Beaucoup d'utilisateurs se demandent comment exécuter une requête. Il existe plusieurs interfaces possibles pour dialoguer avec les bases MySQL.
1. Accès direct
On peut tout d'abord passer directement par le logiciel, MySQL et lancer les lignes de commandes. Pour cela, il faut disposer d'un accès au serveur (Telnet, SSH). C'est peu pratique mais ça permet d'exécuter des opérations volumineuses sans problème.
2. Par PHP MyAdmin
La plupart des serveurs disposent d'un accès par PHP MyAdmin. Les manières d'utiliser ce service vous sont indiquées par l'hébergeur. PHP MyAdmin propose une interface très complète afin d'effectuer des requêtes de toute nature sur les bases de données. A compléter
3. Par un fichier PHP
PHP MyAdmin n'est rien d'autre qu'un logiciel programmé en PHP. On peut très bien envisager de créer un fichier pour exécuter une requête en imitant ce système. Vous trouverez en pièce jointe un fichier permettant d'exécuter une requête sans besoin d'accès à PHP MyAdmin ou au serveur. Les instructions se trouvent dans le fichier lisezmoi.txt.
I. - MySQL Connection Failed - Connexion à la base MySQL impossible
Il s'agit d'une erreur courante. Elle peut avoir trois origines.
1. Erreur dans le fichier ./admin/config.php
C'est dans ce fichier que vous déterminez les paramètres de connexion du logiciel à la base de données. Les paramètres qui peuvent comporter des erreurs sont les suivants :
$dbservertype="mysql";
$servername="localhost";
$dbusername="Nom d'utilisateur MySQL";
$dbpassword="Mot de passe";
$dbname="Nom de la base";
En principe, $dbservertype doit toujours être mysql.
Les autres informations doivent vous être fournies par votre hébergeur.
Voici les messages que l'on peut obtenir en cas d'erreur dans le fichier config.php :
- Unknown MySQL Server Host : hôte MySQL inconnu
Il y a un problème dans la variable $servername
- Access denied : accès refusé
Vous avez commis une erreur dans la saisie du nom d'utilisateur ou du mot de passe.
- Rien : peut-être que la base n'existe pas, vérifiez ce dernier paramètre.
Voici un lien pour voir des exemples (http://forum.vbulletin-fr.org/showthread.php?threadid=39) de fichiers config.php pour les hébergeurs mutualisés les plus courants.
2. Le service MySQL a été arrêté
Il arrive que le service MySQL, qu'il soit en local ou sur un autre serveur, soit arrêté. L'hébergeur peut effectuer des opérations de maintenance ou encore vous empêcher de vous connecter au serveur (sans doute avez-vous effectué trop de requêtes ;))
Un message tel que celui-ci apparaît :
Can't connect to local (ou distant) MySQL server through socket...
Dans ce cas, il faut contacter votre hébergeur pour lui demander des explications et savoir s'il compte remettre en route le service.
Si vous êtes sur un serveur dédié, il faut vérifier que MySQL se lance au démarrage avec chkconfig. Le service a pu être interrompu temporairement. Il faut se loguer en root et envoyer l'instruction mysql start (dans le bon répertoire).
3. Vous avez trop de connexions
Le problème se manifestera par un message du type Too many connections in db_mysql.php
Beaucoup d'hébergeurs gratuits ou à faible coût limitent le nombre de connexions simultanées afin d'éviter qu'un utilisateur ne s'accapare les ressources du serveur de base de données. Lorsque de nombreux utilisateurs se connectent sur un forum, il peut arriver que les requêtes simultanées soient trop nombreuses, auquel cas l'erreur se produit.
Tout d'abord, il faut s'assurer que vous n'utilisez pas de connexions permanentes à la base. Le paramètre se trouve dans le fichier config.php :
$usepconnect = 0;
Vous devez trouver cette ligne. Si la variable est fixée sur 1, replacez là à 0.
Avant de voir les hacks, il faut faire la chasse aux requêtes superflues : supprimer tous les services peu utiles, en particulier le popup on PM ou encore l'affichage des anniversaires / des personnes connectées. Vous pouvez aussi carrément supprimer la messagerie privée. Il est conseillé de limiter la page rechercher (pas de recherche avancée) et de bloquer l'accès aux pages who's online (qui est en ligne) et members (membres). Tout se configure dans les options du cp et dans les groupes d'utilisateurs.
Vous pouvez enfin installer le hack de SeDkY (http://forum.vbulletin-fr.org/showthread.php?threadid=2428) qui permet de bourriner sauvagement MySQL en lui envoyant 100 requêtes pour que l'une d'entre elles soit exécutée. Attention, votre hébergeur pourrait ne pas apprécier.
II. - La connexion est établie mais une erreur surgit lors de l'interrogation de la base
Là, le problème peut avoir des origines beaucoup plus variées. Un fichier mal téléchargé, une version pirate, l'installation de plusieurs hacks incompatibles entre eux sont autant de sources possibles de bugs. Il faut apprendre à déchiffrer les requêtes MySQL pour trouver la source de l'erreur.
Néanmoins, voici les erreurs les plus courantes :
1. Table de session pleine
mysql error: table 'session' is full
Cette erreur intervient en raison du type particulier de la table session. C'est une table HEAP, à accès rapide et volatile, exigeant des ressources plus importantes que les tables classiques (MyISAM). Certains hébergeurs limitent l'emploi des tables HEAP. Il faut donc changer le type de la table en effectuant une requête par l'intermédiaire de PHP MyAdmin :
ALTER TABLE session TYPE=MyISAM;
Les explications se trouvent dans la discussion liée.
2. Table endommagée
mysql error: Can't open file: 'thread.MYI'
Des tables volumineuses, anciennes, un redémarrage impromptu, une erreur d'écrite peuvent causer une défaillance et endommager une table. La table endommagée correspond au nom de fichier indiqué dans le message d'erreur (dans l'exemple, la table thread). Les tables peuvent être réparées en exécutant la requête suivante :
REPAIR TABLE `nom_de_la_table'
PHP MyAdmin offre également la possibilité de réparer plusieurs tables directement à partir de la page listant les tables.
III. - Restauration de la base MySQL
Il faut distinguer entre les utilisateurs disposant d'un accès p MySQL via SSH / Telnet et ceux qui ne peuvent passer que par PHP MyAdmin.
1. Utilisateurs avec un accès au shell via SSH ou Telnet
Restaurer une base est très facile. Il faut télécharger le fichier au format .sql dans le répertoire de votre choix. Ensuite, vous devez vous connecter au serveur par le système que vous préférez (de préférence SSH pour des questions de sécurité). Placez-vous dans le répertoire où vous avez uploadé votre sauvegarde.
Exécutez l'instruction suivante :
mysql --user=nom -p nomdelabase < fichier.sql
Remplacez évidemment nom par le nom d'utilisateur mysql, nomdelabase par le nom de la base où importer le fichier sql et fichier correspond au nom du fichier de sauvegarde.
Il faudra saisir votre mot de passe d'utilisateur mysql. Le tour est joué.
2. Sans accès au serveur via Telnet ou SSH
Vous pouvez toujours tester la solution proposée par SeDkY (http://forum.vbulletin-fr.org/showthread.php?threadid=2657#post17589).
Si ça ne fonctionne pas, vous devrez passer par PHP MyAdmin. L'essentiel a été traité dans la FAQ créée par xCheater2. C'est plus lourd car il faut tronçonner sa base en éléments de taille réduite.
Pour un découpage automatisé, voyez l'utilitaire proposé par Eve_Ra.
N'hésitez pas à exposer les problèmes que vous rencontrez avec MySQL à la suite de ce message.
Comme des sujets ont déjà été ouverts sur la plupart de ces thèmes, je me contenterai de lister les problèmes, d'apporter une réponse brève et de renvoyer aux discussions idoines pour les explications.
La plupart des questions abordées concernent des erreurs MySQL. Fort heureusement, vBB génère un rapport d'erreur qui permet de circonscrire la cause du problème. Le texte des warnings varie suivant la cause de la difficulté. A chaque fois que c'est possible, je tenterai de mettre le warning et le moyen de remédier au problème.
Préambule - Exécuter des requêtes
Beaucoup d'utilisateurs se demandent comment exécuter une requête. Il existe plusieurs interfaces possibles pour dialoguer avec les bases MySQL.
1. Accès direct
On peut tout d'abord passer directement par le logiciel, MySQL et lancer les lignes de commandes. Pour cela, il faut disposer d'un accès au serveur (Telnet, SSH). C'est peu pratique mais ça permet d'exécuter des opérations volumineuses sans problème.
2. Par PHP MyAdmin
La plupart des serveurs disposent d'un accès par PHP MyAdmin. Les manières d'utiliser ce service vous sont indiquées par l'hébergeur. PHP MyAdmin propose une interface très complète afin d'effectuer des requêtes de toute nature sur les bases de données. A compléter
3. Par un fichier PHP
PHP MyAdmin n'est rien d'autre qu'un logiciel programmé en PHP. On peut très bien envisager de créer un fichier pour exécuter une requête en imitant ce système. Vous trouverez en pièce jointe un fichier permettant d'exécuter une requête sans besoin d'accès à PHP MyAdmin ou au serveur. Les instructions se trouvent dans le fichier lisezmoi.txt.
I. - MySQL Connection Failed - Connexion à la base MySQL impossible
Il s'agit d'une erreur courante. Elle peut avoir trois origines.
1. Erreur dans le fichier ./admin/config.php
C'est dans ce fichier que vous déterminez les paramètres de connexion du logiciel à la base de données. Les paramètres qui peuvent comporter des erreurs sont les suivants :
$dbservertype="mysql";
$servername="localhost";
$dbusername="Nom d'utilisateur MySQL";
$dbpassword="Mot de passe";
$dbname="Nom de la base";
En principe, $dbservertype doit toujours être mysql.
Les autres informations doivent vous être fournies par votre hébergeur.
Voici les messages que l'on peut obtenir en cas d'erreur dans le fichier config.php :
- Unknown MySQL Server Host : hôte MySQL inconnu
Il y a un problème dans la variable $servername
- Access denied : accès refusé
Vous avez commis une erreur dans la saisie du nom d'utilisateur ou du mot de passe.
- Rien : peut-être que la base n'existe pas, vérifiez ce dernier paramètre.
Voici un lien pour voir des exemples (http://forum.vbulletin-fr.org/showthread.php?threadid=39) de fichiers config.php pour les hébergeurs mutualisés les plus courants.
2. Le service MySQL a été arrêté
Il arrive que le service MySQL, qu'il soit en local ou sur un autre serveur, soit arrêté. L'hébergeur peut effectuer des opérations de maintenance ou encore vous empêcher de vous connecter au serveur (sans doute avez-vous effectué trop de requêtes ;))
Un message tel que celui-ci apparaît :
Can't connect to local (ou distant) MySQL server through socket...
Dans ce cas, il faut contacter votre hébergeur pour lui demander des explications et savoir s'il compte remettre en route le service.
Si vous êtes sur un serveur dédié, il faut vérifier que MySQL se lance au démarrage avec chkconfig. Le service a pu être interrompu temporairement. Il faut se loguer en root et envoyer l'instruction mysql start (dans le bon répertoire).
3. Vous avez trop de connexions
Le problème se manifestera par un message du type Too many connections in db_mysql.php
Beaucoup d'hébergeurs gratuits ou à faible coût limitent le nombre de connexions simultanées afin d'éviter qu'un utilisateur ne s'accapare les ressources du serveur de base de données. Lorsque de nombreux utilisateurs se connectent sur un forum, il peut arriver que les requêtes simultanées soient trop nombreuses, auquel cas l'erreur se produit.
Tout d'abord, il faut s'assurer que vous n'utilisez pas de connexions permanentes à la base. Le paramètre se trouve dans le fichier config.php :
$usepconnect = 0;
Vous devez trouver cette ligne. Si la variable est fixée sur 1, replacez là à 0.
Avant de voir les hacks, il faut faire la chasse aux requêtes superflues : supprimer tous les services peu utiles, en particulier le popup on PM ou encore l'affichage des anniversaires / des personnes connectées. Vous pouvez aussi carrément supprimer la messagerie privée. Il est conseillé de limiter la page rechercher (pas de recherche avancée) et de bloquer l'accès aux pages who's online (qui est en ligne) et members (membres). Tout se configure dans les options du cp et dans les groupes d'utilisateurs.
Vous pouvez enfin installer le hack de SeDkY (http://forum.vbulletin-fr.org/showthread.php?threadid=2428) qui permet de bourriner sauvagement MySQL en lui envoyant 100 requêtes pour que l'une d'entre elles soit exécutée. Attention, votre hébergeur pourrait ne pas apprécier.
II. - La connexion est établie mais une erreur surgit lors de l'interrogation de la base
Là, le problème peut avoir des origines beaucoup plus variées. Un fichier mal téléchargé, une version pirate, l'installation de plusieurs hacks incompatibles entre eux sont autant de sources possibles de bugs. Il faut apprendre à déchiffrer les requêtes MySQL pour trouver la source de l'erreur.
Néanmoins, voici les erreurs les plus courantes :
1. Table de session pleine
mysql error: table 'session' is full
Cette erreur intervient en raison du type particulier de la table session. C'est une table HEAP, à accès rapide et volatile, exigeant des ressources plus importantes que les tables classiques (MyISAM). Certains hébergeurs limitent l'emploi des tables HEAP. Il faut donc changer le type de la table en effectuant une requête par l'intermédiaire de PHP MyAdmin :
ALTER TABLE session TYPE=MyISAM;
Les explications se trouvent dans la discussion liée.
2. Table endommagée
mysql error: Can't open file: 'thread.MYI'
Des tables volumineuses, anciennes, un redémarrage impromptu, une erreur d'écrite peuvent causer une défaillance et endommager une table. La table endommagée correspond au nom de fichier indiqué dans le message d'erreur (dans l'exemple, la table thread). Les tables peuvent être réparées en exécutant la requête suivante :
REPAIR TABLE `nom_de_la_table'
PHP MyAdmin offre également la possibilité de réparer plusieurs tables directement à partir de la page listant les tables.
III. - Restauration de la base MySQL
Il faut distinguer entre les utilisateurs disposant d'un accès p MySQL via SSH / Telnet et ceux qui ne peuvent passer que par PHP MyAdmin.
1. Utilisateurs avec un accès au shell via SSH ou Telnet
Restaurer une base est très facile. Il faut télécharger le fichier au format .sql dans le répertoire de votre choix. Ensuite, vous devez vous connecter au serveur par le système que vous préférez (de préférence SSH pour des questions de sécurité). Placez-vous dans le répertoire où vous avez uploadé votre sauvegarde.
Exécutez l'instruction suivante :
mysql --user=nom -p nomdelabase < fichier.sql
Remplacez évidemment nom par le nom d'utilisateur mysql, nomdelabase par le nom de la base où importer le fichier sql et fichier correspond au nom du fichier de sauvegarde.
Il faudra saisir votre mot de passe d'utilisateur mysql. Le tour est joué.
2. Sans accès au serveur via Telnet ou SSH
Vous pouvez toujours tester la solution proposée par SeDkY (http://forum.vbulletin-fr.org/showthread.php?threadid=2657#post17589).
Si ça ne fonctionne pas, vous devrez passer par PHP MyAdmin. L'essentiel a été traité dans la FAQ créée par xCheater2. C'est plus lourd car il faut tronçonner sa base en éléments de taille réduite.
Pour un découpage automatisé, voyez l'utilitaire proposé par Eve_Ra.
N'hésitez pas à exposer les problèmes que vous rencontrez avec MySQL à la suite de ce message.