Восстановить базу данных PostgreSQL из смонтированного тома

Мой сервер базы данных 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 мог их снова прочитать?


person lubar    schedule 30.03.2012    source источник
comment
Параметр после -D должен указывать на каталог, в котором находятся файлы PG_VERSION и postgresql.conf. Попробуйте сначала найти их.   -  person wildplasser    schedule 30.03.2012
comment
Вероятно, /var/lib/postgresql/... но файлы в /etc должны указывать, где. О, и если вы не можете справиться с случайным исчезновением экземпляров или хранилища, то, по всем оценкам, Amazon не тот способ, которым вы хотите разместить свою базу данных.   -  person Richard Huxton    schedule 30.03.2012
comment
Вопрос следует перенести на ошибку сервера. Оригинальный постер: Пожалуйста, укажите ОС и версию, проверьте журналы ошибок на наличие сообщений от pg_ctl и т. д.   -  person Craig Ringer    schedule 30.03.2012


Ответы (1)


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

Запуск 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
comment
Спасибо за все полезные комментарии. Мне удалось заставить его работать, используя метод, описанный @Craig, который я нашел в документах postgresql: postgresql.org/docs/current/interactive/backup-file.html Сейчас работаем над улучшением резервного копирования! - person lubar; 01.04.2012
comment
Спасатель! Очень полезно, если у вас сложная настройка базы данных и вы устанавливаете новый дистрибутив на новый диск. Просто установите сервер postgresql, скопируйте старый каталог данных в каталог данных pg нового диска, запустите сервер и вуаля! - person ElGranBarta; 10.07.2016