Ici & Là

01 Société 02 Histoire 03 Science 04 Science fiction 05 SPIP 06 NTIC 07 Sondages 08 Divers
La meilleure façon de réaliser ses rêves est de se réveiller (Paul Valéry)

Accueil > SPIP > Adaptation du squelette de la dist et de SPIP > Problème de sauvegarde de la base de données de SPIP

Sauvegarde au format SQLite impossible avec les dernières versions de MariaDB

Problème de sauvegarde de la base de données de SPIP

Les tables SQL ne sont pas exportées et sont indiquées « en échec » puis « vides »

dimanche 15 mai 2022, par François Daniel Giezendanner

Notez cet article
3 votes

Impossible de faire une sauvegarde complète de la base de données depuis l’espace privé ! Pour la majorité des données il s’affiche [Echec] et elles sont vides.
Il s’agit d’un problème d’adaptation entre SQLite et les dernières versions du SGBD MariaDB.
Un correctif est de modifier le code de SPIP pour permettre de changer l’appel à la fonction current_timestamp() vers la variable CURRENT_TIMESTAMP.


Je suis sous SPIP 3.1.3 [23214] chez l’hébergeur BOXIS et depuis plusieurs années les sauvegardes complètes de la base de données depuis l’espace privé se sont toujours déroulées à la perfection. Or depuis un jour de mars 2022, alors que rien n’a été changé dans l’installation et les réglages du SPIP et de ses plugins, il est devenu impossible de faire une sauvegarde complète de la base de données depuis l’espace privé ! Pour la majorité des données il s’affiche [Echec] et elles sont vides :

Le problème a été déclaré dans forum.Spip.net par Courcelles Design en Janvier 2019 pour un SPIP 3.2.1 [23954] et par Pascal Engelmajer en Septembre 2019 pour un SPIP 3.2.4 [24285]. Le problème a été identifié et la solution donnée dans ces deux forums, il s’agit d’un problème d’adaptation entre SQLite et les dernières versions du SGBD MariaDB.

SB indique il y a 5 mois : « Nous venons de migrer notre site intranet sur un nouveau serveur avec MariaDB 10.6.4 et en avons profité pour faire une mise à jour de SPIP en 3.2.11. Lors des tentatives de sauvegarde de la base de données dans SPIP, les tables SQL (spip_articles, spip_breves, spip_depots, spip_documents, ...) contenant la fonction current_timestamp() ne sont pas exportées et sont indiquées « en échec » puis « vides » ».

Olivier Tetard explique que « la sauvegarde au format SQLite est impossible avec les dernières versions de MariaDB #4374. Les dernières versions de MariaDB utilisent current_timestamp() en tant que fonction quand on exporte le format des tables SQL (via la commande SHOW CREATE TABLE). C’est ce résultat qui est utilisé pour créer les tables dans la base SQLite, or, l’utilisation de la fonction current_timestamp() n’est pas possible avec SQLite. Ce problème a été introduit avec les dernières version de MariaDB. Un correctif bête et méchant est de modifier le code de SPIP pour permettre de changer l’appel à la fonction current_timestamp() vers la variable CURRENT_TIMESTAMP ».

Suite à ma requête dans le forum ouvert par Pascal Engelmajer pour obtenir la correction à appliquer, Michel Leble explique : « vous éditez (après avoir fait une copie de sauvegarde) le fichier ecrire/req/sqlite_generique.php pour lui ajouter la ligne en vert (sans le + ) selon le commit ici  » :

Cela consiste donc à ajouter cette ligne en vert après la ligne
2527       '/auto_increment/is' => '',
du fichier sqlite_generique.php du SPIP 3.1.3 [23214], ce qui donne :

2527       '/auto_increment/is' => '',
2528       '/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2529       '/(timestamp .* )ON .*$/is' => '\\1',

Après l’application de cette correction la sauvegarde fonctionne à nouveau à la perfection :


Sources - références

  • Fil de discussion de : Pb sauvegarde Pri:ERREUR : Erreur sqlite HY000
    Courcelles Design, Janvier 2019
    Bonjour, je viens de me rendre compte que la sauvegarde d’un SPIP 3.2.1 [23954] échouais avec plein d’erreurs partout...
    https://forum.spip.net/fr_270745.html
  • Fil de discussion de : Problème de sauvegarde
    Pascal Engelmajer , Septembre 2019
    Bonjour, Je suis sous SPIP 3.2.4 [24285] , impossible de faire une sauvegarde complète de la base de donnée dans l’espace privé ! Pour plusieurs il s’affiche [Echec] et elles sont vides.
    https://forum.spip.net/fr_271792.html
  • Fil de discussion de : Sauvegarde au format SQLite impossible avec les dernières version de MariaDB #4374
    Fermé créé il y a 3 ans par olivier.tetard · 11 commentaires
    olivier.tetard a commenté il y a 3 ans
    https://git.spip.net/spip/spip/issues/4374