逻辑备份是 PostgreSQL 数据库备份的重要方式之一,主要包括以下几种方法:pg_dump、pg_dumpall 和 COPY。以下是详细解析:
1.1 pg_dump 备份
pg_dump 是 PostgreSQL 提供的用于备份单个数据库的工具。以下是其基本用法:
pg_dump -U username -d database_name > backup.sql
示例:
代码: 全选
pg_dump -U postgres -d testdb > testdb_backup.sql
备份文件为 SQL 格式,包含数据库的表结构和数据。
不包含角色和表空间信息。
恢复方法:
代码: 全选
psql -U username -d database_name < backup.sqlpg_dumpall 用于备份所有数据库,包括全局对象(如角色和表空间)。
示例:
代码: 全选
pg_dumpall -U postgres > all_databases_backup.sql
代码: 全选
psql -U postgres < all_databases_backup.sqlCOPY 用于在表和文件之间进行数据的相互拷贝。
示例:
从表导出数据到文件:
代码: 全选
COPY table_name TO '/path/to/file.csv' CSV HEADER;
代码: 全选
COPY table_name FROM '/path/to/file.csv' CSV HEADER;物理备份直接备份数据库文件,分为文件级备份和 pg_basebackup。
2.1 文件级备份
文件级备份是通过操作系统命令复制数据库文件。以下为热备份的步骤:
启用归档模式:
修改 postgresql.conf 文件:
代码: 全选
archive_mode = on
archive_command = 'cp %p /path/to/archive/%f'开始备份:
代码: 全选
SELECT pg_start_backup('backup_label');代码: 全选
cp -r /path/to/pgdata /path/to/backup代码: 全选
SELECT pg_stop_backup();pg_basebackup 是 PostgreSQL 提供的物理备份工具,支持热备份。
示例:
pg_basebackup -U postgres -D /path/to/backup -F t -z -P
参数说明:
-F t:生成 tar 格式文件。
-z:压缩备份文件。
-P:显示进度。
3. 快照备份详解
快照备份通过逻辑卷管理(LVM)创建数据库文件的快照,减少备份对数据库性能的影响。
3.1 创建逻辑卷
创建文件作为虚拟磁盘:
代码: 全选
dd if=/dev/zero of=/path/to/virtual_disk bs=1M count=2048代码: 全选
losetup /dev/loop0 /path/to/virtual_disk代码: 全选
pvcreate /dev/loop0
vgcreate vg_name /dev/loop0
lvcreate -L 1G -n lv_name vg_name代码: 全选
mkfs.ext4 /dev/vg_name/lv_name
mount /dev/vg_name/lv_name /mnt创建快照逻辑卷:
代码: 全选
lvcreate -L 512M -s -n snapshot_name /dev/vg_name/lv_name代码: 全选
mount /dev/vg_name/snapshot_name /mnt/snapshot代码: 全选
tar -czf backup.tar.gz -C /mnt/snapshot .代码: 全选
umount /mnt/snapshot
lvremove /dev/vg_name/snapshot_name