当前位置: 首页>>技术教程>>正文


如何通过Amazon EC2将Postgresql数据移动到Ubuntu上的另一个目录?

, , ,

问题描述

我们已经运行了PostgreSQL 8.4了一段时间。与任何数据库一样,我们正在慢慢达到空间极限。我添加了另一个8 GB EBS驱动器并将其安装到我们的实例,并将其配置为在名为/files的目录中正常工作

在/files中,我手动创建

如果我错了,请指正我,但我相信所有postgresql数据都存储在/var/lib/postgresql/8.4/main中

我备份了数据库,然后运行sudo /etc/init.d/postgresql stop。这将停止postgresql服务器。我试图将/var/lib/postgresql/8.4/main的内容复制并粘贴到/files目录中,但事实证明这是一个巨大的挑战!由于文件权限。我必须进入并修改该文件夹的内容,以便可以复制和粘贴它们。由于root用户权限,某些文件未完全复制。我修改了postgresql.conf中的data_directory参数以指向文件目录

 data_directory = '/files/postgresql/main'

我跑了sudo /etc/init.d/postgresql restart,服务器无法启动。再次可能是由于权限问题。默认情况下,Amazon EC2仅允许您以ubuntu身份访问服务。您只能从终端内部访问root,这会使一切变得更加复杂。

有没有更清洁,更高效的逐步方法呢?

最佳回答

停止服务器。

在保留权限的同时复制datadir-使用cp -aRv

然后(最简单,因为它避免了修改initscripts的麻烦),只需将旧的datadir移到一边,并将旧路径符号链接到新位置。

次佳回答

感谢您接受答案。除了符号链接,您还可以使用bind mount。这样,它就独立于文件系统。如果要将专用硬盘驱动器用于数据库,也可以使用mount it normally。到数据目录。

我做了后者。如果有人需要参考,这是我的步骤。我将此脚本作为脚本在许多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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8917.html,未经允许,请勿转载。