PDA

Voir la version complète : Base de données Problèmes communs avec la base de données


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.

moraytus
08/06/2003, 01h22
Salut!
C'est un très beau récapitulatif des erreurs communes qu'on rencontre à ce niveau!
Je salue ton initiative et je comprends aussi pourquoi tu l'as mis sur pied ;)
Bon,en attendan je laisse la place à ceux qui ont des questions à poser...

@+

P.S. : Prions le ciel que je n'ai po de questions à poser par la suite....Arffff

Corbu
08/06/2003, 01h59
sophocle là tu me fait une suprise formidable...

Merci pour ce Tutoriel qui meriterait d'etre au rang n°1 de tous.

Sophocle
09/06/2003, 21h17
J'ai complété le tutoriel en expliquant les différents moyens dont disposent les utilisateurs pour effectuer une requête et pour prendre en compte les questions relatives aux tables endommagées.

matim
11/06/2003, 09h47
Hello

j'ai installé vbulletin depuis plus d'un an, tout tourne nickel, sauf la fonction e-mail, mais comme j'héberge sous proxad, c'est normal.
donc bref tout tourne bien, mais voila, depuis 1 semaine j'ai ce ****** de message qui apparait tout le temps :

There seems to have been a slight problem with the database. Please try again by pressing the refresh button in your browser.
An E-Mail has been dispatched to our Technical Staff, who you can also contact if the problem persists.
We apologise for any inconvenience.

cela me le faisait rarement mais tout devenait normal par la suite.
J'ai aussi lu aussi que c'était la faute de l'hébergeur, qui raffraichissait par toujours son cache ou ses féchier temporaires ???

enfin ça marchait top, maintenant ça marche plus !
QUE FAIRE ?

petite précision >
j'avais installé vbulletin avec un pote qui connaissait bien PHP
moi je suis que graphiste, donc doucement avec la technique

MERCI

mon forum
http://www.parlezdunkerquois.com

Sophocle
11/06/2003, 13h58
Quelle est la version de vbulletin utilisée ? Elle m'a l'air ancienne. Il faudrait peut-être la mettre à jour. En principe, l'erreur générée apparaît de manière détaillée dans l'email de rapport d'erreur et dans un textarea (mais exclusivement pour les admins). Il faudrait copier le texte exact de l'erreur générée. Actuellement, le message fourni est trop imprécis.

matim
12/06/2003, 10h58
je sais plus qu'elle version c'est :(
faut que je cherche ...
sinon c'est ou ça " l'email de rapport d'erreur et dans un textarea " ?

pissdrunx
12/06/2003, 11h17
Ouais joli tuto merci BCP
Mais avec phpmyadmin c aussi simple kavec ssh pour restaurer une base. Meme plus simple... Suffit de cliquer. LOL

Sophocle
12/06/2003, 11h17
L'email de rapport d'erreur, il ne peut pas être envoyé puisque tu ne disposes pas de la fonction email. En revanche, le textarea est censé apparaître en dessous de la phrase "We apologise for any inconvenience.", dans un encadré.
Si ça n'est pas le cas, ça signifie soit que l'utilisateur n'est pas un administrateur (ou pas identifié comme tel), soit que la version de vbb est vraiment antique.
Tout ce que je sais d'après l'erreur, c'est que le logiciel arrive à se connecter à la base mais qu'ensuite, ça merdouille.

Pour voir le message d'erreur en clair, voici la marche à suivre. Il faut d'abord ouvrir le fichier ./admin/db_mysql.php

Rechercher les lignes suivantes(à la fin):
if ($bbuserinfo['usergroupid']==6) {
echo "<form><textarea rows=\"12\" cols=\"60\">".htmlspecialchars($message)."</textarea></form>";
}
Les remplacer par :
echo "<form><textarea rows=\"12\" cols=\"60\">".htmlspecialchars($message)."</textarea></form>";


Enregistrer les modifications et uploader le fichier.
Se connecter.
Copier le message d'erreur pour qu'on trouve où est le problème :)

matim
12/06/2003, 17h52
ok merci, je regarde ça au calme ...
je crois que la version utilisé est la 2.0.1

Sophocle
12/06/2003, 21h26
Il serait indispensable de passer à la dernière version rien que pour des raisons évidentes de sécurité. La 2.0.1 est bourrée de failles.

kiro4
15/06/2003, 22h46
merci bcp sa ma bien aidé sa ,
big up

matim
25/06/2003, 10h43
merci pour ces précieux conseil
finalement, ça y est, je me lance
je recommence tout depuis le debut
nouveau site / nouveau forum
je part avec la v3

xleu
03/07/2003, 21h44
merci pour toute les info

Sophocle
06/01/2004, 16h32
Petite mise à jour.

Mennen
22/01/2004, 14h46
je pense que mettre ce post en "important" ne serait pas fortuit :)