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

我们一直在运行postgresql 8.4。 与任何数据库一样,我们正在慢慢达到我们的空间门槛。 我添加了另一个8 GB EBS驱动器,并将其挂载到我们的实例,并将其configuration为在名为/ files的目录上正常工作

在/文件中,我手动创build

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

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

data_directory = '/files/postgresql/main' 

我运行sudo /etc/init.d/postgresql restart并且服务器启动失败。 再次可能是由于权限问题。 Amazon EC2只允许你在默认情况下以ubuntu的身份访问服务。 你只能从terminal内部访问root,这使得一切变得更加复杂。

这样做是否有更清洁和更高效的一步一步的方式?

停止服务器。

在保留许可的情况下复制datadir – 使用cp -aRv

然后(最简单,因为它避免了修改脚本的需要)只需将旧的datadir移到一边,并将旧的path符号链接到新的位置。

感谢您接受的答案。 而不是符号链接,你也可以使用绑定挂载 。 这样它就独立于文件系统。 如果您想为数据库使用专用硬盘驱动器,则也可以正常安装 。 到数据目录。

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

澄清。 您使用的是特定的AMI,它将ubuntu设置为默认用户,这可能不适用于其他AMI。

实际上,如果您尝试手动移动数据,则可能需要以root用户身份执行操作,然后确保将其用于postgres正在运行的任何用户。

您也可以select快照卷并增加从快照创build的卷的大小。 然后,您可以用新卷replace实例上的卷(您可能必须调整分区大小以利用所有空间)。