尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

PostgreSQL你疯了么,备份恢复竟然可以这么玩?

PostgreSQL你疯了么,备份恢复竟然可以这么玩? 在PostgreSQL中有多种流行的PostgreSQL备份工具比如pg_dump、pg_basebackup、pgBackRest、pg_rman等防止数据丢失的第一道防线就是备份接下里给大家介绍PostgreSQL一些备份恢复的新姿势哈1. 块级别恢复PostgreSQL在全量备份之后,增量备份则需要借助归档的方式刚发布的PostgreSQL 17在pg_basebackup中新增了一个pg_combinebackup命令用于合并备份可以实现块级别的增量备份。使用这个特性需要在数据库打开参数summarize_wal为onPG17的pg_basebackup命令生成的备份文件多了一个backup_manifest文件该文件记录的是每个checkpoint周期的WAL日志中记录的变动的block等信息用于增量备份。1. 设置参数 ALTER system SET summarize_wal ON; SELECT pg_reload_conf(); 2.全量备份 pg_basebackup -Fp -D /backup/FULL_BK 3.增量备份 pg_basebackup -Fp -D /backup/INCREMENTAL_01 \ -i /backup/FULL_BK/backup_manifest 注-i参数指定上一个备份的backup_manifest文件 4.继续增量备份 pg_basebackup -Fp -D /backup/INCREMENTAL_02 \ -i /backup/INCREMENTAL_01/backup_manifest那么接下来我们就可以合并增量备份实现数据库的恢复了但是要注意合并的备份要保证顺序和连续性哈1.合并目前所有备份 cd /backup pg_combinebackup FULL_BK INCREMENTAL_01 INCREMENTAL_02 \ -o ALL-FULL 2.合并全量备份和部分增量备份 同时也可以选择合并到指定增量备份的那么我们就这么做 cd /backup pg_combinebackup FULL_BK INCREMENTAL_01 -o ALL-FULL 3.可以直接启动合并后的备份数据库 pg_ctl start -D /backup/ALL-FULL -o -p 5433在这里我们要注意的是合并备份时需要全量备份处于第一位并且增量备份需要保持顺序和连续性。pg_combinebackup工具并不会做文件缺失等验证性工作所以在合并备份之前要先使用pg_verifybackup工具对备份进行提前验证。2. PIRT恢复在PostgreSQL中PITRPoint-In-Time Recovery是一种恢复技术它允许你将数据库恢复到某个特定时间点或事务的状态。接下来就给大家来分享一下基于时间点的恢复当然还可以指定还原点或者指定到特定的事物1.开启WAL归档 vim $PGDATA/postgresql.conf wal_levelreplica archive_modeon archive_commandcp %p /backup/pgarch 2.备份 pg_basebackup -Ft -Pv -Xf -z -Z5 -p5432 -D /pdback 3.初始化数据 create table test01(id int primary key,name varchar(20)); insert into test01 values(1,a),(2,b),(3,c); 先查看一下当前的时间戳 切换一下wal日志确保最新的wal日志同步到归档目录 select current timestamp;current timestamp 2024-12-07 14:14:29.97583308 4.误操作将数据删除 select * from test01; delete from test01; select pg_switch_wal(); 5.基于时间点恢复 清理原数据库的目录里面的数据, 将备份的数据拷贝回数据库的目录中 rm -rf $PGDATA/* cp -r /home/postgres/backup/* $PGDATA vi $PGDATA/postgresql.auto.conf restore_commandcp /backup/pgarch/%f %p recovery_target_time2024-12-07 14:14:29.97583308 recovery_target_timelinelatest最后启动数据库后,数据库会在指定的时间点停止. 此时数据库可以进行联机但是要注意解除暂停状态否则pg数据库处于只读状态。select pg_wal_replay_resume();3.神奇的pg_receivewalpg_receivewal是一个PostgreSQL工具用于接收并应用 WALWrite-Ahead Log归档文件。它通常与pg_start_backup 和 pg_basebackup 一起使用进行数据的增量备份。它可以接受连续的wal日志是基于流复制的方式进行增量备份非常的方便哈1.使用pg_basebackup创建一个新的备份 pg_basebackup -U username -h localhost -D /path/to/new_backup 2.使用pg_receivewal捕获WAL文件 pg_receivewal -D /path/to/new_backup/wal -h localhost -U username -v 3.在新备份上使用recovery.conf进行恢复 echo restore_command cp /path/to/new_backup/wal/%f %p /path/to/new_backup/recovery.conf # 启动PostgreSQL服务 service postgresql start总结PostgreSQL通过合理选择备份策略、定期执行备份任务、测试备份恢复流程可以确保数据库在面临意外情况时能够迅速有效地进行恢复保障数据的安全性和可用性。
返回列表