一、背景引入

在数据库的使用过程中,我们经常会遇到各种突发状况。比如,有时候开发人员一不小心,可能就执行了一个错误的 SQL 语句,把数据库里的重要数据给破坏了。又或者,在进行测试或者开发新功能的时候,需要用到生产环境的数据,可这些数据往往包含了用户的敏感信息,直接使用肯定不行,得先把敏感数据处理掉,也就是进行脱敏。那怎么解决这些问题呢?今天咱们就来聊聊 openGauss 的延迟备库搭建与应用,它能很好地帮我们应对误操作前数据恢复和生产数据脱敏的需求。

二、openGauss 延迟备库的基本概念

简单来说,openGauss 延迟备库就是一个和主数据库保持一定时间间隔同步的备份数据库。这个时间间隔可以根据我们的需求来设置,比如说设置成 1 小时、1 天,甚至更久。延迟备库的数据并不是实时和主库同步的,它会比主库的数据落后一段时间。这样做有什么好处呢?当主库因为误操作或者其他原因导致数据丢失或者损坏的时候,我们就可以从延迟备库里恢复到误操作之前的数据。另外,因为延迟备库的数据和生产环境有一定的时间差,并且不参与实时业务,所以用来进行数据脱敏和测试再合适不过了。

三、搭建 openGauss 延迟备库的步骤

1. 环境准备

首先,我们得有合适的硬件和软件环境。这里假设我们使用的是 Linux 系统,并且已经安装好了 openGauss 数据库。我们还需要两台服务器,一台作为主库,一台作为延迟备库。两台服务器都要能互相通信,并且都安装了相同版本的 openGauss。

2. 配置主库

在主库上,我们要做一些配置工作。打开主库的配置文件,一般是位于 $GAUSSHOME/data 目录下的 postgresql.conf 文件。找到并修改以下参数:

# 技术栈:openGauss SQL 配置
# 开启 wal 日志归档,将日志保存到指定目录
wal_level = replica
# 设置最大归档数
archive_mode = on
# 归档命令,将 wal 日志复制到归档目录
archive_command = 'cp %p /path/to/archive/%f'

修改完配置文件后,需要重启主库,让配置生效。

# 重启 openGauss 主库
gs_ctl restart -D $GAUSSHOME/data

3. 配置延迟备库

在延迟备库上,我们要先创建数据目录,然后初始化数据库。

# 创建数据目录
mkdir -p /data/opengauss
# 初始化数据库
gs_initdb -D /data/opengauss

接着,修改延迟备库的配置文件 postgresql.conf,添加以下参数:

# 技术栈:openGauss SQL 配置
# 设置为备库模式
hot_standby = on
# 设置延迟时间,这里设置为 1 小时(3600 秒)
recovery_min_apply_delay = '3600s'

再创建一个 recovery.conf 文件,内容如下:

# 技术栈:openGauss SQL 配置
# 主库的连接信息
primary_conninfo = 'host=主库 IP 地址 port=主库端口号 user=复制用户名 password=复制用户密码'
# 恢复方式,采用流式复制
recovery_target_timeline = 'latest'

4. 启动延迟备库

完成上述配置后,就可以启动延迟备库了。

# 启动 openGauss 延迟备库
gs_ctl start -D /data/opengauss

四、应用场景分析

1. 误操作前数据恢复

假如有一天,开发人员不小心执行了一个 DROP TABLE 语句,把主库里的一个重要表给删除了。这时候,我们可以利用延迟备库来恢复数据。因为延迟备库的数据比主库落后一段时间,在这个时间范围内,那个表还没有被删除。我们可以从延迟备库里把表的数据备份出来,然后再恢复到主库上。 示例:

# 从延迟备库导出表数据
gs_dump -U username -d dbname -t tablename -F p -f /path/to/backup.sql
# 将备份数据恢复到主库
psql -U username -d dbname -f /path/to/backup.sql

2. 生产数据脱敏

在进行测试或者开发新功能的时候,我们需要用到生产环境的数据,但是又不能直接使用包含敏感信息的数据。这时候,我们可以从延迟备库里获取数据,然后进行脱敏处理。比如,把用户的手机号码中间几位用星号代替,把身份证号码部分信息隐藏等。 示例:

-- 技术栈:openGauss SQL
-- 创建一个新表用于存储脱敏后的数据
CREATE TABLE desensitized_users AS
SELECT 
    user_id,
    -- 将手机号码中间 4 位替换为星号
    CONCAT(LEFT(phone_number, 3), '****', RIGHT(phone_number, 4)) AS phone_number,
    -- 将身份证号码中间 8 位替换为星号
    CONCAT(LEFT(id_card, 6), '********', RIGHT(id_card, 4)) AS id_card
FROM 
    users;

五、技术优缺点

优点

  • 数据恢复保障:当主库出现误操作或者数据损坏时,延迟备库可以提供一个时间点的数据备份,大大提高了数据恢复的成功率。
  • 安全的数据测试:延迟备库的数据和生产环境有一定的时间差,并且不参与实时业务,使用它进行数据脱敏和测试不会影响到生产环境的稳定性。
  • 灵活的延迟设置:可以根据实际需求设置延迟备库和主库的同步时间间隔,满足不同场景的需求。

缺点

  • 数据时效性问题:因为延迟备库的数据比主库落后,所以在某些对数据时效性要求很高的场景下,可能无法满足需求。
  • 资源占用:搭建和维护延迟备库需要额外的硬件资源和网络带宽,增加了成本。

六、注意事项

1. 延迟时间的设置

延迟时间的设置要根据实际需求来确定。如果设置得太短,可能无法满足误操作后数据恢复的需求;如果设置得太长,又会导致数据的时效性太差,影响测试和开发的效果。

2. 网络稳定性

主库和延迟备库之间需要有稳定的网络连接,否则可能会影响数据的同步。可以定期检查网络状况,确保数据能够正常传输。

3. 数据备份

虽然延迟备库本身就是一种数据备份方式,但是我们还是要定期对延迟备库进行全量备份,以防万一。

七、文章总结

通过搭建 openGauss 的延迟备库,我们可以很好地解决误操作前数据恢复和生产数据脱敏的需求。整个搭建过程虽然有一些步骤,但只要按照正确的方法来操作,还是比较容易实现的。在使用延迟备库的过程中,我们要根据实际情况合理设置延迟时间,保证网络的稳定性,并且定期进行数据备份。这样,我们就能充分发挥延迟备库的优势,提高数据的安全性和可用性。