我试图将我的Postgres数据库备份到另一台服务器,但我一直拒绝访问。
我的pg_hba.conf文件如下所示:
# DO NOT DISABLE! # If you change this first entry you will need to make sure that the # database superuser can access the database using some other method. # Noninteractive access to all databases is required during automatic # maintenance (custom daily cronjobs, replication, and similar tasks). # # Database administrative login by Unix domain socket local all postgres peer # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 # Allow replication connections from localhost, by a user with the # replication privilege. #local replication postgres peer #host replication postgres 127.0.0.1/32 md5 #host replication postgres ::1/128 md5
如果我将postgres设置从PEER更改为TRUST,我可以备份代码,但网站不能再访问数据库(有关SSL错误,我知道这不是问题)。
当我离开它,PEER,服务器工作 – PHP可以访问数据库 – 但我试图运行备份时出现错误:
root> pg_dump -U postgres tablename> test.sql
.pg_dump:[数据库(db)]连接到数据库“tablename”失败:致命:用户“postgres”的对等身份validation失败。
PHP Apache Web站点使用适当的用户名和密码。
备份脚本如下所示:pg_dump -U postgres tablename> test.sql
我怎么能同时满足网站和备份脚本,所以我可以同时运行?
整个脚本尝试是这样的:ssh SERVER“pg_dump -U postgres tablename | gzip -c”> /backup/sqlbackup.sql.gz
取自服务器故障: ssh remote command-fu
如果你的PHP Apache网站和peer ,保留这个,让我们来处理它。
1.第一种方法:
由于身份validation是基于对等的,所以您必须使用-h选项来指定主机名(通常是本地主机):
ssh server "pg_dump -h localhost -U postgres | gzip -c" >/backup/sqlbackup.sql.gz
这里的主要问题是,你会被提示inputpostgres用户密码。 这是备份自动化的一个问题。
你可以参考这个来避免被提示input密码。 但我会形容:
$HOME创build一个名为.pgpass的隐藏文件 chmod 600 .pgpass .pgpass并添加以下行: localhost:5432:postgres:postgres:password 2.第二种方法:
您可以添加特定的备份angular色并信任它。
在Postgres中创build备份angular色:
CREATE ROLE backup WITH LOGIN SUPERUSER PASSWORD 'password'
编辑文件pg_hba.conf ,添加angular色backup并trust它:
# Database administrative login by Unix domain socket local all postgres peer local all backup trust
重新启动postgresql
那么你应该可以运行以下的备份:
ssh server "pg_dump -U backup postgres | gzip -c" >/backup/sqlbackup.sql.gz