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

noa*_*ale 36 postgresql permissions ubuntu amazon-ec2

我们已经运行了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参数,指向files目录

 data_directory = '/files/postgresql/main'
Run Code Online (Sandbox Code Playgroud)

我运行sudo /etc/init.d/postgresql restart并且服务器无法启动.再次可能是由于许可问题.Amazon EC2仅允许您在默认情况下以ubuntu的身份访问该服务.您只能从终端内访问root,这会使一切变得复杂得多.

这样做是否有更清洁,更有效的一步一步的方法?

Cra*_*ger 77

停止服务器.

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

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

  • 不错的提示!提一下,在创建符号链接后,我们需要更改所有权(将postgres设置为所有者和组). (8认同)
  • 你好,你能解释一下"将旧数据放在一边"的意思吗?你的意思是,只需删除它或将其复制到一些备份文件夹?和:你的意思是哪个数据目录?`show data_directory;`返回的整个文件夹? (2认同)

Ken*_*but 15

谢谢你接受的答案.您也可以使用绑定装置代替符号链接.这样它就独立于文件系统.如果要为数据库使用专用硬盘驱动器,也可以正常安装.到数据目录.

我做了后者.如果有人需要参考,这是我的步骤.我在许多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
Run Code Online (Sandbox Code Playgroud)