Debian PostgreSQL备份恢复步骤
Debian PostgreSQL Backup and Recovery Steps
This guide covers logical (pg_dump/pg_restore) and physical (pg_basebackup) backup methods, along with Point-in-Time Recovery (PITR) for Debian-based PostgreSQL systems.
Logical Backup (pg_dump)
Logical backups export database objects (tables, schemas, data) as SQL or custom-format files, suitable for granular recovery (e.g., individual tables).
Backup Steps
-
Install PostgreSQL Client Tools (if not installed):
sudo apt update & & sudo apt install postgresql-client -
Run pg_dump Command:
Usesudo -u postgresto execute as the PostgreSQL superuser. Key options:-U: Database user (default:postgres).-d: Target database name.-F: Output format (t=custom binary,c=plain SQL,p=plain text).-f: Output file path.
Examples:
- Full database backup (custom format, compressed):
sudo -u postgres pg_dump -U postgres -F t -f /var/backups/mydb_backup.tar mydb gzip /var/backups/mydb_backup.tar # Optional compression - Plain SQL backup (restorable via
psql):sudo -u postgres pg_dump -U postgres -f /var/backups/mydb.sql mydb
Restore Steps
- Stop PostgreSQL (recommended for consistency):
sudo systemctl stop postgresql - Restore Using pg_restore (Custom Format):
sudo -u postgres pg_restore -U postgres -d mydb /var/backups/mydb_backup.tar - Restore Using psql (Plain SQL):
sudo -u postgres psql -U postgres -d mydb -f /var/backups/mydb.sql - Start PostgreSQL:
sudo systemctl start postgresql
Physical Backup (pg_basebackup)
Physical backups copy the entire PostgreSQL data directory (including WAL files), ideal for large databases or full-cluster recovery.
Backup Steps
- Create Backup Directory:
sudo mkdir -p /mnt/pg_backup sudo chown postgres:postgres /mnt/pg_backup - Run pg_basebackup:
sudo -u postgres pg_basebackup -D /mnt/pg_backup -F t -z -P -h localhost -p 5432 -U postgres-D: Backup destination.-F t: Tar format (compresses data).-z: Compress output.-P: Show progress.
Point-in-Time Recovery (PITR)
PITR recovers the database to a specific timestamp or transaction ID using WAL (Write-Ahead Logging) archiving.
Prerequisites
-
Enable WAL Archiving:
Editpostgresql.conf(typically at/etc/postgresql/< version> /main/postgresql.conf):wal_level = replica archive_mode = on archive_command = 'cp %p /mnt/pg_arch/%f' max_wal_senders = 2 wal_keep_segments = 32Restart PostgreSQL:
sudo systemctl restart postgresql -
Perform Full Backup:
Usepg_basebackup(see above) to create a base backup before enabling PITR.
Recovery Steps
-
Stop PostgreSQL:
sudo systemctl stop postgresql -
Clear Existing Data Directory:
sudo rm -rf /var/lib/postgresql/< version> /main/* -
Restore Base Backup:
sudo cp -r /mnt/pg_backup/* /var/lib/postgresql/< version> /main/ -
Configure PITR Parameters:
Create/modifypostgresql.auto.confin the data directory:restore_command = 'cp /mnt/pg_arch/%f %p' recovery_target_time = '2025-11-07 10:00:00' # Target timestamp recovery_target_timeline = 'latest' -
Start PostgreSQL in Recovery Mode:
sudo systemctl start postgresqlPostgreSQL will apply WAL logs until reaching
recovery_target_time, then exit recovery mode automatically. -
Verify Recovery:
sudo -u postgres psql -c "\l" # List databases sudo -u postgres psql -d mydb -c "\dt" # List tables
Key Notes
- Automation: Schedule logical backups via
cron(e.g., daily at 2 AM):0 2 * * * sudo -u postgres pg_dump -U postgres -F t -f /var/backups/$(date +\%F)_mydb.tar mydb - Testing: Regularly test backups by restoring them to a staging environment.
- Security: Store backups in secure locations (e.g., encrypted volumes) and restrict access to authorized users.
- Large Databases: Prefer
pg_basebackupfor physical backups (faster for large datasets).
For detailed options, refer to the PostgreSQL documentation.
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian PostgreSQL备份恢复步骤
本文地址: https://pptw.com/jishu/745494.html
