“pg_xlog / RECOVERYHISTORY”:权限被拒绝Google Cloud Instance

我创build了这个基本上是postgres 9.5 + pghoard的 Docker Image,它会自动创build一个数据库备份(基于configuration文件),因为pghoard服务器正在运行它自动retore一个basebackup,如果我运行docker docker run但是当我在Google Cloud实例中复制同一个进程时,出现错误

 root@postgres-2499481557-3zv8d:/var/lib/postgresql/data/pgdata# docker-entrypoint.sh postgres LOG: database system was shut down in recovery at 2017-09-29 14:54:01 UTC LOG: restored log file "00000002.history" from archive FATAL: could not open file "pg_xlog/RECOVERYHISTORY": Permission denied LOG: startup process (PID 62) exited with exit code 1 LOG: aborting startup due to startup process failure 

在运行docker-entrypoint.sh postgres之前, RECOVERYHISTORY不存在。

我testing了在一个kubernetes容器中运行,我也创build了一个运行docker docker run命令的新vm实例,并得到了同样的错误

如果我在本地执行相同的进程,即使卷被挂载,它也可以工作。

脚步:

运行图像

 docker run -it --rm \ -v <PATH_LOCAL_FOLDER>:/var/lib/postgresql/data \ -v <PATH_LOCAL_FOLDER_PGHOARD_CONFIG>:/root/pghoard \ -v <PATH_LOCAL_FOLDER_PGHOARD_DATA>:/data -p 5432:5432 \ -e PGHOARD_CONFIG='/root/pghoard/pghoard.json' \ healthefilings/hef-docker-postgres bash 

使用pghoard恢复最新的备份

 pghoard_restore get-basebackup --target-dir /var/lib/postgresql/data --restore-to-master 

开始制作Deamon

 start-stop-daemon --start --background --make-pidfile --pidfile /var/run/pghoard.pid --exec /usr/local/bin/pghoard 

运行第

 docker-entrypoint.sh postgres 

这是日志,你可以看到没有RECOVERYHISTORY问题

 root@bf6325db8ff1:/# docker-entrypoint.sh postgres LOG: database system was shut down in recovery at 2017-09-29 15:13:40 UTC FATAL: the database system is starting up LOG: restored log file "00000002.history" from archive /usr/local/bin/pghoard_postgres_command: ERROR: '00000003.history' not found from archive LOG: starting archive recovery LOG: restored log file "00000002.history" from archive /usr/local/bin/pghoard_postgres_command: ERROR: '000000020000000000000021' not found from archive LOG: restored log file "000000010000000000000021" from archive FATAL: the database system is starting up LOG: redo starts at 0/21000098 LOG: consistent recovery state reached at 0/210000C0 /usr/local/bin/pghoard_postgres_command: ERROR: '000000020000000000000022' not found from archive /usr/local/bin/pghoard_postgres_command: ERROR: '000000010000000000000022' not found from archive LOG: redo done at 0/210000C0 /usr/local/bin/pghoard_postgres_command: ERROR: '000000020000000000000021' not found from archive LOG: restored log file "000000010000000000000021" from archive /usr/local/bin/pghoard_postgres_command: ERROR: '00000003.history' not found from archive LOG: selected new timeline ID: 3 LOG: restored log file "00000002.history" from archive LOG: archive recovery complete LOG: MultiXact member wraparound protections are now enabled LOG: database system is ready to accept connections LOG: autovacuum launcher started