1.什么是物理备份
数据库的物理备份是指直接对数据库的物理文件进行复制和保存的过程,以确保在数据丢失、硬件故障或其他灾难情况下能够恢复数据库。与逻辑备份不同,物理备份涉及的是数据库的存储层面,而不是数据内容层面。
物理备份通常包括数据库的数据文件、日志文件、控制文件等。这些文件被复制并存储在一个安全的位置,以便在需要时恢复。
物理备份可以分为热备份和冷备份两种类型:
- 热备份也称为在线备份,可以在数据库运行期间进行,不需要停止数据库服务,适用于需要高可用性和持续运行的系统。
- 冷备份也称为离线备份,需要停止数据库服务才能进行,适用于可以在非工作时间段停机的系统。
此外,某些存储系统还支持快照功能,可以在很短的时间内生成数据库文件的一个时间点快照,从而实现快速备份和恢复。
逻辑备份主要用于异构数据库的迁移,物理备份主要用于保障数据库数据的可靠性。
2. 如何进行物理备份
openGauss有三个备份工具:gs_backup、gs_basebackup、gs_probackup。gs_backup,gs_basebackup只能进行全量备份,gs_probackup既可以做全量备份,又可以做增量备份。他们的备份原理是类似的,如下我们将针对这三个备份工具进行使用讲解。
2.1 gs_backup工具使用
前提条件:
- 可以正常连接openGauss数据库。
- 在进行还原时,需要保证各节点备份目录中存在备份文件。
- 需以操作系统用户omm执行gs_backup命令。
备份参数文件
#备份
gs_backup -t backup --backup-dir=/mnt/workspace/backups/backup -h 192.168.110.44 --parameter
#恢复
gs_backup -t restore --backup-dir=--backup-dir=/mnt/workspace/backups/backup -h 192.168.110.44 --parameter
备份app目录下的二进制文件
#备份
gs_backup -t backup --backup-dir=/mnt/workspace/backups/backup -h 192.168.110.44 --binary
#恢复
gs_backup -t restore --backup-dir=--backup-dir=/mnt/workspace/backups/backup -h 192.168.110.44 --binary
备份app目录下的二进制文件、pg_hba.conf和postgsql.conf文件
#备份
gs_backup -t backup --backup-dir=/mnt/workspace/backups/backup -h 192.168.110.44 --all
#恢复
gs_backup -t restore --backup-dir=--backup-dir=/mnt/workspace/backups/backup -h 192.168.110.44 --all
2.2 gs_basebackup工具使用
前提条件
- 可以正常连接openGauss数据库。
- 备份过程中用户权限没有被回收。
- pg_hba.conf中需要配置允许复制链接,且该连接必须由一个系统管理员建立。
- 如果xlog传输模式为stream模式,需要配置max_wal_senders的数量, 至少有一个可用。
- 如果xlog传输模式为fetch模式,有必要把wal_keep_segments参数设置得足够高,这样在备份末尾之前日志不会被移除。
- 在进行还原时,需要保证各节点备份目录中存在备份文件,若备份文件丢失,则需要从其他节点进行拷贝。
使用说明:
- 仅支持主机和备机的全量备份,不支持增量。
- 当前支持热备份模式和压缩格式备份。
- 在备份包含绝对路径的表空间时,如果在同一台机器上进行备份,可以通过tablespace-mapping重定向表空间路径,或使用归档模式进行备份。
- 若打开增量检测点功能且打开双写,gs_basebackup也会备份双写文件。
- 若pg_xlog目录为软链接,备份时将不会建立软链接,会直接将数据备份到目的路径的pg_xlog目录下。
- 备份过程中收回用户备份权限,可能导致备份失败或者备份数据不可用。
- 如果因为网络临时故障等原因导致Server端无应答,gs_basebackup将在最长等待120秒后退出。
备份
gs_basebackup -D /mnt/workspace/backups/backup -h 192.168.110.44 -p 31000
恢复
gs_basebackup是对数据库按二进制进行备份,因此恢复时可以直接拷贝替换原有的文件,或者直接在备份的库上启动数据库。
说明:
- 若当前数据库实例正在运行,直接从备份文件启动数据库可能会存在端口冲突,这时需要修改配置文件的port参数,或者在启动数据库时指定一下端口。
- 若当前备份文件为主备数据库,可能需要修改一下主备之间的复制连接。即配置文件中的postgre.conf中的replconninfo1、 replconninfo2等。
- 若配置文件postgresql.conf的参数data_directory打开且有配置,当使用备份目录启动数据库时候,data_directory和备份目录不同会导致启动失败。可以修改data_directory的值为新的数据目录,或者注释掉该参数。
2.3 gs_probackup工具使用
gs_probackup 是管理 openGauss 数据库备份和恢复的工具,用于定期备份和故障恢复。不支持 openGauss 轻量版。功能包括备份单机和集群数据库、外部目录(如脚本、配置、日志、dump 文件等),支持增量备份、定期备份和远程备份,及备份留存策略。
使用限制:
- 备份用户:必须由运行数据库服务器的用户执行。
- 版本一致:备份和恢复的数据库服务器主版本号必须相同。
- 远程备份:需要相同版本数据库,配置无密码 SSH 连接,仅支持 add-instance、backup、restore 命令。
- 恢复前:应先停止数据库进程。
- 用户自定义表空间:备份时需加 –external-dirs 参数。
- 防止超时:调整 postgresql.conf 文件中的 session_timeout、wal_sender_timeout 参数,并调整命令行参数 –rw-timeout。
- 外部目录重定向:使用 -T 选项和 –external-mapping 参数。
- 时钟同步:远程备份时确保时钟同步。
- 权限:确保服务器用户对备份目录有读写权限,防止恢复失败。
3. PITR恢复
PITR(Point-In-Time Recovery,时间点恢复)是一种数据库恢复技术,它允许将数据库恢复到指定的过去某一时间点,以应对数据丢失、错误操作或系统故障等情况。PITR恢复通过结合物理备份和增量日志(如事务日志或归档日志)来实现。在恢复过程中,首先使用最近的全量物理备份恢复数据库,然后应用自备份以来的所有增量日志,直至所需的时间点。这样可以确保数据恢复到问题发生前的准确状态,而不会影响之后的正常操作。
前提条件
- 基于经过物理备份的全量数据文件。
- 基于已归档的WAL日志文件。
PITR恢复流程
- 将物理备份的文件替换目标数据库目录。
- 删除数据库目录下pg_xlog/中的所有文件。
- 将归档的WAL日志文件复制到pg_xlog文件中(此步骤可以省略,通过配置recovery.conf恢复命令文件中的restore_command项替代)。
- 在数据库目录下创建恢复命令文件recovery.conf,指定数据库恢复的程度。
- 启动数据库。
- 连接数据库,查看是否恢复到希望预期的状态。
- 若已经恢复到预期状态,通过pg_xlog_replay_resume()指令使主节点对外提供服务。
4.小结
物理备份通过复制数据库文件进行,包括数据文件和XLOG文件。为了保证备份的有效性,XLOG文件必须覆盖整个备份过程,因为在复制数据时,在线事务可能修改数据页,而这些修改需要通过XLOG恢复来保持一致性。增量备份仅复制自上次备份以来的修改数据页,减少数据量并提高效率,但只能恢复到特定备份时间点。要实现任意时间点恢复,需要全量备份和完整的XLOG日志。