ECS上重启Docker后MariaDB数据丢失,求持久化配置方案
Amazon ECS上MariaDB容器数据持久化解决方案
首先明确:MariaDB官方容器默认将数据存储在/var/lib/mysql目录,要解决重启任务数据丢失的问题,必须把这个目录挂载到AWS支持的持久化卷(EBS或EFS)上,以下是具体配置步骤和排查要点:
一、选择合适的卷类型
- 单任务部署:优先用EBS卷,性能更适配数据库读写需求,且成本较低。
- 多任务共享数据场景:选择EFS,支持跨实例共享存储。
- 注意:不要用EC2宿主机的绑定挂载(bind mount),因为ECS重启任务可能调度到新的EC2实例,原宿主机数据无法访问。
二、修正卷挂载配置
1. 卷配置(以EBS为例)
- 卷名称:自定义(比如
mariadb-data) - 卷类型:选择
AWS EBS - 关键参数:
- 卷大小:根据数据量设置(比如20GB起步)
- 卷类型:推荐gp3(平衡性能与成本)
- 随任务删除:设为
否,避免任务删除时误删数据
2. 容器挂载配置
在任务定义的容器部分,必须确保:
- 挂载目标卷:选择上述创建的
mariadb-data卷 - 容器内路径:必须设为
/var/lib/mysql(这是MariaDB存储数据的默认路径,挂载错路径等于白搭) - 权限:设为
读写(Read/Write)
三、常见问题排查
- 挂载路径错误:这是最常见的无效原因,检查你的配置中容器内路径是否为
/var/lib/mysql,不是的话立刻修正。 - 卷关联失败:确认任务定义中卷已正确关联到容器,挂载状态无报错。
- 权限问题:官方MariaDB镜像已处理
/var/lib/mysql的权限,但如果自定义了镜像,可在启动命令中添加chown -R mysql:mysql /var/lib/mysql确保权限正确。 - EBS卷挂载限制:EC2启动类型的任务,EBS卷只能挂载到同一可用区的实例,确保任务调度的实例与卷在同一可用区。
四、验证配置
启动任务后,进入容器执行命令确认挂载:
df -h /var/lib/mysql
若输出显示挂载源是EBS/EFS卷,说明配置生效。此时插入测试数据,重启任务后检查数据是否保留即可。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

