You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose部署MariaDB持续启动失败求助

解决MariaDB挂载备份数据卷启动崩溃(信号11)问题

问题根源

从日志可见,MariaDB在InnoDB崩溃恢复阶段触发段错误(信号11),仅挂载备份数据卷时出现该问题,说明故障出在备份的数据文件本身,而非Docker或MariaDB版本(你已尝试切换版本,排除此可能)。

解决方案

1. 修复挂载目录权限

容器内MariaDB使用mysql用户(默认UID/GID为999)读写数据,宿主机目录权限不匹配会导致无法正常访问文件,甚至触发异常:

# 递归设置目录权限为mysql用户所有
sudo chown -R 999:999 ./db/data
# 或设置通用读写权限
sudo chmod -R 755 ./db/data

2. 修复InnoDB数据损坏

备份数据可能因服务器故障出现文件损坏,需先备份当前数据再尝试修复:

# 先备份现有数据,避免二次损坏
cp -r ./db/data ./db/data_backup

方式一:使用修复参数启动容器

修改docker-compose.yml,添加InnoDB强制恢复参数,从最低级别(1)开始尝试:

services :
  db :
      image : mariadb:10.7.4
      container_name : scep-db
      env_file : .env
      environment :
        - TZ=Asia/Seoul
        - MYSQLD_OPTS=--innodb-force-recovery=1
      restart : always
      ports :
        - "10003:3306"
      volumes :
        - ./db/data:/var/lib/mysql
        - ./db/conf.d:/etc/mysql/conf.d
  • 若启动成功,立即导出所有数据:
    docker exec scep-db mysqldump -u root -p --all-databases > full_backup.sql
    
  • 停止容器,清空./db/data目录,移除恢复参数后重启容器,再导入备份的SQL文件。

方式二:使用InnoDB工具检查修复

临时启动容器获取修复工具,检查数据文件完整性:

# 启动临时容器
docker run -d --name temp-mariadb mariadb:10.7.4
# 复制修复工具到宿主机
docker cp temp-mariadb:/usr/bin/innochecksum ./
docker cp temp-mariadb:/usr/bin/myisamchk ./
# 清理临时容器
docker stop temp-mariadb && docker rm temp-mariadb

# 检查InnoDB文件完整性
./innochecksum ./db/data/*.ibd
# 修复MyISAM表(如果有)
./myisamchk ./db/data/*.MYI

3. 改用SQL备份迁移(最稳妥)

直接挂载数据卷仅适用于同大版本的MariaDB,跨版本或数据损坏时,建议用SQL导出导入:

  1. 在故障服务器或能正常启动的环境中导出数据:
    mysqldump -u root -p --all-databases --single-transaction > backup.sql
    
  2. 在新服务器启动空MariaDB容器(不挂载数据卷):
    docker-compose up -d db
    
  3. 导入SQL备份:
    docker exec -i scep-db mysql -u root -p < backup.sql
    

4. 检查宿主机文件系统

日志中提到/tmp不支持O_TMPFILE,虽非直接诱因,但需确认数据目录所在文件系统支持容器所需特性:

# 查看数据目录的文件系统类型
df -T ./db/data

避免使用不兼容的网络存储或特殊文件系统挂载数据目录。


内容的提问来源于stack exchange,提问作者lms980321

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:30:04