PostgreSQL 数据库备份与恢复

常用各类软硬件使用技巧、疑难、最新资讯等相关交流
回复
rungod
帖子: 54
注册时间: 2010-06-19 3:51

PostgreSQL 数据库备份与恢复

帖子 rungod »

1. 逻辑备份详解
逻辑备份是 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.sql
1.2 pg_dumpall 备份
pg_dumpall 用于备份所有数据库,包括全局对象(如角色和表空间)。

示例:

代码: 全选

pg_dumpall -U postgres > all_databases_backup.sql
恢复方法:

代码: 全选

psql -U postgres < all_databases_backup.sql
1.3 COPY 命令
COPY 用于在表和文件之间进行数据的相互拷贝。

示例:

从表导出数据到文件:

代码: 全选

COPY table_name TO '/path/to/file.csv' CSV HEADER;
从文件导入数据到表:

代码: 全选

COPY table_name FROM '/path/to/file.csv' CSV HEADER;
2. 物理备份详解
物理备份直接备份数据库文件,分为文件级备份和 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();
2.2 pg_basebackup 备份
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
创建 loop 设备:

代码: 全选

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
3.2 创建快照
创建快照逻辑卷:

代码: 全选

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
心海质水
回复