J'ai une application pour copier des données sur des disques externes. Les demandes de copie sont stockées dans une base de données MySQL et seront lues par plusieurs copieurs, qui exécutent un script bash script pour récupérer les demandes. Une fois qu'une demande est prise en charge, elle est définie comme "en cours" dans la base de données. Cependant, j'essaie d'éviter une situation où plusieurs machines lisent la demande de manière rapprochée et commencent à copier les mêmes données.
J'allais utiliser le verrouillage de table pour faire cela, mais j'ai du mal à le faire parce qu'un verrouillage de table expire lorsqu'une session expire, donc si je le fais.. :
mysql="mysql -h dbhost -u user -pPassword diskcopydb"
echo "LOCK tables diskcopy WRITE;" | $mysql
echo "SELECT SQL_NO_CACHE * FROM diskcopy WHERE status=\"request\"" | $mysql
le verrou a en fait expiré le temps de recevoir les demandes, et la condition de course persiste donc. Il y a une question ici :
MySQL en ligne de commande - puis-je utiliser les VERROUILLAGES dans la pratique ?
où les commandes SQL sont regroupées dans un bloc et sont acheminées ensemble vers MySQL, mais j'ai besoin d'obtenir une sortie de MySQL à mi-chemin pour récupérer les requêtes. Quelqu'un a-t-il une recette pour cela ? Il semble que ce soit un cas d'utilisation assez courant...