ITPub博客

首页 > 数据库 > 国内数据库 > 备份与恢复:Polardb数据库数据基于时间点恢复

备份与恢复:Polardb数据库数据基于时间点恢复

原创 国内数据库 作者:jaymarco 时间:2020-11-12 14:58:13 0 删除 编辑

一、前言

任何系统都有崩溃的可能,任何数据库产品的备份工作的重要性毋庸置疑。通过备份和恢复来保护数据,避免数据丢失,在发生灾难或人为误操作的情况下,能够进行恢复日常最重要的工作。不仅要保证能够成功备份,还要保证备份数据能够恢复,如果能在更短的时间进行恢复更是锦上添花。此方案是 Polardb-O 数据库采用全量备份和 PG_WAL 日志来实现基于时间线的恢复工作。
二、环境信息

2.1 主机信息

IP地址

用途

说明

192.168.58.134

备份库


192.168.58.131

业务库

三、恢复过程

业务数据库人为误操作导致库表数据丢失问题,因此需要借助备份库中的基准备份和增量PG_WAL归档日志来实现基于时间线数据恢复。

3.1 数据库备份

3.1.1 归档配置

1 、创建归档目录

# su - polardb

$ mkdir   -p /home/{backups,archive_wals}

 2 、开启归档参数

alter system set wal_level = archive;

alter   system set wal_keep_segments=10;

alter   system set archive_mode = on;

alter   system set archive_command  ='test ! -f   /home/archive_wals/%f && pfs cp -S disk /vda/data/pg_wal/%f   /home/archive_wals/%f   ';

select   pg_reload_conf();

3 、启动数据库

# su - polardb

$   pg_ctl restart -m fast

  说明:如果当前数据库已经开启归档,就可以忽略此部分操作。直接进入下面操作。

 3.1.2 基础备份

1、   使用polar_basebackup 工具创建基础备份

#   su – polardb

# 按日期创建备份路径

$mkdir   -p  /home/backups/0917

$ polar_basebackup   -D /home/backups/0917/base -X stream --progress -v

如下结果说明基础备份完成

154279/154279   kB (100%), 2/2 tablespaces                                        

polar_basebackup: write-ahead log   end point: 2/C00081C0

polar_basebackup: waiting for   background process to finish streaming ...

polar_basebackup: base backup completed

 2、   查看基础备份

$ cat /home/backups/0917/base/backup_label

START   WAL LOCATION: 2/C00080B8 (file 000000010000000200000003)

CHECKPOINT   LOCATION: 2/C00080F0

BACKUP   METHOD: streamed

BACKUP   FROM: master

START   TIME: 2020-09-17 14:34:55 UTC

LABEL: pg_basebackup   base backup

START   TIMELINE: 1

 3.1.3 增量备份

开启了归档后,PG_WAL日志文件写满后,会自动将日志归档到本地目录/home/archive_wals。

# ls -lrt  /home/archive_wals

total   6291456

-rw-------   1 polardb polardb 1073741824 Sep 16 14:28 000000010000000100000002

-rw-------   1 polardb polardb 1073741824 Sep 16 14:44 000000010000000100000003

-rw-------   1 polardb polardb 1073741824 Sep 16 14:47 000000010000000200000000

-rw-------   1 polardb polardb 1073741824 Sep 16 21:25 000000010000000200000001

-rw-------   1 polardb polardb 1073741824 Sep 17 14:33 000000010000000200000002

-rw-------   1 polardb polardb 1073741824 Sep 17 14:53 000000010000000200000003

3.2 数据库恢复

3.2.1 前置准备

准备好一套需要恢复数据库的新主机,并安装相应的polardb-o数据库软件与PFS磁盘管理软件。

1、安装好polardb和PFS软件

# rpm -qa|grep alio

PolarDB-O-0200-2.0.0-20200914083756.alios7.x86_64

t-polarstore-pfsd-san-1.1.41-20200909132342.alios7.x86_64

2、用户环境变量配置

新增polardb用户环境变量.bash_profoke,然后执行soure ~/.bash_profile生效当前用户变量配置。

export PGPORT=5432

export PGDATA=/home/polardb_data

export.utf8

export   PGHOME=/usr/local/polardb_o_20200914

export   PFSHOME=/usr/local/polarstore/pfsd

export PFSDISK=vda

export PFSDIR=/vda/data/

export   LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH

export   PATH=$PGHOME/bin:$PFSHOME/bin/:$PATH

export PGHOST=$PGDATA

export   PGUSER=polardb 

export   PGDATABASE=polardb

3、启动PFS进程

# ps -ef |grep pfsd|grep -v grep

root      2426       1 99 16:31 ?        02:00:02   /usr/local/polarstore/pfsd/bin/../bin/pfsdaemon -p vda -c   /usr/local/polarstore/pfsd/bin/../conf/pfsd_logger.conf


如果没有启动需要手工拉起 pfsd进行

sudo   /usr/local/polarstore/pfsd/bin/start_pfsd.sh -p vda

4、检查PFS文件系统是否具备条件

$ sudo /usr/local/bin/ pfs -C disk ls /vda/

  File    1     4194304           Wed Aug 19 20:25:25 2020  .pfs-paxos

  File    1     1073741824        Wed Aug 19 20:25:26 2020  .pfs-journal

   Dir    1     0                 Wed Sep 16 19:43:29   2020  polar_data

这里的存储目录是 /vda/polar_data/

5、将全量基线备份与增量pg_wal日志上传到需要恢复的服务器

s cp   -r /home/backups/0917/base/  192.168.58.131:/home/recover_dir

scp -r   /home/archive_wals/  192.168.58.131:/home/recover_dir

  说明:确认以上准备工作完成后,就可以进行下面的数据库恢复工作。

3.2.2 库恢复

1.    将pfs文件上面的数据文件拷贝到PFS

# su   – polardb

$sudo   /usr/local/bin/pfs cp -r -S disk /home/recover_dir /base/shared/   /vda/polar_data/

如下日志说明拷贝成功

pfs tool cmd   record:cp -r -S disk   /home/recover_dir/base/shared/   /vda/polar_data/

[PFS_LOG] Sep 17   15:06:12.101890 INF [40734] pfs build   version:libpfs_version_("polarstore-build-desc-3213c11-Wed Sep  9 13:24:13 CST 2020")

[PFS_LOG] Sep 17   15:06:12.102101 INF [40734] pid: 39652, caller: -bash 

[PFS_LOG] Sep 17   15:06:12.102145 INF [40734] pid: 39650, caller: sshd: root@pts/1      

[PFS_LOG] Sep 17   15:06:12.102184 INF [40734] pid: 1003, caller: /usr/sbin/sshd -D 

......

copy file from   /home/recover_dir/base/shared//pg_xact/0000   to /vda/polar_data///pg_xact/0000 succeeded

copy file from   /home/recover_dir/base/shared//pg_multixact/members/0000   to /vda/polar_data///pg_multixact/members/0000 succeeded

copy file from   /home/recover_dir/base/shared//pg_multixact/offsets/0000   to /vda/polar_data///pg_multixact/offsets/0000 succeeded

copy file from   /home/recover_dir/base/shared//polar_non_exclusive_backup_label   to /vda/polar_data///polar_non_exclusive_backup_label succeeded

  2.    检查pfs文件目录内容

$ sudo   /usr/local/bin/pfs  -C disk ls   /vda/polar_data

   Dir    1     256               Thu Sep 17 15:06:13 2020  pg_wal

   Dir    1     768               Thu Sep 17 15:06:32 2020  base

   Dir    1     9344              Thu Sep 17 15:06:36 2020  global

   Dir    1     0                 Thu Sep 17 15:06:36   2020  pg_tblspc

   Dir    1     0                 Thu Sep 17 15:06:36   2020  pg_logindex

   Dir    1     0                 Thu Sep 17 15:06:36   2020  pg_twophase

   Dir    1     128               Thu Sep 17 15:06:36 2020  pg_xact

   Dir    1     0                 Thu Sep 17 15:06:36   2020  pg_commit_ts

   Dir    1     256               Thu Sep 17 15:06:36 2020  pg_multixact

   Dir    1     0                 Thu Sep 17 15:06:36   2020  pg_csnlog

   Dir    1     0                 Thu Sep 17 15:06:36   2020  pg_replslot

  File    1     226   Thu Sep 17 15:06:36 2020  polar_non_exclusive_backup_labe

  3.    恢复本地数据目录

$ cp   -r  /home/recover_dir/base     /home/polardb_data

$chmod 0700   /home/polardb_data

  4.    将归档文件手工拷贝到PFS

1 )、如下是增量日志文件,需要拷贝到PFS中,用于增量数据恢复

$ ls   -lrt /home/recover_dir/archive_wals/

total   6291456

-rw-------   1 polardb polardb 1073741824 Sep 17 15:00 000000010000000100000002

-rw-------   1 polardb polardb 1073741824 Sep 17 15:00 000000010000000100000003

-rw-------   1 polardb polardb 1073741824 Sep 17 15:01 000000010000000200000000

-rw-------   1 polardb polardb 1073741824 Sep 17 15:01 000000010000000200000001

-rw-------   1 polardb polardb 1073741824 Sep 17 15:01 000000010000000200000002

-rw-------   1 polardb polardb 1073741824 Sep 17 15:02 000000010000000200000003

 

2 )、拷贝文件到PFS

/usr/local/bin/pfs   cp -D disk /home/recover_dir/archive_wals//000000010000000100000002   /vda/polar_data/pg_wal/

/usr/local/bin/pfs   cp -D disk /home/recover_dir/archive_wals//000000010000000100000003   /vda/polar_data/pg_wal/

/usr/local/bin/pfs   cp -D disk /home/recover_dir/archive_wals//000000010000000200000000   /vda/polar_data/pg_wal/

/usr/local/bin/pfs   cp -D disk /home/recover_dir/archive_wals//000000010000000200000001   /vda/polar_data/pg_wal/

/usr/local/bin/pfs   cp -D disk /home/recover_dir/archive_wals//000000010000000200000002   /vda/polar_data/pg_wal/

/usr/local/bin/pfs   cp -D disk /home/recover_dir/archive_wals//000000010000000200000003   /vda/polar_data/pg_wal/

 

3 )、检查日志是否同步到PFS

$ sudo   /usr/local/bin/pfs -C disk ls    /vda/polar_data/pg_wal/

   Dir    1     0                 Thu Sep 17 18:10:41   2020  archive_status

  File    1     1073741824        Thu Sep 17 18:55:07 2020  000000010000000200000003

  File    1     1073741824        Thu Sep 17 18:54:20 2020  000000010000000100000002

  File    1     1073741824        Thu Sep 17 18:54:32 2020  000000010000000100000003

  File    1     1073741824        Thu Sep 17 18:54:43 2020  000000010000000200000000

  File    1     1073741824        Thu Sep 17 18:54:49 2020  000000010000000200000001

    F ile  1     1073741824        Thu Sep 17 18:54:57 2020  000000010000000200000002

  5.    配置文件修改postgresql.conf

修改如下两处配置参数文件

修改磁盘路径修改成 /vda/polar_data

polar_datadir='/vda/polar_data'

archive_command='test   ! -f /home/archive_wals/%f && pfs cp -S disk   /vda/polar_data/pg_wal/%f    /home/archive_wals /%f'

 

说明:/home/polardb/archive_wals 此目录需要提前创建好。

6.    基于时间点增量恢复配置

需要在$PGDATA目录下新增恢复配置文件recovery.conf,并指定恢复时间点,修改参数recovery_target_time填写恢复到某个时间点。

  $ vi / home/polardb_data/recovery.conf

restore_command   = ''

recovery_target_time   = '17-SEP-20 14:48:11.0533 +08:00'

7、库恢复

1 、启动数据库,开始恢复

$ pg_ctl   start

数据库启动开始进行恢复,一半恢复一半数据库会停止恢复,看到如下日志。

 

2 、登录数据库psql,执行 resume操作

polardb=#   select  pg_wal_replay_resume() ;

直接完语句后,需要等一段时间才能完成恢复。

 

3 、确认数据库是否恢复完成

polardb=#   select pg_is_in_recovery();

 pg_is_in_recovery

-------------------

 f

查询recovery函数状态为f说明已经恢复成功。f代表主库,t代表备库。

 



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28833846/viewspace-2733771/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
负责数据库、中间件、大数据等基础软件建设、优化和业务保障工作。具有10年的电信与银行企业一线/二线运维管理经验。目前专注研究云计算、中间件和数据库等领域技术研究。持有Oracle OCP、weblogic OCP、Docker容器、PGCE和阿里云ACP等认证

注册时间:2020-06-22

  • 博文量
    76
  • 访问量
    36715