J'essaie de créer une tâche cron pour sauvegarder ma base de données toutes les nuits avant qu'une catastrophe ne se produise. Il semble que cette commande devrait répondre à mes besoins:
0 3 * * * pg_dump dbname | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz
Sauf après avoir exécuté cela, il s'attend à ce que je tape un mot de passe. Je ne peux pas faire ça si je le lance à partir de cron. Comment puis-je en passer un automatiquement?
Créez un fichier .pgpass
dans le répertoire de base du compte sous lequel pg_dump
sera exécuté. Voir la documentation Postgresql libpq-pgpass pour plus de détails sur le format (y compris le dernier paragraphe où il est expliqué qu'il sera ignoré si vous ne définissez pas le mode sur 0600
).
Ou vous pouvez configurer crontab pour exécuter un script. Dans ce script, vous pouvez définir une variable d’environnement comme celle-ci: export PGPASSWORD="$put_here_the_password"
De cette façon, si vous avez plusieurs commandes nécessitant un mot de passe, vous pouvez toutes les insérer dans le script. Si le mot de passe change, il vous suffit de le changer à un endroit (le script).
Et je suis d'accord avec Joshua, l'utilisation de pg_dump -Fc
génère le format d'exportation le plus flexible et est déjà compressé. Pour plus d'informations, voir: documentation pg_dump
Par exemple.
# dump the database in custom-format archive
pg_dump -Fc mydb > db.dump
# restore the database
pg_restore -d newdb db.dump
Si vous voulez le faire en une seule commande:
PGPASSWORD="mypass" pg_dump mydb > mydb.dump
$ PGPASSWORD="mypass" pg_dump -i -h localhost -p 5432 -U username -F c -b -v -f dumpfilename.dump databasename
@Josue Alexander Ibarra answer fonctionne sur centos 7 et version 9.5 Si --dbname n'est pas passé
pg_dump postgresql://username:[email protected]:5432/mydatabase
Corrigez-moi si je me trompe, mais si l'utilisateur du système est identique à l'utilisateur de la base de données, PostgreSQL ™ ne demandera pas le mot de passe - il s'appuie sur le système pour l'authentification. Cela pourrait être une question de configuration.
Ainsi, lorsque je souhaitais que le propriétaire de la base de données postgres
sauvegarde ses bases de données toutes les nuits, je pouvais créer une crontab pour celle-ci: crontab -e -u postgres
. Bien entendu, postgres
devrait être autorisé à exécuter des tâches cron; il doit donc être répertorié dans /etc/cron.allow
, ou /etc/cron.deny
doit être vide.
Comme détaillé dans cet article de blog , il existe deux méthodes pour fournir de manière non interactive un mot de passe aux utilitaires PostgreSQL tels que la commande "pg_dump": en utilisant le fichier ".pgpass" ou en utilisant le "PGPASSWORD " variable d'environnement.
Notez que dans Windows, le fichier pgpass.conf
doit se trouver dans le dossier suivant:
%APPDATA%\postgresql\pgpass.conf
s'il n'y a pas de dossier postgresql
dans le dossier %APPDATA%
, créez-le.
le contenu du fichier pgpass.conf
ressemble à quelque chose comme:
localhost:5432:dbname:dbusername:dbpassword
à votre santé
Ce support m'aide à créer une sauvegarde d'une base de données unique.
PGPASSWORD="yourpassword" pg_dump -U postgres -h localhost mydb > mydb.pgsql