« MySQL/Débogage » : différence entre les versions
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
|||
Ligne 29 :
{{attention|S'il y a plusieurs COMMIT avant un ROLLBACK (par exemple dans une boucle), ce dernier n'annulera que les opérations consécutives au dernier COMMIT.}}
== Erreurs MySQL ==
=== A new statement was found, but no delimiter between it and the previous one ===
Ajouter un ";".
Sinon avec "DELIMITER" : sans espace avant (donc consécutivement au retour chariot).
=== Access denied for user mon_compte@mon_hôte ===
* Vérifier le mot de passe du compte.
* Vérifier que l'hôte du compte n'a pas été changé par une règle réseau.
*:Si c'est le cas, tester en shell :
<source lang=bash>
sudo
sudo mysql -h mon_hôte2 -u mon_compte
</source>
* Sinon, recréer le droit avec :
<source lang=mysql>
GRANT ALL PRIVILEGES ON *.* TO 'mon_compte'@'mon_hôte2' IDENTIFIED BY PASSWORD 'mon_mot_de_passe_hashé';
</source>
===
Une table temporaire n'est pas accessible, elle a peut-être été créée dans un autre thread : il faut la déplacer dans le même fichier.
===
Se produit sur les opérations sur les grands nombres. On peut alors manipuler des nombres plus petits, par exemple en convertissant les octets en gigas dans le select.
===
Clé primaire invalide. Dans ce cas il vaut mieux séparer la création de la table puis l'ajout des contraintes en deux requêtes. Cela peut permettre par exemple de voir que les tables vers lesquelles pointent les contraintes doivent être crées avant ces dernières.
=== Can't connect to MySQL server ===
Changer le paramètre "host".
=== Can't create federated table ===
Le schéma de la table distante doit être le même que celui de la table locale.
Sinon, activer les logs sur le serveur distant pour voir le compte qui se connecte.
=== Can't create/write to file 'mon_dossier/mon_fichier.csv' ===
Lors d'un SELECT INTO OUTFILE, si le compte du SGBD utilisé a les droits d'exportation (<code>GRANT FILE ON .* TO 'mon_compte'@'%';</code>), le problème est lié au compte MySQL de l'OS qui n'a pas accès au système de fichier. Comme généralement le compte "mysql" sur Linux n'a pas de shell, cela peut se confirmer ainsi :
<source lang=bash>
su - -s /bin/bash mysql
touch mon_dossier/mon_fichier.csv
</source>
Si les droits manquent :
<source lang=bash>
sudo chown -R mysql mon_dossier
</source>
=== Cannot add foreign key constraint ===
Survient lors d'un "CREATE TABLE", et ce n'est pas lié à la valeur de ''foreign_key_checks''.
En fait il ne faut pas créer de contrainte d'intégrité entre deux tables de moteur différent (ex : InnoDB vs MyISAM).
=== Cannot drop index 'UNIQ_XXX': needed in a foreign key constraint ===
Il faut supprimer la clé étrangère avant l'index duquel elle dépend :
<source lang=mysql>
Ligne 80 ⟶ 88 :
ALTER TABLE `maTable` DROP INDEX `UNIQ_XXX`;
</source>
=== Data too long for column ===
Ligne 100 ⟶ 97 :
SET NAMES 'utf8';
</source>
=== Foreign data src error ===
Lors du <code>create server</code>, le compte renseigné n'existe pas.
=== Foreign key constraint is incorrectly formed ===
Une clé étrangère n'est pas au même format que la colonne à laquelle elle fait référence. Par exemple si cette dernière n'existe pas ou si elle n'a pas le même type.
=== Host 'example.com' is not allowed to connect to this MySQL server ===
Dans le cas d'une [[MySQL/Sécurité#Ouverture_.C3.A0_un_PC_distant|connexion depuis un PC distant]], le compte utilisé n'est pas autorisé. Il faut donc le configurer avec :
GRANT ALL PRIVILEGES ON *.* TO 'utilisateur'@'%' WITH GRANT OPTION;
au lieu ou en plus de :
GRANT ALL PRIVILEGES ON *.* TO 'utilisateur'@'localhost' WITH GRANT OPTION;
===
Trois solutions :
* <code>ALTER TABLE</code> pour changer la structure d'au moins une des deux tables jointes, pour uniformiser leur collation.
Ligne 125 ⟶ 120 :
* Pour un <code>UPDATE</code> ou un <code>DELETE</code>, les champs comparés par un <code>IN</code> ne sont peut-être pas du même type.
===
Il manque un "DROP FOREIGN KEY" avant un "DROP TABLE" ou un "DROP COLUMN".
Ligne 136 ⟶ 131 :
</source>
=== Lock wait timeout exceeded; try restarting transaction ===
Le serveur SQL est surchargé : exécuter les instructions une par une.
Sinon :
<source lang=mysq>
SET innodb_lock_wait_timeout = 120;
</source>
=== Syntax error or access violation ===
Utiliser phpMyAdmin pour trouver l'erreur de syntaxe.
=== This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' ===
Remplacer les "IN" par des jointures, ou la sous-requête par une deuxième dont le résultat est stockée dans une table temporaire.
== Too many tables (ou timeouts systématiques) ==
Si des requêtes sont systématiquement en timeout, c'est peut-être que la limite de 61 jointures a été atteinte.
Pour pallier cela, il est possible d'en remplacer certaines par des SELECT<ref>https://www.quora.com/How-do-I-override-a-max-limit-of-61-joins-in-a-MySQL-query</ref>.
=== Type d'énoncé non reconnu ===
Ligne 152 ⟶ 158 :
install plugin federated soname 'ha_federated.so';
===
Cela se produit quand on essaie de mettre à jour ou supprimer des lignes selon une sélection de ces mêmes lignes. En effet, il est impossible de mettre à jour une table pendant en même temps qu'elle une subit sous-requête. Par exemple, pour réinitialiser un mot de passe {{w|Système de publication pour l'Internet|SPIP}} :
mysql> UPDATE spip_auteurs SET pass =
(SELECT pass FROM spip_auteurs WHERE login='paul') where login='admin';
ERROR 1093 (HY000): You can't specify target table 'spip_auteurs' for update in FROM clause
* Passer par des <code>CREATE TEMPORARY TABLE</code> (voire <code>DECLARE</code> si cela rentre dans une {{wt|variable scalaire}}).
* Sinon, il est possible de sélectionner les enregistrements à mettre à jour automatiquement en enveloppant la sous-requête dans une autre, grâce aux tables temporaires générées par les <code>FROM</code><ref>({{en}}) http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/</ref>.
== You do not have the SUPER privilege and binary logging is enabled ==
=> SET GLOBAL log_bin_trust_function_creators = 1;
== phpMyAdmin ==
=== Erreur : fonctionnalités relationnelles désactivées ! ===
Se produit dans le concepteur de diagramme de phpMyAdmin, il faut l'activer dans <u>config.inc.php</u>.
== Références ==
|