lub*_*bar 3 database postgresql hard-drive amazon-web-services
我的EC2数据库服务器失败,阻止了SSH或其他访问(不确定为什么...... grrr AWS ......这是另一个故事).
我能够制作EBS根卷的快照.我无法从此卷启动新实例(我猜测启动分区已损坏).但是,我可以在新实例上附加和装载卷.
现在我需要在新机器(Ubuntu 10.04)上安装PostgreSQL 8.4以从已安装的卷加载数据.这可能吗?我试过了:
pg_ctl start -D /<mount_dir>/etc/postgresql/8.4/main/
Run Code Online (Sandbox Code Playgroud)
但没有快乐...... PostgreSQL只是从空表开始.
是/etc/postgresql/8.4/main/PostgreSQL的数据文件的正确位置?
有没有办法以PostgreSQL可以再次读取的方式从挂载的卷恢复数据?
(您应该使用此类系统管理员问题指定您的发行版和版本等.)
pg_ctl如上所示运行Pg 应该有效,假设原始数据库来自Pg 8.4,那么您尝试使用它来启动它的二进制文件也是如此.也许你忘了停止由发行版自动启动的PostgreSQL实例?或者连接在错误的端口上,所以你得到了发行版的默认实例而不是你的数据库在另一个端口(或不同的unix套接字路径,对于unix套接字)?
就个人而言,我不会做你正在做的事情.首先,在我做任何其他事情之前,我会对整个数据目录进行完整备份,因为你显然没有良好的备份,否则你不会担心这一点.现在就拿走它们吧,因为如果你在恢复的过程中打破了某些东西,你就会恨自己.正如此故障所证明的那样,信任亚马逊的存储(快照或其他)可能还不够好.
完成之后:恢复数据库的最简单方法是,在新实例中,您知道没有任何重要数据具有相同的 主要 版本(例如"8.4"或"9.0") postgresql作为您的原始实例安装:
/etc/init.d/postgresql-8.4 stop
datadir=/var/lib/postgresql/8.4/main
rm -rf "$datadir"
cp -aR /<mount_dir>/etc/postgresql/8.4/main/ "$datadir"
chown -R postgres:postgres "$datadir"
/etc/init.d/postgresql-8.4 start
Run Code Online (Sandbox Code Playgroud)
换句话说:拿一份副本,修复权限,启动数据库.
您可能需要编辑/etc/postgresql/8.4/main/postgresql.conf和/或/etc/postgresql/8.4/main/pg_hba.conf因为您对原件所做的任何编辑都不再存在; 他们在你腐败的根FS上.数据库postgresql.conf和数据库pg_hba.conf只是在Debian下的其他符号链接 - 我理解背后的基本原理,但不爱.
一旦你运行它,立即执行pg_dumpall和/或只是重要数据库的pg_dump,然后将其复制到安全的地方.