postgresql主从同步异常:archive command failed with exit code 1

本文记录了一次处理PostgreSQL数据库归档错误的经历。当主库日志出现archivecommand失败的错误,且磁盘空间和目录权限检查无误后,通过手动执行cp命令无效。最终解决方案涉及停止业务系统、主从库,使用mv命令备份问题归档文件,然后重新启动,确保系统恢复正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看主库日志发现如下报错

2022-02-14 14:37:40.083 CST [18441] LOG:  archive command failed with exit code 1
2022-02-14 14:37:40.083 CST [18441] DETAIL:  The failed archive command was: test ! -f /db/postgresql/archivedir/0***1 && cp pg_wal/0***1 /db/postgresql/archivedir/0***1

提示生成归档文件失败,查看磁盘空间,发现磁盘剩余空间充足,且目录写权限正常。

于是尝试手动执行cp命令生成归档文件。

但重启主库后,日志中仍然持续报这个错误。

最终处理方法:

1、停止业务系统;

2、停止主、从库;

3、用mv命令修改问题归档文件(/db/postgresql/archivedir/0***1)的名称,进行备份;

4、重新启动主库;

5、重新启动从库;

6、重新启动业务系统;

### PostgreSQL 主从同步配置与原理详解 #### 1. PostgreSQL 主从同步概述 PostgreSQL 支持多种复制方式,其中最常见的是 **逻辑复制** 和 **物理流复制(Streaming Replication)**。物理流复制是一种基于 WAL(Write-Ahead Logging)的日志传输技术,适用于高可用性和灾难恢复场景[^5]。 #### 2. 配置 PostgreSQL 物理流复制 以下是实现 PostgreSQL 主从同步的主要步骤: ##### (1)主服务器配置 修改 `postgresql.conf` 文件以启用流复制功能: ```bash wal_level = replica # 设置WAL级别为replica或logical max_wal_senders = 3 # 允许的最大并发连接数 wal_keep_segments = 64 # 保留的WAL文件数量 archive_mode = on # 开启归档模式 archive_command = 'cp %p /path/to/archive/%f' # 归档命令 hot_standby = on # 启用热备状态 ``` 编辑 `pg_hba.conf` 文件允许备用服务器访问主服务器: ```plaintext host replication repl_user 192.168.1.0/24 md5 ``` 上述配置表示允许来自子网 `192.168.1.0/24` 的用户 `repl_user` 使用密码认证方式进行复制操作[^5]。 ##### (2)创建复制用户 在主服务器上执行以下 SQL 创建用于复制的专用用户: ```sql CREATE USER repl_user REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD 'your_password'; ``` ##### (3)备份主数据库 使用 `pg_basebackup` 工具生成基础备份并将其传输到备用服务器: ```bash pg_basebackup -h primary_host -U repl_user -D /var/lib/postgresql/data -P --xlog-method=stream ``` 此命令会将主服务器的数据目录完整复制到目标位置 `/var/lib/postgresql/data` 并持续获取最新的 WAL 日志[^5]。 ##### (4)配置备用服务器 在备用服务器上的 `recovery.conf` 文件中添加以下内容: ```plaintext standby_mode = 'on' primary_conninfo = 'host=primary_host port=5432 user=repl_user password=your_password' trigger_file = '/tmp/postgresql.trigger.5432' restore_command = 'cp /path/to/archive/%f %p' ``` 这些参数定义了备用服务器如何连接到主服务器以及何时切换为主服务器的角色[^5]。 重启备用服务器服务使其生效: ```bash systemctl restart postgresql ``` #### 3. 测试主从同步 向主服务器写入一些测试数据,并验证其是否成功同步到备用服务器。可以使用以下查询检查备用服务器的状态: ```sql SELECT * FROM pg_stat_replication; ``` 该查询返回当前正在运行的所有复制客户端的信息[^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值