数据库初始化失败!解决方法一种
yexing159 opened this issue · comments
yexing159 commented
检查docker ps -a,发现数据库对应的容器mariadb 处于restart状态:
root@# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a64281b096a kuaifan/php:swoole-8.0.rc14 "/start.sh" 2 hours ago Up 2 hours dootask-php-a1f2eb
07f5c67b1fcf redis:alpine "docker-entrypoint.s…" 2 hours ago Up 2 hours 6379/tcp dootask-redis-a1f2eb
6ebf06c9abed mariadb:10.7.3 "docker-entrypoint.s…" 2 hours ago Restarting (1) 44 seconds ago dootask-mariadb-a1f2eb
检查mariadb的日志 docker logs mariadb
2023-10-19 06:14:08+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.7.3+maria~focal started.
2023-10-19 06:14:08+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2023-10-19 06:14:08+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.7.3+maria~focal started.
2023-10-19 06:14:08+00:00 [ERROR] [Entrypoint]: mariadbd failed while attempting to check config
command was: mariadbd --verbose --help --log-bin-index=/tmp/tmp.4r6Wld3MVt
mariadbd: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 13 "Permission denied")
Fatal error in defaults handling. Program aborted
可以清晰看到,启动失败原因为mysql/conf.d 文件夹权限不对,无法read
再看cmd源码,数据库初始化失败的检查条件为:
while [ ! -f "${cur_path}/docker/mysql/data/$(env_get DB_DATABASE)/db.opt" ]; do
即可以确定,docker数据库容器mariadb启动失败,导致无法挂载容器目录、认为数据库初始化失败
根因为mysql/conf.d 目录权限设置有问题。
cmd脚本中是将该目录权限设置为775,但估计各种环境差异性,某些环境就会出现权限问题
解决方法:
首先检查mariadb的所需的权限id是多少,如下为999:
# docker run -it --rm --user mysql:mysql mariadb:10.7.3 id
uid=999(mysql) gid=999(mysql) groups=999(mysql)
docker images查看你的mariadb版本是多少,对应吧 10.7.3 这段改成那个版本
然后修改./docker/mysql 所有文件权限
chown -R 999:999 *
再去install就正常了