postgis数据库备份
postgis数据库备份
1 |
|
pg数据库的备份
相关插件
使用
pg_rman 使用指南
使用前的相关配置
mkdir -p /var/lib/postgresql/data/pg_log
log_directory 日志目录
mkdir -p /var/lib/postgresql/data/arc_log
wal文件归档目录给目录赋权限
chown postgres:postgres -R /var/lib/postgresql/data/arc_log
su postgres -c "chmod 700 -R /var/lib/postgresql/data/arc_log"
chown postgres:postgres -R /var/lib/postgresql/data/pg_log
su postgres -c "chmod 700 -R /var/lib/postgresql/data/pg_log"
vi /var/lib/postgresql/data/postgresql.conf
编辑postgresql的配置文件postgresql.conf 修改项:
- wal_level = replica
- log_destination = ‘csvlog’
- log_directory = ‘pg_log’
- archive_mode = on
- archive_command = ‘test ! -f /var/lib/postgresql/data/arc_log/%f && cp %p /var/lib/postgresql/data/arc_log/%f’
重启postgres容器
pg_rman 配置验证
su - postgres
psql
show log_destination;
show log_directory;
show archive_command;
初始化pg_rman backup catalog
backup catalog
这个目录将用于存放备份的文件,
同时这个目录也会存放一些元数据,例如备份的配置文件,数据库的systemid,时间线文件历史等等。
初始化命令需要两个参数,分别为备份目标目录,以及数据库的$PGDATA
mkdir -p /var/lib/postgresql/backup
pg_rman init -B /var/lib/postgresql/backup -D /var/lib/postgresql/data
查看pg_rman的配置文件信息
1 |
|
可选添加相关配置
COMPRESS_DATA = YES –压缩数据
KEEP_ARCLOG_FILES = 10 –保存归档文件个数
KEEP_ARCLOG_DAYS = 10 –保存归档的天数
KEEP_DATA_GENERATIONS = 3 –备份冗余度
KEEP_DATA_DAYS = 10 –保存备份集时间
KEEP_SRVLOG_FILES = 10 –保存日志文件个数
KEEP_SRVLOG_DAYS = 10 –保存日志文件天数
pg_rman 命令行用法
备份命令
全量备份:备份整个数据库集群。
1 |
|
增量备份:仅备份使用相同时间轴在上次验证备份后修改的文件或页面。
1 |
|
存档WAL备份:仅备份存档WAL文件
1 |
|
备份集校验(建议在备份后尽快验证备份文件。未验证的备份不能用于还原或增量备份)
1 |
|
删除备份集
按指定时间从catalog删除备份集
例如只需要备份集能恢复到2017-08-30 17:27:49,在这个时间点以前,不需要用来恢复到这个时间点的备份全删掉。但是会保留一次全备份。
加上-f会强制删除
1 |
|
根据备份策略来删除备份集
修改配置文件— pg_rman.ini
KEEP_DATA_GENERATIONS = 3 – 备份集冗余度是3
KEEP_DATA_DAYS = 10 – 备份集保留日期是10d
清除备份集
物理删除已从catalog删除的备份集
上面从备份集中删除的备份,备份集文件夹并没有一起删除
1 |
|
查看命令
查看备份集
1 |
|
显示更多详细信息
1 |
|
恢复命令
恢复前应停止postgreSQL服务器,另外,不要删除原始数据库集群,
因为pg_rman必须从中检查时间线ID或数据校验和状态。
恢复命令将保存未归档的事务日志并删除所有数据库文件。
可以重试恢复,直到创建新的备份。
恢复文件后,pg_rman 创建并配置$PGDATA/pg_rman_recovery.conf,并将include 指令附加到$PGDATA/postgresql.conf。
如果include过去恢复pg_rman 时添加了指令,请将其删除。它创建$PGDATA/recovery.signal文件
1 |
|
恢复到指定时间戳
1 |
|
建议恢复成功后尽快进行全量备份,并删除pg_rman手动配置的恢复相关参数。
相关参数含义
StartTime
备份开始时的时间戳
EndTime
备份结束时的时间戳
Mode
备份模式
FULL
全量备份INCR
增量备份ARCH
归档WAL备份
Data
读取数据文件的大小
ArcLog
读取存档WAL文件的大小
SrvLog
读取服务器日志文件的大小
Total
备份大小(=书面大小)
Compressed
备份是否已压缩
TLI / CurTLI
PostgreSQL的时间轴ID
ParentTLI
PostgreSQL的前时间轴ID
Status
备份状态-
OK
备份已成功完成并经过验证DONE
备份成功完成RUNNING
备份仍在运行DELETING
正在删除备份DELETED
备份已被删除ERROR
备份期间发生一些错误CORRUPT
备份不可用,因为它没有通过验证
pg相关概念
表空间的作用
在 PostgreSQL 中,表空间(tablespace)表示数据文件的存放目录,这些数据文件代表了数据库的对象,
例如表或索引。当我们访问表时,系统通过它所在的表空间定位到对应数据文件所在的位置。
PostgreSQL 中的表空间与其他数据库系统不太一样,它更偏向于一个物理上的概念,表空间的引入为 PostgreSQL 的管理带来了以下好处:
- 如果数据库集群所在的初始磁盘分区或磁盘卷的空间不足,又无法进行扩展,可以在其他分区上创建一个新的表空间以供使用
- 管理员可以根据数据库对象的使用统计优化系统的性能。
例如,可以将访问频繁的索引存放到一个快速且可靠的磁盘上,比如昂贵的固态硬盘。
与此同时,将很少使用或者对性能要求不高的归档数据表存储到廉价的低速磁盘上。
LSN和WAL
WAL即Write-Ahead Logging,预写日志记录,
在写入对数据文件(表和索引所在的位置)的更改时,将描述更改的日志记录刷新到永久存储。
LSN即Log sequence number,日志序列号,这是WAL日志唯一的、全局的标识。
wal日志中写入是有顺序的,比方说一条记录是先加100再乘200,如果顺序错乱变成先乘200再加100,那结果可是差之千里了,
所以必须得记录wal日志的写入顺序,LSN就是负责这个的,给每条产生的wal日志记录一个编号。