【问题标题】:How can I move postgresql data to another directory on Ubuntu over Amazon EC2?如何通过 Amazon EC2 将 postgresql 数据移动到 Ubuntu 上的另一个目录?
【发布时间】:2013-05-16 17:50:55
【问题描述】:

我们运行 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 目录中,但结果却是一团糟!由于文件权限。我不得不进入并chmod该文件夹的内容,以便我可以复制和粘贴它们。由于 root 权限,一些文件没有完全复制。我修改了 postgresql.conf 中的 data_directory 参数指向文件目录

 data_directory = '/files/postgresql/main'

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

有没有更清洁、更高效的分步方法?

【问题讨论】:

    标签: postgresql ubuntu permissions amazon-ec2


    【解决方案1】:

    感谢您接受的答案。除了符号链接,您还可以使用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
    

    【讨论】:

      【解决方案2】:

      停止服务器。

      在保留权限的同时复制数据目录 - 使用 cp -aRv

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

      【讨论】:

      • 您好,您能解释一下“将旧数据目录移到一边”是什么意思吗?您的意思是,只需将其删除或将其复制到某个备份文件夹?和:你的意思是哪个数据目录? show data_directory;返回的整个文件夹?
      • 重命名它,这样即使事实证明它很重要,您也不会丢失任何东西。
      • symlinlk 的想法不错,但也不完美,因为它要求您保留旧的 datadir 位置。
      • 不错的提示!顺便提一下,在创建符号链接后,我们需要更改它的所有权(将 postgres 设置为所有者和组)。
      • 我尝试了很多不同的方法,我发现“停止服务器”的最简单和最干净的方法是:如果您使用的是 ubuntu AMI,则将“sudo service postgresql stop”设置为“ubuntu”。否则,在 ec2 上关闭服务器可能会很困难,因为需要通过 postgres 进程的 postgres 用户/所有者提供 sudo 密码。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-26
        • 1970-01-01
        • 1970-01-01
        • 2015-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多