Восстановить базу данных PostgreSQL с подключенного тома - PullRequest
3 голосов
/ 30 марта 2012

Мой сервер базы данных EC2 вышел из строя, запретив SSH или другой доступ (не уверен, почему ... grrr AWS ... это другая история).

Мне удалось сделать снимок корневого тома EBS. Я не могу загрузить новый экземпляр с этого тома (я предполагаю, что загрузочный раздел поврежден). Однако я могу присоединить и смонтировать том на новом экземпляре.

Теперь мне нужно получить PostgreSQL 8.4 на новой машине (Ubuntu 10.04) для загрузки данных с подключенного тома. Это возможно? Я пробовал:

pg_ctl start -D /<mount_dir>/etc/postgresql/8.4/main/

Но не радость ... PostgreSQL только начинается с пустых таблиц.

Является ли /etc/postgresql/8.4/main/ правильным расположением файлов данных PostgreSQL?

Есть ли способ восстановить данные с подключенного тома так, чтобы PostgreSQL мог снова их прочитать?

1 Ответ

5 голосов
/ 30 марта 2012

(Вы действительно должны указать свой дистрибутив и версию и т. Д. С таким вопросом системного администратора.)

Запуск 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 в datadir являются просто символическими ссылками на те, что есть в etc в Debian - я понимаю это за обоснование, но не люблю.

Как только вы запустите его, немедленно выполните pg_dumpall и / или просто pg_dump вашей важной БД, а затем скопируйте ее в безопасное место.

...