Подтвердить что ты не робот

Как перенести данные postgresql в другой каталог на Ubuntu через Amazon EC2?

Мы довольно долго выполняли postgresql 8.4. Как и в любой базе данных, мы медленно достигаем нашего порога для космоса. Я добавил еще 8-гигабайтный EBS-диск и подключил его к нашему экземпляру и настроил его на правильную работу в каталоге под названием /files

Внутри/файлов я вручную создал

Исправьте меня, если я ошибаюсь, но я считаю, что все данные postgresql хранятся в /var/lib/postgresql/ 8.4/main

Я создал резервную копию базы данных, и я запустил sudo/etc/init.d/postgresql stop. Это останавливает сервер postgresql. Я попытался скопировать и вставить содержимое /var/lib/postgresql/ 8.4/main в каталог /files, но оказалось, что это ОГРОМНАЯ МСС! из-за прав доступа к файлам. Мне нужно было войти в chmod содержимое этой папки, чтобы я мог копировать и вставлять их. Некоторые файлы не полностью копировались из-за прав root. Я изменил параметр data_directory в postgresql.conf, чтобы указать каталог файлов

 data_directory = '/files/postgresql/main'

и я перезапустил sudo/etc/init.d/postgresql, и сервер не смог запустить. Опять же, возможно, из-за проблем с разрешением. Amazon EC2 позволяет вам получить доступ к службе как ubuntu по умолчанию. Вы можете получить доступ только к корню из терминала, что делает все намного сложнее.

Существует ли более чистый и эффективный шаг за шагом?

4b9b3361

Ответ 1

Остановить сервер.

Скопируйте datadir с сохранением разрешений - используйте cp -aRv.

Затем (проще всего, поскольку он избегает необходимости изменять initscripts) просто переместите старый datadir в сторону и символически привяжите старый путь к новому местоположению.

Ответ 2

Спасибо за принятый ответ. Вместо символической ссылки вы также можете использовать привязку . Таким образом, он не зависит от файловой системы. Если вы хотите использовать выделенный жесткий диск для базы данных, вы также можете монтировать его в обычном режиме. в каталог данных.

Я сделал последнее. Вот мои шаги, если кому-то нужна ссылка. Я запускал это как script во многих экземплярах AWS.

# stop postgres server
sudo service postgresql stop

# create new filesystem in empty hard drive
sudo mkfs.ext4 /dev/xvdb

# mount it
mkdir /tmp/pg
sudo mount /dev/xvdb /tmp/pg/

# copy the entire postgres home dir content
sudo cp -a /var/lib/postgresql/. /tmp/pg

# mount it to the correct directory
sudo umount /tmp/pg
sudo mount /dev/xvdb /var/lib/postgresql/

# see if it is mounted 
mount | grep postgres

# add the mount point to fstab
echo "/dev/xvdb /var/lib/postgresql ext4 rw 0 0" | sudo tee -a /etc/fstab

# when database is in use, observe that the correct disk is being used
watch -d grep xvd /proc/diskstats

Ответ 3

Прояснение. Это особый AMI, который вы использовали, который устанавливает ubuntu в качестве пользователя по умолчанию, это может не относиться к другим ОИМ.

В сущности, если вы пытаетесь переместить данные вручную, вам, вероятно, понадобится сделать это как пользователь root, а затем убедитесь, что он доступен для любых пользовательских postgres.

У вас также есть возможность моментального снимка тома и увеличения размера тома, созданного из моментального снимка. Затем вы можете заменить том на своем экземпляре на новый том (вам, вероятно, придется изменить размер раздела, чтобы воспользоваться всем пространством).