sauvegarde sqlite : erreur fatale

Bonjour,

Je voudrais supprimer un tas de vieux événements sur un site en 3.1.4, et donc le faire directement dans la base sqlite avec sqliteman (beaucoup trop long directement dans la partie privée du site). Question de principe, pas besoin de garder la mémoire de tout.

Donc j’essaie de faire une sauvegarde de la base mais j’ai un message d’erreur :
« Erreur fatale lors de la copie de la table spip_paquets »

Pourtant j’ai bien une sauvegarde qui apparait dans tmp/dump, qui pèse environ 7Mo, ce qui est la taille normale qu’elle devrait avoir.

Mais enfin après un message d’erreur j’ose pas trop tenter une restauration de base à partir de ce fichier là ! Vous en pensez quoi ?
Je ne peux pas faire le test en local parce que quand je crée un site local je ne peux pas lui attribuer de base sqlite, je suis obligé de le faire en mysql (je ne sais pas pourquoi, je suis en linux mageia5 et les paquets sqlite sont bien installés).

Par ailleurs, je ne sais pas si ça a un rapport, mais la page « maintenance technique » contient ce message d’erreur :
Fatal error: Cannot redeclare req_pg_dist() (previously declared in /var/www/alternc/p/moncompte/www/monsite.fr/ecrire/req/pg.php:32) in /var/www/alternc/p/moncompte/www/monsite.fr/ecrire/req/pg.exp.php on line 93

A part ça le site fonctionne à peu près bien.
Merci de vos conseils,

Etienne

Sais tu d'où vient ce fichier pg.exp.php ??

Et, indépendamment de la sauvegarde qui est toujours sqlite,
ton spip tourne t il sur une base mysql, sqlite ou pgsql ?

JLuc

Le 18/05/2017 à 22:12, Etienne a écrit :

Je voudrais supprimer un tas de vieux événements sur un site en 3.1.4, et donc le faire directement dans la base sqlite avec sqliteman (beaucoup trop long directement dans la partie privée du site). Question de principe, pas besoin de garder la mémoire de tout.

Donc j'essaie de faire une sauvegarde de la base mais j'ai un message d'erreur :
"Erreur fatale lors de la copie de la table spip_paquets"

Pourtant j'ai bien une sauvegarde qui apparait dans tmp/dump, qui pèse environ 7Mo, ce qui est la taille normale qu'elle devrait avoir.

Mais enfin après un message d'erreur j'ose pas trop tenter une restauration de base à partir de ce fichier là ! Vous en pensez quoi ?
Je ne peux pas faire le test en local parce que quand je crée un site local je ne peux pas lui attribuer de base sqlite, je suis obligé de le faire en mysql (je ne sais pas pourquoi, je suis en linux mageia5 et les paquets sqlite sont bien installés).

Par ailleurs, je ne sais pas si ça a un rapport, mais la page "maintenance technique" contient ce message d'erreur :
*Fatal error*: Cannot redeclare req_pg_dist() (previously declared in /var/www/alternc/p/moncompte/www/monsite.fr/ecrire/req/pg.php:32) in */var/www/alternc/p/moncompte/www/monsite.fr/ecrire/req/pg.exp.php* on line *93*

A part ça le site fonctionne à peu près bien.
Merci de vos conseils,

Etienne

--
Avez-vous noté ma nouvelle adresse courriel ?
Notez au passage ma clé publique de chiffrage OpenPGP : 86FBA556
Elle vous permet de m'envoyer un courriel privé au lieu d'une carte postale.
---

Si je me souviens bien le site tourne sous une base sqlite. Je ne sais
d'ailleurs pas comment la retrouver chez mon hébergeur lautre.net sans
en faire une sauvegarde via le site. Quand c'est sous une base mysql il
y a un accès chez l'hebergeur via phpmyadmin sur le bureau altern.

Pour l'autre question :

Sais tu d'où vient ce fichier pg.exp.php ??

Ah non pas la moindre idée de ce que c'est ! Au début du fichier il est
écrit ça :
"* Ce fichier contient les fonctions gerant
* les instructions SQL pour PostgreSQL"

Et la ligne 93 c'est juste ça :
"}"
Apparemment un truc fermé mais qui n'a pas été ouvert. Mais où mettre le
"{" ?
Je mets ci-dessous tout le fichier jusqu'à cette ligne 93 :

<?php

/*
*************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2016 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/

/**
* Ce fichier contient les fonctions gerant
* les instructions SQL pour PostgreSQL
*
* @package SPIP\Core\SQL\PostgreSQL
*/

if (!defined('_ECRIRE_INC_VERSION')) {
    return;
}

define('_DEFAULT_DB', 'spip');

// Se connecte et retourne le nom de la fonction a connexion persistante
// A la premiere connexion de l'installation (BD pas precisee)
// si on ne peut se connecter sans la preciser
// on reessaye avec le login comme nom de BD
// et si ca marche toujours pas, avec "spip" (constante ci-dessus)
// si ca ne marche toujours pas, echec.

// http://code.spip.net/@req_pg_dist
function req_pg_dist($addr, $port, $login, $pass, $db = '', $prefixe = '') {
    static $last_connect = array();
    if (!charger_php_extension('pgsql')) {
        return false;
    }

    // si provient de selectdb
    if (empty($addr) && empty($port) && empty($login) && empty($pass)) {
        foreach (array('addr', 'port', 'login', 'pass', 'prefixe') as $a) {
            $$a = $last_connect[$a];
        }
    }
    @list($host, $p) = explode(';', $addr);
    if ($p > 0) {
        $port = " port=$p";
    } else {
        $port = '';
    }
    $erreurs = array();
    if ($db) {
        @$link = pg_connect("host=$host$port dbname=$db user=$login
password='$pass'", PGSQL_CONNECT_FORCE_NEW);
    } elseif (!@$link = pg_connect("host=$host$port user=$login
password='$pass'", PGSQL_CONNECT_FORCE_NEW)) {
        $erreurs = pg_last_error();
        if (@$link = pg_connect("host=$host$port dbname=$login
user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW)) {
            $db = $login;
        } else {
            $erreurs = pg_last_error();
            $db = _DEFAULT_DB;
            $link = pg_connect("host=$host$port dbname=$db user=$login
password='$pass'", PGSQL_CONNECT_FORCE_NEW);
        }
    }
    if (!$link) {
        $erreurs = pg_last_error();
        foreach ($erreurs as $e) {
            spip_log('Echec pg_connect. Erreur : ' . $e, 'pg.' . _LOG_HS);
        }

        return false;
    }

    if ($link) {
        $last_connect = array(
            'addr' => $addr,
            'port' => $port,
            'login' => $login,
            'pass' => $pass,
            'db' => $db,
            'prefixe' => $prefixe,
        );
    }

    spip_log("Connexion vers $host, base $db, prefixe $prefixe " .
($link ? 'operationnelle' : 'impossible'),
        'pg.' . _LOG_DEBUG);

    return !$link ? false : array(
        'db' => $db,
        'prefixe' => $prefixe ? $prefixe : $db,
        'link' => $link,
    );
}

Et, indépendamment de la sauvegarde qui est toujours sqlite,
ton spip tourne t il sur une base mysql, sqlite ou pgsql ?

JLuc

Le 18/05/2017 à 22:12, Etienne a écrit :

Je voudrais supprimer un tas de vieux événements sur un site en
3.1.4, et donc le faire directement dans la base sqlite avec
sqliteman (beaucoup trop long directement dans la partie privée du
site). Question de principe, pas besoin de garder la mémoire de tout.

Donc j'essaie de faire une sauvegarde de la base mais j'ai un message
d'erreur :
"Erreur fatale lors de la copie de la table spip_paquets"

Pourtant j'ai bien une sauvegarde qui apparait dans tmp/dump, qui
pèse environ 7Mo, ce qui est la taille normale qu'elle devrait avoir.

Mais enfin après un message d'erreur j'ose pas trop tenter une
restauration de base à partir de ce fichier là ! Vous en pensez quoi ?
Je ne peux pas faire le test en local parce que quand je crée un site
local je ne peux pas lui attribuer de base sqlite, je suis obligé de
le faire en mysql (je ne sais pas pourquoi, je suis en linux mageia5
et les paquets sqlite sont bien installés).

Par ailleurs, je ne sais pas si ça a un rapport, mais la page
"maintenance technique" contient ce message d'erreur :
*Fatal error*: Cannot redeclare req_pg_dist() (previously declared in
/var/www/alternc/p/moncompte/www/monsite.fr/ecrire/req/pg.php:32) in
*/var/www/alternc/p/moncompte/www/monsite.fr/ecrire/req/pg.exp.php*
on line *93*

A part ça le site fonctionne à peu près bien.
Merci de vos conseils,

Etienne

--
Avez-vous noté ma nouvelle adresse courriel ?
Notez au passage ma clé publique de chiffrage OpenPGP : 86FBA556
Elle vous permet de m'envoyer un courriel privé au lieu d'une carte
postale.
---

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Merci de l'aide,
Etienne

--
Avez-vous noté ma nouvelle adresse courriel ?
Notez au passage ma clé publique de chiffrage OpenPGP : 86FBA556
Elle vous permet de m'envoyer un courriel privé au lieu d'une carte postale.
---

Le 20/05/2017 à 15:19, Etienne a écrit :

Si je me souviens bien le site tourne sous une base sqlite.

Ah ben c'est utile à savoir
de même que savoir si une voiture roule au gazoil ou à l'essence
:slight_smile:

Je ne sais d'ailleurs pas comment la retrouver chez mon hébergeur lautre.net sans
en faire une sauvegarde via le site.

Pour l'autre question :

Sais tu d'où vient ce fichier pg.exp.php ??

En fait vc'est le fichier livré avec SPIP maintenant.
Le .exp veut dire expérimental car c'est foireux
et il remplace l'ancien pg.php que tu ne devrais plus avoir.
Donc déjà supprime pg.php

Ceci dit, je sais pas pourquoi quand ya les 2, ils s'appellent l'un l'autre
ni pourquoi c'est appelé alors que a priori tu n'as pas une base pg...

JLuc

Merci de ta réponse,

alors effectivement quand je renomme le fichier pg.php en pg.php-old je
n'ai plus le message d'erreur en ouvrant l'onglet "maintenance technique".

Par contre j'ai toujours l'erreur quand je tente de sauvegarder ma base :
"Erreur fatale lors de la copie de la table spip_paquets "

Merci encore

Le 20/05/2017 à 16:30, JLuc a écrit :

Pour l'autre question :

Sais tu d'où vient ce fichier pg.exp.php ??

En fait vc'est le fichier livré avec SPIP maintenant.
Le .exp veut dire expérimental car c'est foireux
et il remplace l'ancien pg.php que tu ne devrais plus avoir.
Donc déjà supprime pg.php

Ceci dit, je sais pas pourquoi quand ya les 2, ils s'appellent l'un
l'autre
ni pourquoi c'est appelé alors que a priori tu n'as pas une base pg...

Le 20/05/2017 à 16:30, JLuc a écrit :

Ceci dit, je sais pas pourquoi quand ya les 2, ils s'appellent l'un l'autre

Ah si ! Il doit y avoir un include_once(pg.php) dans pg.exp.php
et donc logique...

ni pourquoi c'est appelé alors que a priori tu n'as pas une base pg...

que contient ton fichier connect.php ? (en obfuscant les codes)
JL

Le 20/05/2017 à 21:02, JLuc a écrit :

Le 20/05/2017 à 16:30, JLuc a écrit :

Ceci dit, je sais pas pourquoi quand ya les 2, ils s'appellent l'un
l'autre

Ah si ! Il doit y avoir un include_once(pg.php) dans pg.exp.php
et donc logique...

ni pourquoi c'est appelé alors que a priori tu n'as pas une base pg...

que contient ton fichier connect.php ? (en obfuscant les codes)
JL

__

Offusquer les codes, c'est à dire ?

Connect.php (dans config ?) ne contient que ça :

<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
$GLOBALS['spip_connect_version'] = 0.7;
spip_connect_db('localhost','','','','monsite','sqlite3', 'spip','');
?>

Le 22/05/2017 à 15:07, Etienne a écrit :

Offusquer les codes, c'est à dire ?

Hihi obfusquer n'est pas offusquer.

Connect.php (dans config ?) ne contient que ça :
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
$GLOBALS['spip_connect_version'] = 0.7;
spip_connect_db('localhost','','','','monsite','sqlite3', 'spip','');
?>

Ça dit que ton site utilise sqlite.
Pour le reste je ne sais pas.
JL

Bonjour,
je reviens avec mon problème non réglé de sauvegarde de base sur un site
3.1.
Une tentative de sauvegarde de la base sqlite donne systématiquement le
message d'erreur : "Erreur fatale lors de la copie de la table
spip_paquets "

Si je sauvegarde toute la base sauf "spip_paquets", ça fonctionne. Mais
ça ne va pas poser un problème lors de la restauration ?

Solution de contournement : est-ce que sauvegarder le fichier
/config/bases/monsite.sqlite en ftp par exemple est suffisant ? Je peux
me contenter de remettre ce fichier à sa place après l'avoir bidouiller
ou en cas de problème, et ça fonctionnera ?

(en fait je voudrais supprimer quelques centaines d'événements des
années passées et je veux le faire direct dans la base parce que via le
site il y en a pour des heures.)
Merci d'avance,
Etienne