Catégorie : Tutoriels

Les tutoriels informatiques ou photographiques

  • Exécuter plusieurs requêtes SQL avec un événement MySQL

    Exécuter plusieurs requêtes SQL avec un événement MySQL

    On continue avec la gestion des événements de MySQL. Ce coup-ci l’objectif est d’exécuter plusieurs requêtes dans un même événement.

    Principe

    Dans le cadre de la maintenance courante d’une base de données il est fréquent d’exécuter un ensemble de requêtes s’appliquant à plusieurs tables. Si les opérations sont automatisées via des événements le développeur/administrateur a deux solutions pour la mise en œuvre de ces taches : créer plusieurs événements, chacun n’exécutant qu’une seule requête ; créer un événement exécutant plusieurs requêtes.

    Les deux méthodes ont leurs avantages et leurs inconvénients. Dans le cas d’un événement exécutant plusieurs requêtes l’avantage principal sera la création d’une routine claire, avec la maîtrise de l’ordre d’exécution des requêtes.

    Code

    CREATE DEFINER=user
    EVENT `clean_drupal_cache`
    ON SCHEDULE EVERY 1 DAY STARTS '2026-03-11 06:34:24'
    ON COMPLETION NOT PRESERVE ENABLE
    COMMENT 'Vide les tables de cache'
    DO

    BEGIN

    DELETE FROM dru5259_cache_page
    WHERE expire <> -1 AND expire < UNIX_TIMESTAMP();

    DELETE FROM dru5259_cache_render
    WHERE expire <> -1 AND expire < UNIX_TIMESTAMP();

    DELETE FROM dru5259_cache_dynamic_page_cache
    WHERE expire <> -1 AND expire < UNIX_TIMESTAMP();

    DELETE FROM dru5259_cache_data
    WHERE expire <> -1 AND expire < UNIX_TIMESTAMP();

    END

    Le code permet d’effacer tous les enregistrements dans les tables de cache vieux de plus d’un jour. N’oubliez pas d’adapter le « user » en fonction de votre configuration.

    Démarche

    Dans un premier il faut écrire et tester les requêtes une par une. De préférence avec une base de données de test. J’enfonce une porte ouverte, mais les fondamentaux doivent toujours être rappelés de temps en temps.

    Une fois les requêtes fonctionnelles, il faudra les tester en bloc. Si rien ne casse, vous pouvez passez à l’écriture du code pour l’événement.

    La première partie du code est triviale. Elle est identique à celle pour un événement n’exécutant qu’une seule requête.

    La partie incluant les requêtes commence par BEGIN et finit par END. Entre ces deux mots clés il faudra écrire l’intégralité des requêtes SQL. Il est très important de ne pas oublier de finir les requêtes par un point virgule « ; ». Dans le cas contraire l’événement risque de ne pas s’exécuter du tout.

    Concernant l’ordre d’exécution des requêtes, il faut préciser qu’elles seront exécutées séquentiellement. Elles s’exécuteront donc l’une après l’autre, dans l’ordre d’écriture, et seulement une fois que la requête précédente aura été exécutée. Il faut donc correctement définir cet ordre, sous peine de générer des erreurs, pouvant empêcher le bon fonctionnement de votre base de données.

    Trucs et astuces

    Vous utilisez phpMyAdmin pour créer vos événements ? Vous avez raison. Et vous êtes un battant !

    Mais vous rencontrez des erreurs lorsque vous créer ce type d’événements.

    Hormis les problèmes liés aux requêtes en elles-mêmes, phpMyAdmin peut afficher un message d’erreur s’il n’y a pas de ligne après BEGIN et avant END. Il faudra donc bien penser à sauter des lignes.

    De la même manière n’hésitez pas à sauter des lignes entre chaque requête. Cela rendra votre code plus lisible et plus facile à maintenir.

  • Automatiser la gestion de vos bases de données MySQL à l’aide d’événements

    Courant 2025 le site eixerit.info a connu de nombreux problèmes techniques, principalement dû à la base de données, tournant avec MySQL. Ces problèmes sont, en grande partie, réglés grâce à la création d’un événement en SQL, directement exécuté par le serveur de base de données.
    Voici un petit tutoriel sur le sujet.

    Cas concret

    En 2024 j’ai passé le site sous Drupal. L’installation a été réalisée directement depuis le back-office d’OVH. Rétrospectivement c’était sans doute une erreur, Drupal étant mal configuré au final. Le résultat a été que les tables de gestion des logs et la table watchdog se sont rapidement remplies, suite à des tentatives de création de faux comptes et d’utilisation d’URL erronées par des bots.
    En quelques jours la taille de la base de données dépassait donc les 512 Mo, soit la taille disponible dans le cadre de l’hébergement mutualisé que j’ai souscrit.

    La solution simple consiste à effacer périodiquement ces tables.

    Sauf que cette solution est contraignante. Il faut en effet se connecter fréquemment, effectuer les opérations, et vérifier que l’on n’a rien cassé.

    L’idée pour évacuer cette contrainte est donc d’automatiser toutes ces opérations. Il existe plusieurs méthodes, mais la plus efficace et la plus simple est d’utiliser la fonction d’automatisation de MySQL, qui passe par la création d’un événement (event).

    Principe

    MySQL dispose de la possibilité de création d’événements temporel. En pratique une ou plusieurs requêtes SQL peuvent être exécutées automatiquement à des moments précis. Cela revient à utiliser un cron directement à l’intérieur du serveur.

    Sous réserve de disposer des bons privilèges, n’importe quelle requête peut être exécutée. Cela permet d’automatiser la plupart des taches courantes d’administration.

    Avant de créer un ou plusieurs événements, vous devrez vérifier que l’option est disponible pour votre hébergement. Pour vous assurer que le gestionnaire d’événements est activité il suffit de passer la commande SQL suivante :

    SET GLOBAL event_scheduler = ON;

    Code

    Le code pour la table watchdog :

    CREATE DEFINER=user 
    EVENT `clear_watchdog`
    ON SCHEDULE EVERY 1 DAY STARTS '2026-03-07 08:35:36'
    ON COMPLETION NOT PRESERVE ENABLE
    COMMENT 'Vide la table watchdog tous les jours'
    DO TRUNCATE TABLE watchdog

    Le code est assez simple. Le « user » correspond à votre nom d’utilisateur, il faudra l’adapter en fonction de la configuration de votre serveur.

    Vous devrez donner un nom explicite votre événement. De la même manière il faudra configurer la périodicité de l’événement.
    La dernière ligne contient la requête SQL à exécuter. Elle devra forcément commencer par « do ».

    De nombreux outils permettent de générer automatiquement le code SQL. C’est notamment le cas de phpMyAdmin, qui est assez simple à utiliser. N’hésitez pas à l’utiliser.

    Capture d’écran de l’interface de phpMyAdmin

    Conclusion

  • Automatiser l’ouverture des PDF dans Firefox

    Vous passez beaucoup de temps à chercher de l’information sur Internet, et donc vous vous retrouvez fréquemment face à des fichiers PDF. Et, malheureusement, au lieu de les ouvrir, Firefox les télécharge et vous laisse vous démerder avec. Ce qui est une perte de temps et énervant.
    Voici la solution à vos problèmes, ou presque.

    Paramètres

    Pour gérer le comportement de Firefox il suffit d’aller dans le menu paramètres. Pour ce faire il existe trois méthodes, aussi simples les unes que les autres.

    1. Dans le menu Outils, cliquez sur paramètres.
    2. Cliquez sur le hamburger à droite de la fenêtre et, en bas du menu contextuel qui s’offre, cliquez sur paramètres.
    3. Dans la barre d’adresse, tapez directement « about:preferences ».

    Dans le menu « Général » cherchez la section « Applications ». Dans le tableau il suffit de chercher la ligne correspondant au PDF, c’est-à-dire celle précisant « Format de document portable ». Il ne reste plus qu’à configurer le type d’action.

    Configuration

    Capture d’écran de Firefox montrant les paramètres

    Firefox vous propose 5 à 6 options.

    1. Ouvrir dans Firefox, ou « Ouvrir dans Firefox (par défaut) » selon la version, ce qui permet d’ouvrir le fichier dans un nouvel onglet.
    2. Toujours demander.
    3. Enregistrer le fichier.
    4. Utiliser l’application par défaut de Windows.
    5. Utiliser Acrobat Reader (s’il est installé).
    6. Autre (une liste des logiciels disponibles s’affichera).

    Pour ouvrir de façon automatique il faut choisir la première option. Vous pourrez toujours changer d’avis en cours de route et modifier la configuration.

    Une fois la configuration modifiée vous pouvez fermer cet onglet et retourner à votre navigation.