(Вы действительно должны указать свой дистрибутив, версию и т. д. при таком вопросе системного администратора.)
Запуск Pg через pg_ctl
, как показано выше, должен работать, если предположить, что исходная база данных была из Pg 8.4, а также двоичные файлы, которые вы пытаетесь использовать для ее запуска. Возможно, вы забыли остановить экземпляр PostgreSQL, автоматически запускаемый дистрибутивом? Или вы подключились к неправильному порту, поэтому вы получили экземпляр дистрибутива по умолчанию вместо вашей БД на другом порту (или другой путь сокета unix для сокетов unix)?
Лично я бы все равно не стал делать то, что делаете вы. Во-первых, прежде чем делать что-либо еще, я бы сделал полную резервную копию всего каталога данных, потому что у вас явно нет хороших резервных копий, иначе вы бы не беспокоясь об этом. Возьми их сейчас, потому что если ты сломаешь что-то при восстановлении, ты возненавидишь себя. Как показывает эта ошибка, доверять хранилищу Amazon (моментальному снимку или иному), вероятно, недостаточно.
Как только вы это сделаете: самый простой способ восстановить вашу БД будет заключаться в том, чтобы на новом экземпляре вы знаете, что у вас нет важных данных, которые имеют то же самое основная версия (например, "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
Другими словами: сделайте копию, исправьте разрешения, запустите БД.
Возможно, вам придется отредактировать /etc/postgresql/8.4/main/postgresql.conf
и/или /etc/postgresql/8.4/main/pg_hba.conf
, потому что любых правок, которые вы вносили в оригиналы, больше нет; они находятся на вашей поврежденной корневой ФС. postgresql.conf
и pg_hba.conf
в каталоге данных - это просто символические ссылки на те, что в etc под Debian - я понимаю причину этого, но не люблю.
Как только вы запустите его, немедленно выполните pg_dumpall и/или просто pg_dump вашей важной БД, а затем скопируйте его в безопасное место.
person
Craig Ringer
schedule
30.03.2012