17 postgresql backup
我一直在为 Postgres 9.1 进行热备份工作一段时间,但遇到了一个一致的问题。在从服务器上重新启动 Postgres 后,pg_log 目录下的 pgstartup 日志文件和每日日志文件读取没有错误。但是,当我尝试使用 psql 命令进入数据库时,出现错误:
致命:数据库系统正在启动。
recovery.conf 文件也不会转为 recovery.done。我已经广泛研究了这个错误并始终找到相同的响应:在我尝试重新启动 Postgres 之前,数据库没有完全关闭。我重新启动 Postgres 的唯一方法是通过service postgresql-9.1 restart
or/etc/init.d/postgresql-9.1 restart
命令。收到此错误后,我终止了所有进程并再次尝试重新启动数据库,但仍然收到相同的错误。我不知道从哪里开始以及如何解决这个问题。以下是我为完成热备份所做的确切过程。
主服务器配置:
pg_hba.conf,添加了以下行:
主机复制 postgres IPAddressOfSlaveServer 信任
postgresql.conf:
wal_level = hot_standby max_wal_senders = 5 听地址 = '*' 端口 = 5432 max_wal_senders = 5 wal_keep_segments = 32
从服务器配置:
postgresql.conf:
hot_standby = 开
恢复.conf:
待机模式 = 开 primary_conninfo = host=IPAddressOfMasterServer 端口 = 5432 用户 = postgres restore_command = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "%p"'
配置两台服务器后
我在主服务器上更改为 postgres 用户并运行命令:
psql -c "选择 pg_start_backup('label',true);"; rsync -a -v -e ssh /var/lib/pgsql/9.1/data slave:/var/lib/pgsql/9.1/data \ --排除postmaster.pid pgsql -c "选择 pg_stop_backup();";
与从服务器同步数据库后
我重新启动从服务器,启动没有失败。pgstartup.log 内容如下:
成功。您现在可以使用以下命令启动数据库服务器: /usr/pgsql-9.1/bin/postgres -D /var/lib/pgsql/9.1/data 或者 /usr/pgsql/9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l logfile start
当日日志文件 postgresql-Thu.log 内容如下:
日志:关闭 日志:数据库系统关闭 日志:数据库系统在2012-4-10被关闭恢复 日志:进入待机模式 日志:从存档中恢复的日志文件“logFileName” 日志:在 0/BF0000B0 处达到一致恢复状态 日志:重做从 0/BF000020 开始 日志:从存档中恢复的日志文件“logFileName” 日志:日志文件 0 中的意外 pageaddr 0/85000000,段 192,偏移量 0 日志:日志文件 0 中的意外 pageaddr 0/85000000,段 192,偏移量 0 日志:流复制成功连接到主
我研究了意外的 pageaddr 并从 postgres 档案中了解到,这是很正常的,也是检测 WAL 结束的预期方法之一。
任何建议将不胜感激。
kgr*_*ttn 12
消息“数据库系统正在启动。” 不表示错误。它处于 FATAL 级别的原因是它始终将其记录在日志中,而不管 的设置如何log_min_messages
:
在 rsync 之后,你真的运行了你展示的内容吗?:
pgsql -c "选择 pg_stop_backup();";
因为据我所知,没有pgsql
可执行文件,这会使备份未完成,并且从站永远不会退出恢复模式。另一方面,也许你真的运行了psql
,因为否则我看不到奴隶会如何记录这样的成功消息:
日志:在 0/BF0000B0 处达到一致恢复状态
和:
日志:流复制成功连接到主
此时您是否尝试连接到从站?发生了什么?
您提到的“成功。您现在可以开始...”消息由 生成initdb
,不应作为设置从站的一部分运行;所以我想你可能对那里的东西感到困惑。我也担心这些明显相互矛盾的陈述:
我重新启动 Postgres 的唯一方法是通过 service postgresql-9.1 restart 或 /etc/init.d/postgresql-9.1 restart 命令。收到此错误后,我终止了所有进程并再次尝试重新启动数据库...
您是否尝试通过服务脚本停止服务?发生了什么?如果您在行前添加更多信息,可能有助于理解日志。我们用:
log_line_prefix = '[%m] %p %q<%u %d %r> '
Run Code Online (Sandbox Code Playgroud)
该recovery.conf
脚本看起来很奇怪。您是从 master 的 pg_xlog 目录、slave 的活动 pg_xlog 目录还是存档目录复制?
小智 8
我也遇到了一些问题,除了我使用的是 9.3,而不是 9.1。无论如何,修复结果是相当微不足道的:
该postgresql.conf
文件正在从主服务器复制到从服务器,而我在从服务器上未修改它。我以为你所要做的就是添加一个recovery.conf
文件,一切都会工作(很好,但我无法登录到复制的从服务器,但是,它正在被复制)。
我编辑了奴隶的postgresql.conf
文件和:
archive_mode=on
archive
命令;和hot_standby=on
做到了:我能够使数据库成为准备接受只读查询的只读服务器。
有一个脚本pg_basebackup
可以为从站创建引导目录。这是包含数据库的数据目录。您需要修改postgresql.conf
文件,然后才能将其用作描述的从站,这对于后期pg_basebackup
脚本来说非常简单。