WAL-G备份和恢复快速入门

admin 1月前 166

WAL-G是一款优秀的数据库备份软件。下面展示如何使用这款备份软件备份PostgreSQL的数据库集群,并完成恢复。

 

第一步. 首先是下载WAL-G

到https://github.com/wal-g/wal-g/releases 选择合适的版本进行下载。WAL-G非常简单,就是一个可执行文件。我使用如下方式进行下载和解压缩:

wget https://github.com/wal-g/wal-g/releases/download/v3.0.7/wal-g-pg-ubuntu-22.04-amd64.tar.gz
curl -O https://github.com/wal-g/wal-g/releases/download/v3.0.7/wal-g-pg-ubuntu-22.04-amd64.tar.gz
tar zxvf wal-g-pg-ubuntu-22.04-amd64.tar.gz

你就会看到一个解压缩好的可执行文件: wal-g-pg-ubuntu-20.04-amd64

 

你把这个文件放在PATH指向的一个目录即可。

你的数据库要配置好归档模式,假设归档目录是/home/postgres/a

postgres=# show archive_mode;
 archive_mode
--------------
 on
(1 row)

postgres=# show archive_command;
      archive_command
---------------------------
 cp %p /home/postgres/a/%f
(1 row)

假设我们要把所有的备份都放在/home/postgres/bkup目录。我们先准备一个配置文件g.json,其内容如下:

{
  "WALG_FILE_PREFIX": "/home/postgres/bkup",
  "PGHOST": "localhost",
  "PGPORT": "5432",
  "PGUSER": "postgres",
  "PGPASSWORD": "123456",
  "PGDATABASE": "postgres",
  "WALG_COMPRESSION_METHOD": "lz4"
}

 

如何做备份呢?使用如下命令,其中data1就是你要备份的数据库集群目录

wal-g-pg-ubuntu-20.04-amd64 --config g.json backup-push data1

如何看我的备份历史呢,使用如下命令:

postgres@ip-172-31-24-25:~$ wal-g-pg-ubuntu-20.04-amd64 --config g.json backup-list
INFO: 2025/07/01 21:59:21.986331 List backups from storages: [default]
backup_name                   modified             wal_file_name            storage_name
base_00000001000000000000000B 2025-07-01T21:46:19Z 00000001000000000000000B default
base_00000001000000000000000D 2025-07-01T21:46:41Z 00000001000000000000000D default
base_00000001000000000000000E 2025-07-01T21:46:43Z 00000001000000000000000E default
base_00000001000000000000000F 2025-07-01T21:46:45Z 00000001000000000000000F default
base_000000010000000000000010 2025-07-01T21:46:46Z 000000010000000000000010 default

如何恢复数据库呢?假设我们想把数据库备份恢复到一个目录datax,执行如下命令:

wal-g-pg-ubuntu-20.04-amd64 --config g.json backup-fetch dataz base_00000001000000000000000F

你就会看到一个新的目录dataz。你要在这个目录中创建一个recovery.signal,设置参数restore_command = 'cp /home/postgres/a/%f %p'和recovery_target = 'immediate',当然可以把port改成5436

然后启动这个数据库集群目录:
pg_ctl start -l X.txt -D dataz

你就会看到数据库成功启动了,你用psql -p 5436就可以登录。然后执行SELECT pg_wal_replay_resume(); 即可把这个恢复的数据库变成可读可写的。

 

 

 

最新回复 (4)
  • admin 1月前
    引用 2
    WAL-G配合GPG一起使用,可以让备份的数据加密,非常可靠。
  • davisz 1月前
    引用 3

    GPG 密钥配置与常见问题解决指南(适用于 WAL-G 加密备份)

    WAL-G 支持使用 GPG(GNU Privacy Guard)对备份进行对称或非对称加密。本教程采用的是 非对称加密,即使用公钥加密,私钥解密。 WAL-G 依赖系统环境中的 gpg 工具,因此必须正确生成并加载 GPG 密钥,确保 WAL-G 能调用 GPG 实现加解密。

    一、安装前准备:

    确保你的 PostgreSQL 安装完成,并设置好数据目录如 /home/postgres/data1

    1. 安装GPG

    sudo apt update
    sudo apt install gnupg
    

    2. 安装 WAL-G v3.0.7(PostgreSQL 专用版本)

    curl -L https://github.com/wal-g/wal-g/releases/download/v3.0.7/wal-g-pg-ubuntu-20.04-amd64 -o wal-g-pg
    chmod +x wal-g-pg 
    

    -o wal-g-pg:把下载下来的二进制文件保存为本地文件名 wal-g-pg

    chmod +x:为 wal-g-pg 文件添加可执行权限,使其可以作为程序运行。

    确认版本:

    ./wal-g-pg --version

    二、生成 GPG 密钥(用于加密)

    gpg --full-generate-key

    建议设置如下:

    • 密钥类型:选择 (1) RSA and RSA

    • 密钥长度:2048

    • 有效期:0(永久有效)

    • Real Name: postgres

    • Email: postgres@example.com

    • Comment: 留空或自定义

    • Passphrase:自己设置,牢记

    生成成功后查看 Key ID:

    gpg --list-keys

    你会看到如下结构:

    pub   rsa3072 2025-07-02 [SC]
          BC353D29892B2F939FD634FBEB0BB36541BB0ABC
    uid           [ultimate] postgres <postgres@example.com>
    sub   rsa3072 2025-07-02 [E]

    三、配置 WAL-G 参数文件(JSON)

    {
      "WALG_FILE_PREFIX": "/home/postgres/walg_backup",
      "PGHOST": "localhost",
      "PGPORT": "5432",
      "PGUSER": "postgres",
      "PGPASSWORD": "your_password",
      "PGDATABASE": "postgres",
      "WALG_COMPRESSION_METHOD": "lz4",
      "WALG_ENCRYPTION_METHOD": "gpg",
      "WALG_GPG_KEY_ID": "BC353D29892B2F939FD634FBEB0BB36541BB0ABC"
    }
    

    注意事项:

    • "WALG_GPG_KEY_ID" 必须与 gpg --list-keys 中的完全一致

    • 路径 /home/postgres/walg_backup 必须存在

    四、执行加密备份

    ./wal-g-pg backup-push /home/postgres/data1 --config ~/gpg.json

    成功标志:

    Wrote backup with name base_000000010000000000000004 to storage default

    接着推送当前所有 WAL 文件(以当前为例):

    ./wal-g-pg wal-push /home/postgres/data1/pg_wal/000000010000000000000004

    五、恢复流程

    1. 创建恢复目录

    mkdir -p ~/data_restore

    2. 拉取备份

    ./wal-g-pg backup-fetch ~/data_restore LATEST --config ~/gpg.json

    3. 创建恢复信号文件

    touch ~/data_restore/recovery.signal

    4. 修改端口配置,避免冲突

    编辑 ~/data_restore/postgresql.conf,修改端口为未被占用的,例如:port = 5436

    5. 启动 PostgreSQL 恢复实例

    ~/pg17.5/bin/pg_ctl -D ~/data_restore -l restore.log start

    六、验证恢复结果

    ps -ef | grep postgres

    连接数据库检查数据:

    psql -p 5436 -U postgres
     

     

     

  • admin 22天前
    引用 4

    Please use the below command to delete a backup:

    wal-g --config /xxxxx/xxxxx/walg.json delete before base_000000010000003800000004 --confirm

    You can use "backup list" subcommand of wal-g to list all backups.

  • admin 22天前
    引用 5
    2025-07-21 10:46:26.837 CDT [922110] FATAL:  recovery aborted because of insufficient parameter settings
    2025-07-21 10:46:26.837 CDT [922110] DETAIL:  max_connections = 100 is a lower setting than on the primary server, where its value was 500.
    
    2025-07-21 10:47:47.651 CDT [922618] FATAL:  recovery aborted because of insufficient parameter settings
    2025-07-21 10:47:47.651 CDT [922618] DETAIL:  max_worker_processes = 8 is a lower setting than on the primary server, where its value was 24.
    
    2025-07-21 10:48:50.663 CDT [923017] FATAL:  recovery aborted because of insufficient parameter settings
    2025-07-21 10:48:50.663 CDT [923017] DETAIL:  max_locks_per_transaction = 64 is a lower setting than on the primary server, where its value was 512.

    When we do the PITR, we meet the above errors. How to fix them?

     

返回
发新帖