Follow

Les gens, est-ce qu'il y a moyen de récupérer une base de donnée juste en copiant les fichiers, pour ensuite pouvoir en extraire un dump.sql avec les données qui m'intéressent ?

Autrement dit, de récupérer les fichiers et de s'y connecter après coup, en dehors du système d'origine ?

Apparemment dans /var/lib/postgresql/9.4/main, j'ai des fichiers comme "base", ça pourrait être ça ?

Autrement dit: la base est bien stockée dans des fichiers ?

Y'a moyen de les copier ailleurs (imaginons sur une base vierge, par exemple), et de s'en servir pour faire un export ?)

@Lapineige De façon naïve, je dirais: oui. Arrête la DB pendant la copie. 😉

@flynn système planté, je récupère ça avec un live ISO, aucun risque 😂

@Lapineige Pour MySQL, j'en suis sur car je l'ai déjà fait à chaud... Pour postgresql. Je ne sais pas.

@Lapineige Pour MySQL, c'était simple. Copier tous les fichiers dans /var/lib/mysql/ et les mettre pareils sur le deuxième serveur. Démarrer le service MySQL et prier !

@flynn j'espérais un truc aussi simple pour postgresql… l'avantage du fichier texte 😄

@Lapineige pas vraiment puisque le reste du système ne va pas savoir que les fichiers existent et correspondent à une base…

Tu as un paramètre pour gérer un .tar dans pg_dump mais il va te manquer des métadonnées a priori.

@Lapineige quand tu créés une base, Pg stocke des infos à propos de cette base et sait où sont les fichiers.

Si tu prends les fichiers quelque part et les mets sur une autre base, la nouvelle ne saura pas vraiment quoi en faire…

@Lapineige ça… dépend de ton installation de Postgres, généralement tout est dans genre /var/db/pgsql ou équivalent. Souvent un répertoire par base.

@Lapineige c'est exportable avec la commande pg_dump qui sert justement à sauvegarder tout ou partie des bases.

@Lapineige justement non, pour les raisons que j'ai évoquées :)

@Keltounet mais c'est bien stocké dans un fichier quelque part ?
Aucune façon de les récupérer ?

@Lapineige récupérer les fichiers forcément oui mais tu ne pourras pas les faire exploiter par ton autre instance.

Si tu peux faire un pg_dump de ta base sur le Pg de départ, c'est mieux.

@Keltounet @Lapineige j'ai peut etre mal compris la question, mais tu peux recuperer une db pg si tu as une copie de tout le repertoire data sur une nouvelle machine, et ensuite extraire a partir du nouveau serveur la db ou les tables qui t'interessent.
@Lapineige @Keltounet

1/ service postgresql stop on old machine ( ou si la machine est plantee rab )
2/ rsync /var/lib/postgresql newmachine:/var/lib/
3/ service postgresql start sur newmachine
4/ su - postgres -c 'pg_dump ....'

Avec pg identique en version ca devrait passer sans pb, si tu up, pg_upgradecluster peut aider...
@Lapineige @Keltounet tu voulais pas extraire juste une table ou une db en particulier ?

@Keltounet @Lapineige ben euh si si c'est tout à fait possible de les faire exploiter par une nouvelle instance, copier les fichiers de /var/lib/postgresql/<version>/<cluster> c'est comme ça qu'on sauvegarde la base quand on a passé la taille où pg_dump est exploitable.

Pour restaurer, il faut copier l'intégralité du répertoire, et créer un fichier de configuration (voir /etc/postgresql/<version>/<cluster>/postgresql.conf qui pointe vers le répertoire où les fichiers ont été copiés

@Lapineige la seule chose critique à faire, c'est de réutiliser la même version de postgresql à la destination;

Une fois les fichiers copiés et sauvegardés (pour pouvoir les récupérer si la suite ne fonctionne pas), on peut relancer postgresql, qui va rejouer les WALs restants (c'est le journal qui contient les modifications des blocs de données pour réduire la quantité d'accès disque)

@Keltounet

@olasd ok ça a priori ça sera bon, réinstallation + mise à jour du même système Debian.
@Keltounet

@Lapineige OK ! hésite pas à me bipper si tu as un souci après la réinstall, je fais pas mal de postgresql / debian pour le travail et j'ai jamais réussi à vraiment casser une base postgres :)

Et pour le futur, autopostgresqlbackup c'est un tout petit script qui fait un pg_dump régulièrement et garde un historique, c'est vachement plus facile à restaurer que le répertoire de données brut :D

@Lapineige

Une fois les WAL rejoués le serveur va démarrer et accepter les connexions clientes, et là tu pourras faire un pg_dump ou des requêtes pour récupérer les données

@Keltounet

@olasd @Lapineige @Keltounet et le serveur d'origine on doit l'arrêter avant ou on peut copier sans crainte pour l'intégrité de la copie ?

@mmu_man

Quand on fait une sauvegarde en utilisant la copie du répertoire de données, il faut exécuter pg_start_backup / pg_end_backup pour s'assurer que postgres soit capable de tout rejouer et que les données copiées soient cohérentes. Des outils comme pg_basebackup (fourni avec postgres), ou barman / pgbackrest emballent tout ça dans une seule commande qui fonctionne à tous les coups

@Lapineige @Keltounet

@mmu_man bleh, pg_stop_backup, pas pg_end_backup. Mais bon utiliser les outils adéquats sur lesquels les gens ont réfléchi ça évite de se tromper en tootant :D

@djayroma pourquoi ?

Une méthode pour contourner cela existe-t-elle ?

@djayroma réalisable si on n'est sur un système live qui vient lire les fichiers du disque où y'a postgresql ?

@Lapineige heu attend... Il faut que tu utilise le postgres du système pas du live

@Lapineige oui c'est la force de posix (et largement de Linux, et de bsd j'imagine) sur le reste des ersatz d'informatique qui ont la dragée haute dans ce monde distopique qui nous sert de réalité

@djayroma eu... j'avais monté sur un dossier de /media, j'ai chroot dessus

@Lapineige ça suffit pas, cherche chroot sur un bon moteur de recherche

@Lapineige il faut que tu monte /dev /sys et /proc sinon ton chroot ne marche pas

Show more
Sign in to participate in the conversation
La Quadrature du Net - Mastodon - Media Fédéré

Bienvenue dans le media fédéré de la Quadrature du Net association de défense des libertés. Les inscriptions sont ouvertes et libres.
Tout compte créé ici pourra a priori discuter avec l'ensemble des autres instances de Mastodon de la fédération, et sera visible sur les autres instances.
Nous maintiendrons cette instance sur le long terme.