AWS Ubuntu实例重启后PostgreSQL测试数据库频繁丢失求助
问题分析与解决
核心原因
你的问题大概率是PostgreSQL的数据目录被放在了AWS EC2实例的临时实例存储上。EC2的临时存储(Instance Store)是与实例绑定的本地存储,当实例停止或终止时,存储上的所有数据会被彻底清空——这就是为什么每次重启后jdtest数据库和用户都消失的原因,并非PostgreSQL本身的配置问题。
验证方法
- 查看PostgreSQL当前的数据目录位置:
sudo -u postgres psql -c 'SHOW data_directory;'
- 检查该目录所在的挂载点是否为临时存储:
df -h $(sudo -u postgres psql -t -c 'SHOW data_directory;')
如果输出的文件系统类型是tmpfs,或者挂载点标注为/mnt(部分实例默认的临时存储挂载点),则确认数据存放在临时存储上。
解决步骤
将PostgreSQL数据目录迁移到EBS卷(AWS的持久化块存储,实例停止后数据不会丢失):
- 停止PostgreSQL服务:
sudo systemctl stop postgresql
- 创建EBS卷的挂载目录(假设你已将EBS卷挂载到
/ebs,若未挂载需先完成EBS卷的挂载和格式化):
sudo mkdir -p /ebs/postgres sudo chown postgres:postgres /ebs/postgres
- 复制现有PostgreSQL数据到新目录:
sudo rsync -av /var/lib/postgresql/16/main /ebs/postgres/
- 修改PostgreSQL配置文件,指定新的数据目录:
编辑/etc/postgresql/16/main/postgresql.conf,找到data_directory配置项,修改为:
data_directory = '/ebs/postgres/main'
- 启动PostgreSQL服务并设置开机自启:
sudo systemctl start postgresql sudo systemctl enable postgresql
- 验证:重启实例后,尝试用
jdtest用户登录PostgreSQL,确认数据库和用户正常存在。
额外说明
如果你的EC2根卷本身就是EBS卷(Ubuntu实例默认配置),但PostgreSQL数据目录仍在临时存储,可能是安装或配置时手动修改了数据路径。迁移完成后,后续重启实例不会再出现数据丢失的问题。
内容的提问来源于stack exchange,提问作者JDOaktown
相关产品推荐
相关产品推荐

