mardi 19 août 2008
Erreur MySQL : Deadlock found when trying to get lock; try restarting transaction.
Deadlock found when trying to get lock; try restarting transaction.
Comment avoir plus d'informations sur cette erreur de MySQL ?
Après de nombreuses recherches sur le net, j'ai trouvé sur le forum de MySQL cette information :
One tool very useful in debugging the deadlock scenarios is SHOW INNODB STATUS; If you run that command after you get a deadlock, it will tell you more information about how the deadlock occured, ie. what statements were waiting on each other and so on.
Je me connecte donc à ma base de données, et j'exécute la commande show innodb status et je remarque que j'avais effectivement deux requêtes bloquées.
C'est visible dans la section :
------------------------
LATEST DETECTED DEADLOCK
------------------------
J'espère que ceci vous aura aider à débloquer vos requêtes en cours.
____________________________________________
Mise à jour de l'article suite au commentaire de Jérôme (que je remercie au passage) :
Utilisez désormais la commande SHOW ENGINE INNODB STATUS
mercredi 23 juillet 2008
Kill automatique des processus à l'état "sleep"
Quand votre base de données MySQL est lente, une des raisons est qu'elle a trop de processus "dormants" à l'état de "sleep". Cela est visible quand vous lancez la commande "show processlist".
mysql> show processlist;
+---------+--------+-----------------+--------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+---------+--------+-----------------+--------+---------+------+-------+------------------+
| 1313203 | ZABBIX | localhost | zabbix | Sleep | 3 | | NULL |
| 1313205 | ZABBIX | localhost | zabbix | Sleep | 1 | | NULL |
| 1313206 | ZABBIX | localhost | zabbix | Sleep | 2 | | NULL |
| 1313207 | ZABBIX | localhost | zabbix | Sleep | 2 | | NULL |
| 1313209 | ZABBIX | localhost | zabbix | Sleep | 5 | | NULL |
| 1313210 | ZABBIX | localhost | zabbix | Sleep | 4 | | NULL |
| 1313212 | ZABBIX | localhost | zabbix | Sleep | 3 | | NULL |
| 1313214 | ZABBIX | localhost | zabbix | Sleep | 9 | | NULL |
| 1313227 | ZABBIX | localhost | zabbix | Sleep | 8 | | NULL |
| 1313228 | ZABBIX | localhost:***** | zabbix | Query | 0 | NULL | show processlist |
+---------+--------+-----------------+--------+---------+------+-------+------------------+
10 rows in set (0.00 sec)
Pour pouvoir supprimer ces processus latents, il faut utiliser la commande kill + numéro du processus :
exemple : kill 1313228
Cette opération est à répéter pour chaque processus, vous imaginez donc la perte de temps !
Sur ce blog, j'ai trouvé une manière beaucoup plus simple pour supprimer automatiquement ces processus.
for PID in `mysql -u user -ppass -e "show processlist" | grep Sleep | cut -f1`
do
mysql -u user -ppass -e "kill $PID"
done
N'oubliez pas de remplacer ce qui est en italique (user et pass) par vos propres données.
A vous ensuite d'en faire un script ksh par exemple et de le mettre dans le crontab. Ainsi vous pourrez lancer cette opération toutes les nuits.
mercredi 30 avril 2008
Afficher la liste des requêtes en cours sous mysql avec "show processlist"
J'ai découvert avec un collègue aujourd'hui une commande fort utile à lancer sous mysql :
SHOW PROCESSLIST
Cette commande sert à lister les commandes en cours et si besoin à supprimer une requête "LOCKED" ou trop lente :
KILL QUERY THREAD_ID;
Documentation Mysql pour plus d'infos
mercredi 16 avril 2008
Récupérer puis modifier le mot de passe root de mysql
Vous avez le mot de passe root de la machine Linux sur laquelle vous travaillez mais il vous manque le mot de passe root de mysql. Il existe heureusement un moyen pour les étourdis de modifier (sans le connaître) le mot de passe root.
Je vous propose de lire cet article :
Recover mysql root password
Il m'est arrivé d'avoir à modifier le mot de passe root de mysql et cela fonctionne à merveille !







