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?

25
demandé sur Paolo 2014-01-18 01:52:32

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

36
répondu Andy Day 2014-01-17 22:02:55

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.

59
répondu fancyPants 2018-07-15 20:34:51

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.

9
répondu miyasudokoro 2014-01-17 22:04:00

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.

0
répondu John Anderson 2017-09-06 00:11:52