联系:手机/微信(+86 17813235971) QQ(107644445)
作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
误操作,在应用端选择每页50条记录然后点击删除,类似这样误操作删除了近10000条记录,现在希望对其进行恢复.对于这种表被误删除数据的,可以使用pdu进行解析wal然后进行恢复.
1. 配置pdu.ini指定wal日志路径
PGDATA=/data/pg/16/data ARCHIVE_DEST=/data/arch
2. 初始化字典信息
PDU.public=# b; 开始初始化... -pg_database:</data/pg/16/data/global/1262> 【postgres】 -pg_schema:</data/pg/16/data/base/5/2615> -pg_class:</data/pg/16/data/base/5/1259>,共86行 -pg_attribute:</data/pg/16/data/base/5/1249>,共3273行 模式: -->public,2张表
3. 关于删除恢复相关帮助
**误删数据恢复** scan t1; │ 扫描被误删的表 restore del <Tx Number>; │ 通过 事务号 恢复被误删的数据 restore del all; │ 通过 时间区间 恢复被误删的数据 -------------------------------------------------------------------------------------------------- add <filenode> <tablename> <attibutes>; │ 将特定表信息手动添加到restore库中 例如: <add 12345 t1 varchar,varchar,timestamp,varchar,numeric,varchar,varchar,varchar,numeric;> -------------------------------------------------------------------------------------------------- restore db <dbname> <DB Path>; │ 初始化特定的数据库目录 (例: restore db xmandb /home/postgres/data/base/290113;) **参数设置** param startwal 000000010000000800000008;│ 设置scan扫描的起始WAL文件,如果未设置则默认是归档目录的第一个文件 param endwal 000000010000000800000009; │ 设置scan扫描的结束WAL文件,如果未设置则默认是归档目录的最后一个文件 param resmode tx|time; │ 设置restore恢复的模式,选择按照【事务号/TX】或【时间区间/TIME】进行恢复 param starttime 2025-01-01_00:00:00; │ 设置scan扫描的起始时间 param endtime 2025-01-01_00:00:00; │ 设置scan扫描的结束时间 reset <param name> │ 重置某个参数 show; │ 查看当前所有参数
4.可以通过param相关参数设置扫描wal日志范围,时间,恢复模式等.我们先使用事务模式确认开始时间
postgres.public=# scan t_delete; 正在扫描表<t_delete>的删除记录... 开始扫描归档目录 |-起始文件<000000030000052500000050> |-终点文件<0000000300000525000000EF> 正在扫描中 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 当前为 事务号恢复 模式,扫描结果将以【事务号】为单位进行输出 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 扫描结束,当前扫描的时间段为 |-开始时间:2025-03-05 18:05:38.006348 CST |-结束时间:2025-03-05 19:00:19.515825 CST -------------------------------------------------------------------------------------------------------------------------------- 时间戳:2025-03-05 18:06:20.420863 CST | 事务号:1360118630 | 数据文件oid:725686 | toast文件oid:725689 |待恢复条数:1 -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- 时间戳:2025-03-05 18:38:06.749572 CST | 事务号:1360430105 | 数据文件oid:725686 | toast文件oid:725689 |待恢复条数:1 -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- 时间戳:2025-03-05 18:48:41.947320 CST | 事务号:1360532435 | 数据文件oid:725686 | toast文件oid:725689 |待恢复条数:50 -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- 时间戳:2025-03-05 18:48:41.948734 CST | 事务号:1360532430 | 数据文件oid:725686 | toast文件oid:725689 |待恢复条数:50 -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- 时间戳:2025-03-05 18:48:41.948754 CST | 事务号:1360532434 | 数据文件oid:725686 | toast文件oid:725689 |待恢复条数:50 -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- 时间戳:2025-03-05 18:48:41.948781 CST | 事务号:1360532432 | 数据文件oid:725686 | toast文件oid:725689 |待恢复条数:50 -------------------------------------------------------------------------------------------------------------------------------- …………………… -------------------------------------------------------------------------------------------------------------------------------- 时间戳:2025-03-05 18:48:56.872903 CST | 事务号:1360536441 | 数据文件oid:725686 | toast文件oid:725689 |待恢复条数:50 -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- 时间戳:2025-03-05 18:48:57.125587 CST | 事务号:1360536457 | 数据文件oid:725686 | toast文件oid:725689 |待恢复条数:36 -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- 时间戳:2025-03-05 18:56:24.931723 CST | 事务号:1360596835 | 数据文件oid:725686 | toast文件oid:725689 |待恢复条数:1 -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- 时间戳:2025-03-05 18:59:38.314220 CST | 事务号:1360621790 | 数据文件oid:725686 | toast文件oid:725689 |待恢复条数:1 -------------------------------------------------------------------------------------------------------------------------------- postgres.public=#
5.基于上述数据,事务情况,可以确认第一次发生删除时间为2025-03-05 18:48:41.947320,最后删除时间为:2025-03-05 18:48:57.125587,重新设置基于时间的恢复模式
postgres.public=# param starttime 2025-03-05_18:48:40; OK! starttime=2025-03-05_18:48:40 postgres.public=# param endtime 2025-03-05_18:49:00; OK! endtime=2025-03-05_18:49:00 postgres.public=# param resmode time; OK! restoreMode=time postgres.public=# show; --------------------------------------------------- | 参数 | 当前值 | --------------------------------------------------- |startwal | | |endwal | | |starttime |2025-03-05 18:48:40.000000 CST| |endtime |2025-03-05 18:49:00.000000 CST| |resmode | TIME | ---------------------------------------------------
6.重新扫描需要恢复表
postgres.public=# scan t_delete; 正在扫描表<t_delete>的删除记录... 开始扫描归档目录 |-起始文件<000000030000052500000050> |-终点文件<0000000300000525000000EF> 正在扫描中 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 当前为 时间区间恢复 模式,将输出该表在时间区间内的所有删除结果 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 扫描结束,当前扫描的时间段为 |-开始时间:2025-03-05 18:48:40.000000 CST |-结束时间:2025-03-05 18:49:00.000000 CST ---------------------------------------------------------------------------------------------------------------------------------------------------- 开始时间:2025-03-05 18:48:40.000000 CST | 结束时间:2025-03-05 18:49:00.000000 CST | 数据文件oid:725686 | toast文件oid:725689 |待恢复条数:9636 ---------------------------------------------------------------------------------------------------------------------------------------------------- postgres.public=#
7.确认删除的记录9636条全部被扫描出来,现在对其进行恢复
postgres.public=# restore del all; 开始扫描归档目录 |-起始文件<000000030000052500000050> |-终点文件<0000000300000525000000EF> 正在扫描中 |-已解析出9636条数据 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 解析结果:成功 9636,【失败 0】(即对应FPW未找到), 共计9636条数据 恢复出的csv文件路径为<restore/public/t_delete_2025-03-05 18:48:40.000000 CST_2025-03-05 18:49:00.000000 CST.csv> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 扫描结束,当前扫描的时间段为 |-开始时间:2025-03-05 18:48:40.000000 CST |-结束时间:2025-03-05 18:49:00.000000 CST restore完成 postgres.public=#
8.恢复数据导入库中
[postgres@localhost pdu]$ psql -f postgres/COPY/public_copy.sql SET COPY 9636