外观
GaussDB 备份恢复命令
全量备份命令
全量备份是指备份数据库的完整内容,包括所有数据文件、配置文件和WAL日志。全量备份是增量备份和差异备份的基础,也是最常用的备份方式之一。
1. 使用gs_basebackup进行全量备份
gs_basebackup是GaussDB提供的基于PostgreSQL原生的备份工具,适用于简单的全量备份需求。以下是常用的gs_basebackup命令示例:
bash
# 基本全量备份
gs_basebackup -D /backup/gaussdb/full_backup_$(date +%Y%m%d) -Fp -Xs -c fast -h localhost -p 5432 -U backup -W
# 压缩备份
gs_basebackup -D /backup/gaussdb/full_backup_$(date +%Y%m%d) -Fp -Xs -c fast -z -h localhost -p 5432 -U backup -W
# 并行备份
gs_basebackup -D /backup/gaussdb/full_backup_$(date +%Y%m%d) -Fp -Xs -c fast -j 4 -h localhost -p 5432 -U backup -W
# 备份到tar文件
gs_basebackup -D /backup/gaussdb/ -Ft -Xs -c fast -z -h localhost -p 5432 -U backup -W -v参数说明:
-D:指定备份输出目录-Fp:使用普通文件格式备份-Ft:使用tar文件格式备份-Xs:在备份过程中流式传输WAL日志-c fast:使用快速 checkpoint 模式-z:启用压缩-j:指定并行备份的线程数-h:指定数据库主机地址-p:指定数据库端口-U:指定备份使用的用户名-W:提示输入密码-v:启用详细输出
2. 使用gs_probackup进行全量备份
gs_probackup是GaussDB提供的增强型备份工具,支持全量备份、增量备份、差异备份以及更丰富的备份管理功能。以下是常用的gs_probackup命令示例:
bash
# 初始化备份目录
gs_probackup init -B /backup/gaussdb
# 添加备份实例
gs_probackup add-instance -B /backup/gaussdb -D /data/gaussdb --instance gaussdb_instance
# 进行全量备份
gs_probackup backup -B /backup/gaussdb --instance gaussdb_instance -b full -d postgres -h localhost -p 5432 -U backup -W
# 带有压缩的全量备份
gs_probackup backup -B /backup/gaussdb --instance gaussdb_instance -b full -d postgres -h localhost -p 5432 -U backup -W --compress=zlib参数说明:
-B:指定备份目录-D:指定数据库数据目录--instance:指定备份实例名称-b:指定备份类型(full:全量备份)-d:指定连接的数据库名称-h:指定数据库主机地址-p:指定数据库端口-U:指定备份使用的用户名-W:提示输入密码--compress:指定压缩算法(zlib、pglz或none)
增量备份命令
增量备份是指只备份自上次备份(全量或增量)以来发生变化的数据,相比全量备份,增量备份具有备份时间短、占用存储空间小等优势。差异备份是增量备份的一种特殊形式,只备份自上次全量备份以来发生变化的数据。
1. 使用gs_probackup进行增量备份
GaussDB的gs_probackup工具支持增量备份和差异备份,以下是常用的命令示例:
bash
# 基于上次备份的增量备份
gs_probackup backup -B /backup/gaussdb --instance gaussdb_instance -b incremental -d postgres -h localhost -p 5432 -U backup -W
# 基于特定备份的增量备份
gs_probackup backup -B /backup/gaussdb --instance gaussdb_instance -b incremental --parent-backup=QPSQL20231201120000 -d postgres -h localhost -p 5432 -U backup -W
# 差异备份
gs_probackup backup -B /backup/gaussdb --instance gaussdb_instance -b differential -d postgres -h localhost -p 5432 -U backup -W参数说明:
-b incremental:指定执行增量备份-b differential:指定执行差异备份--parent-backup:指定增量备份的父备份ID
增量备份的恢复需要先恢复全量备份,然后依次恢复所有增量备份;而差异备份的恢复只需要恢复全量备份和最后一次差异备份,恢复过程相对简单。
WAL日志备份命令
WAL(Write-Ahead Log)日志是GaussDB数据库的事务日志,记录了所有数据库修改操作。WAL日志备份对于实现点-in-time恢复(PITR)至关重要,可以将数据库恢复到任意时间点。
1. 手动切换WAL日志
在某些情况下,需要手动切换WAL日志,例如在进行备份前确保所有事务都已记录到WAL日志中。以下是手动切换WAL日志的命令:
sql
-- 手动切换WAL日志
SELECT pg_switch_wal();
-- 查看当前WAL日志位置
SELECT pg_current_wal_lsn();
-- 查看WAL日志文件
SELECT * FROM pg_ls_waldir();命令说明:
pg_switch_wal():强制切换到新的WAL日志文件pg_current_wal_lsn():返回当前WAL日志的位置pg_ls_waldir():列出WAL日志目录中的所有日志文件
2. 配置WAL日志归档
WAL日志归档是指将已完成的WAL日志文件复制到指定的归档目录,以便用于后续的恢复操作。以下是配置WAL日志归档的步骤:
bash
# 修改postgresql.conf文件,启用归档模式
vi /data/gaussdb/postgresql.conf
# 添加以下配置
archive_mode = on
archive_command = 'cp %p /archive/gaussdb/wal/%f'
archive_timeout = 300
# 重启数据库使配置生效
gs_ctl restart -D /data/gaussdb参数说明:
archive_mode = on:启用WAL日志归档模式archive_command:指定归档命令,%p表示当前WAL日志文件的路径,%f表示WAL日志文件名archive_timeout:指定WAL日志归档的超时时间(秒),当超过该时间时,即使WAL日志文件未写满,也会触发归档
3. 查看归档状态
可以通过以下命令查看WAL日志归档的状态:
sql
-- 查看归档器状态
SELECT * FROM pg_stat_archiver;该命令返回的结果包含归档的统计信息,如已归档的WAL日志数量、最后一次归档的时间、归档失败的次数等,可以帮助管理员监控WAL日志归档的状态。
恢复命令
数据库恢复是指将数据库从备份中还原到指定状态的过程。GaussDB支持多种恢复方式,包括基于gs_basebackup的恢复、基于gs_probackup的恢复以及点-in-time恢复(PITR)。
1. 基于gs_basebackup的恢复
使用gs_basebackup进行恢复是一种简单直接的恢复方式,适用于基本的全量备份恢复。以下是恢复步骤:
bash
# 停止数据库服务
gs_ctl stop -D /data/gaussdb
# 清空数据目录
rm -rf /data/gaussdb/*
# 恢复全量备份
rsync -a /backup/gaussdb/full_backup_20231201/ /data/gaussdb/
# 创建recovery.conf文件
cat > /data/gaussdb/recovery.conf << EOF
standby_mode = 'on'
primary_conninfo = 'host=primary_host port=5432 user=replication password=password sslmode=require'
recovery_target_timeline = 'latest'
EOF
# 启动数据库服务
gs_ctl start -D /data/gaussdb
# 验证恢复状态
psql -h localhost -p 5432 -U postgres -c "SELECT pg_is_in_recovery();"恢复步骤说明:
- 停止数据库服务,确保数据库处于关闭状态
- 清空数据目录,准备恢复备份
- 使用rsync命令将全量备份恢复到数据目录
- 创建recovery.conf文件,配置恢复参数
- 启动数据库服务,开始恢复过程
- 验证数据库是否处于恢复模式
2. 使用gs_probackup进行恢复
gs_probackup提供了更灵活的恢复选项,支持恢复到最新状态、指定时间点或指定LSN位置。以下是常用的恢复命令:
bash
# 查看可用备份
gs_probackup show -B /backup/gaussdb --instance gaussdb_instance
# 停止数据库服务
gs_ctl stop -D /data/gaussdb
# 清空数据目录
rm -rf /data/gaussdb/*
# 恢复最新备份
gs_probackup restore -B /backup/gaussdb --instance gaussdb_instance -D /data/gaussdb
# 恢复到指定时间点
gs_probackup restore -B /backup/gaussdb --instance gaussdb_instance -D /data/gaussdb --recovery-target-time '2023-12-01 12:00:00'
# 恢复到指定LSN
gs_probackup restore -B /backup/gaussdb --instance gaussdb_instance -D /data/gaussdb --recovery-target-lsn '0/12345678'
# 启动数据库服务
gs_ctl start -D /data/gaussdb参数说明:
--recovery-target-time:指定恢复到的目标时间点--recovery-target-lsn:指定恢复到的目标LSN位置
3. 点-in-time恢复(PITR)
点-in-time恢复(PITR)允许将数据库恢复到任意指定的时间点,这对于恢复到故障发生前的状态非常重要。以下是PITR恢复的步骤:
bash
# 停止数据库服务
gs_ctl stop -D /data/gaussdb
# 清空数据目录
rm -rf /data/gaussdb/*
# 恢复全量备份
rsync -a /backup/gaussdb/full_backup_20231201/ /data/gaussdb/
# 创建recovery.conf文件,指定恢复目标时间
cat > /data/gaussdb/recovery.conf << EOF
standby_mode = 'on'
primary_conninfo = 'host=primary_host port=5432 user=replication password=password sslmode=require'
recovery_target_time = '2023-12-01 12:30:00'
recovery_target_inclusive = true
recovery_target_timeline = 'latest'
EOF
# 启动数据库服务进行恢复
gs_ctl start -D /data/gaussdb
# 等待恢复完成,查看恢复状态
psql -h localhost -p 5432 -U postgres -c "SELECT pg_is_in_recovery();"
# 恢复完成后,关闭数据库,移除recovery.conf文件,重新启动
gs_ctl stop -D /data/gaussdb
rm /data/gaussdb/recovery.conf
gs_ctl start -D /data/gaussdbPITR恢复说明:
- 恢复全量备份到数据目录
- 在recovery.conf文件中指定recovery_target_time参数,设置恢复目标时间
- 启动数据库服务,系统会自动应用WAL日志,恢复到指定时间点
- 恢复完成后,需要手动关闭数据库,移除recovery.conf文件,然后重新启动数据库,使其退出恢复模式
WAL日志恢复命令
WAL日志恢复是数据库恢复过程中的重要环节,用于将数据库恢复到指定的时间点或状态。以下是常用的WAL日志恢复命令:
1. 手动应用WAL日志
在某些情况下,需要手动查看或接收WAL日志,例如验证WAL日志的内容或手动接收WAL日志用于恢复。以下是常用命令:
bash
# 使用pg_waldump查看WAL日志内容
pg_waldump /archive/gaussdb/wal/000000010000000000000001 | head -20
# 使用pg_receivewal接收WAL日志
pg_receivewal -h localhost -p 5432 -U replication -W -D /archive/gaussdb/wal/ --verbose命令说明:
pg_waldump:用于查看WAL日志的内容,帮助管理员分析WAL日志pg_receivewal:用于从主服务器接收WAL日志,可用于手动搭建流复制或备份WAL日志
2. 配置WAL日志恢复
在recovery.conf文件中可以配置WAL日志恢复的相关参数,以下是常用的配置示例:
bash
# 在recovery.conf中配置WAL日志恢复
trusted_servers = '192.168.1.0/24'
restore_command = 'cp /archive/gaussdb/wal/%f %p'
recovery_end_command = 'echo "Recovery completed at $(date)" > /var/log/gaussdb/recovery_completed.log'配置参数说明:
trusted_servers:指定可信的服务器IP范围restore_command:指定从归档目录恢复WAL日志的命令recovery_end_command:指定恢复完成后执行的命令
备份验证命令
备份验证是确保备份可用性和完整性的重要步骤,建议定期进行备份验证。以下是常用的备份验证命令:
1. 验证备份文件完整性
bash
# 使用gs_probackup验证备份
gs_probackup validate -B /backup/gaussdb --instance gaussdb_instance --backup-id QPSQL20231201120000
# 检查备份目录结构
ls -la /backup/gaussdb/full_backup_20231201/
# 检查WAL日志文件数量
ls -la /archive/gaussdb/wal/ | wc -l验证方法说明:
- 使用gs_probackup validate命令可以验证备份的完整性和可用性
- 检查备份目录结构可以确认备份文件是否完整
- 检查WAL日志文件数量可以确认WAL日志归档是否正常
2. 测试备份恢复
最好的备份验证方法是定期进行恢复测试,将备份恢复到测试环境并验证数据的完整性和可用性:
bash
# 创建测试目录
mkdir -p /test/gaussdb
# 恢复备份到测试目录
gs_probackup restore -B /backup/gaussdb --instance gaussdb_instance -D /test/gaussdb
# 启动测试数据库
gs_ctl start -D /test/gaussdb
# 验证测试数据库可用性
psql -h localhost -p 5432 -U postgres -c "SELECT 1;"
# 停止测试数据库
gs_ctl stop -D /test/gaussdb恢复测试说明:
- 创建专门的测试目录用于恢复测试
- 将备份恢复到测试目录
- 启动测试数据库并验证其可用性
- 测试完成后停止测试数据库
备份管理命令
备份管理包括查看备份列表、删除旧备份和配置备份参数等操作,以下是常用的备份管理命令:
1. 查看备份列表
bash
# 使用gs_probackup查看备份列表
gs_probackup show -B /backup/gaussdb --instance gaussdb_instance
# 查看备份详细信息
gs_probackup show -B /backup/gaussdb --instance gaussdb_instance --backup-id QPSQL20231201120000命令说明:
gs_probackup show:查看所有可用备份的列表- 添加
--backup-id参数可以查看特定备份的详细信息
2. 删除旧备份
bash
# 删除特定备份
gs_probackup delete -B /backup/gaussdb --instance gaussdb_instance --backup-id QPSQL20231201120000
# 根据保留策略删除旧备份
gs_probackup purge -B /backup/gaussdb --instance gaussdb_instance
# 删除所有备份
gs_probackup cleanup -B /backup/gaussdb --instance gaussdb_instance删除命令说明:
delete:删除指定ID的备份purge:根据配置的保留策略删除旧备份cleanup:删除所有备份,谨慎使用
3. 备份配置管理
bash
# 查看备份配置
gs_probackup show-config -B /backup/gaussdb --instance gaussdb_instance
# 修改备份配置
gs_probackup set-config -B /backup/gaussdb --instance gaussdb_instance --retention-redundancy 3 --retention-window 7配置管理说明:
show-config:查看当前的备份配置set-config:修改备份配置,例如设置保留策略--retention-redundancy:设置保留的全量备份数量--retention-window:设置保留的备份时间窗口(天)
常见问题(FAQ)
Q1: gs_basebackup和gs_probackup有什么区别?
A1: gs_basebackup是基于PostgreSQL原生的备份工具,功能相对简单,主要用于全量备份;而gs_probackup是GaussDB提供的增强型备份工具,支持全量备份、增量备份、差异备份,以及更丰富的备份管理功能。
Q2: 如何选择合适的备份工具?
A2: 对于简单的备份需求,可以使用gs_basebackup;对于复杂的备份策略,如需要增量备份、差异备份或更灵活的备份管理,建议使用gs_probackup。
Q3: 备份命令中的-Xs和-Xf有什么区别?
A3: -Xs表示在备份过程中流式传输WAL日志,确保备份的一致性;-Xf表示在备份结束后复制所有WAL日志文件。-Xs更适合生产环境,因为它可以确保备份的时间点一致性。
Q4: 如何提高备份速度?
A4: 可以通过以下方式提高备份速度:
- 使用并行备份(-j参数)
- 使用压缩备份(-z参数)
- 确保备份存储设备具有足够的IO性能
- 在低峰期进行备份
Q5: 恢复命令中的recovery_target_timeline参数有什么作用?
A5: recovery_target_timeline参数用于指定恢复到哪个时间线,'latest'表示恢复到最新的时间线,这在进行PITR恢复时非常重要。
Q6: 如何验证备份的可用性?
A6: 最好的验证方法是定期进行恢复测试,将备份恢复到测试环境并验证数据的完整性和可用性。此外,还可以使用备份工具提供的验证命令,如gs_probackup validate。
Q7: 如何自动化备份操作?
A7: 可以使用crontab或其他调度工具来自动化备份操作,例如:
bash
# 每天凌晨2点执行全量备份
0 2 * * * gs_probackup backup -B /backup/gaussdb --instance gaussdb_instance -b full -d postgres -h localhost -p 5432 -U backup -W --compress=zlib > /var/log/gaussdb/backup.log 2>&1Q8: 备份和恢复命令对数据库性能有影响吗?
A8: 备份命令会对数据库性能产生一定影响,特别是在进行全量备份时,会占用较多的IO资源。建议在业务低峰期进行备份操作。恢复命令需要停止数据库服务,因此会导致数据库不可用,应在维护窗口内进行。
