首页 文章

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

提问于
浏览
36

我们已经运行了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'

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

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

3 回答

  • 13

    停止服务器 .

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

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

  • 76

    谢谢你接受的答案 . 您也可以使用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
    
  • 1

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

    本质上,如果您尝试手动移动数据,您可能需要以root用户身份执行此操作,然后确保其可用于运行的任何用户postgres .

    您还可以选择快照卷并增加从快照创建的卷的大小 . 然后,您可以使用新卷替换实例上的卷(您可能必须调整分区大小以利用所有空间) .

相关问题