Lancer une requête mySQL comme un travail cron?
je voudrais purger ma base de données SQL de toutes les entires de plus d'une semaine, et je voudrais le faire tous les soirs. Donc, je vais mettre en place un job de cron. Comment puis-je interroger mySQL sans avoir à entrer mon mot de passe manuellement à chaque fois?
la requête en PHP est la suivante:
mysql_query("DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) , timestamp ) >=7");
Est-il possible d'exécuter ce qu'un script shell? Si non, est-il un moyen de faire cron exécuter un fichier php?
4 réponses
essayez de créer un script shell comme celui ci-dessous:
#!/bin/bash
mysql --user=[username] --password=[password] --database=[db name] --execute="DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) , timestamp ) >=7"
Vous pouvez alors ajouter ceci au cron
Activer
SET GLOBAL event_scheduler = ON;
et créer un événement comme ceci:
CREATE EVENT
ON SCHEDULE EVERY 1 DAY
STARTS '2014-01-18 00:00:00'
DO
DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) , timestamp ) >=7;
et c'est tout.
en savoir plus sur la syntaxe ici et ici est une information plus générale à ce sujet.
cela dépend de ce qui exécute cron sur votre système, mais tout ce que vous avez à faire pour exécuter un script php à partir de cron est d'appeler l'emplacement de l'installation php suivie de l'emplacement du script. Un exemple avec crontab tournant toutes les heures:
# crontab -e
00 * * * * /usr/local/bin/php /home/path/script.php
Sur mon système, je n'ai même pas mettre le chemin pour l'installation de php:
00 * * * * php /home/path/script.php
sur une autre note, vous ne devriez pas utiliser l'extension mysql parce qu'elle est dépréciée, à moins que vous n'utilisiez une ancienne installation de php. Lire ici pour une comparaison.
c'était une page très pratique car j'ai une exigence de supprimer des enregistrements d'une table mySQL où la date d'expiration est < Aujourd'hui.
je suis sur un hôte partagé et CRON n'a pas aimé la suggestion Etwkday. il a également dit (et je suis d'accord) que l'exposition du mot de passe de cette façon pourrait être peu sûre.
j'ai ensuite essayé d'activer les événements à phpMyAdmin mais encore une fois étant sur un hôte partagé c'était un non non. Désolé fancyPants.
alors je me suis tourné vers l'intégration du script SQL dans un fichier PHP. J'ai utilisé l'exemple [ici][1]
[1]: https://www.w3schools.com/php/php_mysql_create_table.asp stocké dans un sous-dossier quelque part sûr et ajouté un index vide.php pour une bonne mesure. J'ai ensuite pu tester que ce fichier PHP (et mon script SQL) fonctionnait à partir de la ligne D'URL du navigateur.
tout va bien jusqu'à présent. Sur CRON. Suivant l'exemple ci-dessus a presque fonctionné. J'ai fini par appeler PHP avant le chemin pour mon *.fichier php. Autrement CRON ne savait pas quoi faire du dossier.
mon cron est configuré pour s'exécuter une fois par jour et ressemble à ceci, modifié pour la sécurité.
00 * * * * php mywebsiteurl.com/wp-content/themes/ForteChildTheme/php/DeleteExpiredAssessment.php
pour le test final avec CRON, j'ai tout d'abord mis en marche chaque minute et j'ai activé les alertes e-mail. Cela a rapidement confirmé qu'il fonctionnait comme prévu et je l'ai changé de nouveau à une fois par jour.
Espérons que cette aide.