我暂时需要一个 180GB 的 postgresql 数据库。出于成本考虑,我将其放在便宜的 40GB 磁盘服务器上,并且我想将 200GB 卷安装到 postgresql 数据目录中。
我的问题:在我停止postgresql,挂载卷,复制内容,更新postgresql.conf,启动postgresql后,它停止监听5432
我的问题:为什么会发生这种情况?
我的操作顺序:
netstat 并查看 postgres 是否正在监听 5432 上的任何远程连接
root@foobar:/etc/postgresql/9.5/main# netstat -tulpen Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 112 44384 25831/postgres tcp 0 0 0.0.0.0:3451 0.0.0.0:* LISTEN 0 94839 15010/sshd tcp6 0 0 :::5432 :::* LISTEN 112 44385 25831/postgres tcp6 0 0 :::3451 :::* LISTEN 0 94848 15010/sshd
然后
- 停止postgresql
- 创建新目录 /mnt/whatever
- 将 /dev/xvdb 挂载到 /mnt/whatever/
将 '/var/lib/postgresql/9.5/main/' 的内容复制到新卷 '/mnt/whatever'
编辑 postgresql.conf 并将“数据目录”更改为新卷。
data_directory = '/mnt/whatever' # use data in another directory # (change requires restart) hba_file = '/etc/postgresql/9.5/main/pg_hba.conf' # host-based authentication file # (change requires restart) ident_file = '/etc/postgresql/9.5/main/pg_ident.conf' # ident configuration file # (change requires restart)
启动 postgresql
netstat 并发现 postgresql 不再监听 5432
root@foobar:/# netstat -tulpen Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 0.0.0.0:3451 0.0.0.0:* LISTEN 0 94839 15010/sshd tcp6 0 0 :::3451 :::* LISTEN 0 94848 15010/sshd
起初我以为是postgresql.conf
我搞砸了允许远程连接,但在经历了这个过程并重建了几次服务器之后,它肯定会一直监听,5432
直到我挂载新的卷。
在我挂载卷并更新配置文件中的数据目录之前,Postgresql 可以远程正常工作。此外,即使我卸载卷并恢复原始备份后,它也不会开始监听postgresql.conf
。在我看来,我在挂载过程中所做的事情破坏了它。
我已经制定了一条允许 IPtables 的规则5432
,但这并不能解决问题(请记住,挂载之前远程连接工作正常,所以我不认为是防火墙的问题)。
有什么建议么?
我猜测它是某种lsof
东西,但我陷入了困境。
答案1
5)将“/var/lib/postgresql/9.5/main/”的内容复制到新卷“/mnt/whatever”
执行此操作后,PostgreSQL 在启动时立即失败的最合理原因是此步骤没有保留被复制的文件和目录的确切权限/所有者。如果您使用cp
,请确保添加该-p
选项。
7)启动postgresql
8)netstat 发现 postgresql 不再监听 5432
您似乎在搜索网络问题,但端口 5432 未监听更可能是由于 PostgreSQL 在步骤 #7 之后立即出错退出。如评论中所述,请检查 postgresql 日志:启动失败的原因应该明确写在那里。通常日志都在/var/log/postgresql/
(鉴于提到的路径,它看起来像是 Debian 系统)。