Autoincrement repart à 1

Soumis par drupal_admin le jeu 04/04/2019 - 11:14

J'utilise un système de tables avec deux niveaux :

  1. Table "courante" dans laquelle les événements sont enregistrés
  2. Table "historique" dans laquelle sont reportés les événements traités.

Ce système permet de conserver un historique tout en ayant des tables "vivantes" peu volumineuses, donc rapides à traiter.
Ce système  implique une conservation de la valeur de l'autoincrément pour la table "courante" afin de ne pas avoir de doublons dans la table "historique". C'est encore plus important si la table d'événements est découpée en plusieurs tables physiques qui doivent conserver un identifiant commun.

Ce phénomène est heureusement réglé dans MariaDB à partir de la version 10.3.x.

La seule solution que j'ai trouvée est d'utiliser la possibilité d'exécuter une procédure lors du démarrage de Mysql/MariaDB. J'ai donc réalisé :

  1. Une procédure SQL cataloguée téléchargeable ici.
    Cette procédure concerne une "paire" de tables : "RUN_MODSEC" pour la table événements et "HIS_MODSEC" pour la partie historique.
  2. Un petit fichier SQL de lancement lancé par Mysql/MariaDB lors de son démarrage, ce fichier ne comporte que deux lignes :

    use ma_base;
    call REINCRT();

    Mes systèmes utilisent "systemd" j'ai donc du modifier le script "mysql.service" de la façon suivante :

    Avant :
     ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

    Après :

    ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --init-file=/etc/mysql/ini_file

    C'est tout !
    J'attends quand même avec impatience de pouvoir passer cette base sous MariaDB 10.3 qui résout, enfin, ce vieux bug. Cela devrait être effectif lors du passage de Stretch à Buster.