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

Posté par fatihaelh - - MySQL - Commentaires [3] - Rétroliens [0] - Permalien [#]


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.

Posté par fatihaelh - - MySQL - Commentaires [0] - Rétroliens [0] - Permalien [#]

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

Posté par fatihaelh - - MySQL - Commentaires [0] - Rétroliens [0] - Permalien [#]

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 !


Posté par fatihaelh - - MySQL - Commentaires [0] - Rétroliens [0] - Permalien [#]
« Accueil  1