docker mysqld 启动时 Failed to find valid data directory 错误解决

1.问题描述

使用docker拉取了mysql镜像并创建了mysql容器,但是容器内的mysqld启动时报错:

错误(1)

root 用户身份直接运行

mysqld

输出错误:

[Server] Fatal error: Please read "Security" 
section of the manual to find out how to run mysqld as root!

错误(2)

root 用户身份运行

mysqld --user=root

输出错误:

[ERROR] [MY-011011] 
[Server] Failed to find valid data directory.
[ERROR] [MY-010020] 
[Server] Data Dictionary initialization failed.
[ERROR] [MY-010119] [Server] Aborting

2.问题原因

错误(1)原因

docker mysql 容器创建时默认创建了用户和用户组mysql,但是mysqld配置文件没有指定启动用户为mysql,因此如果以容器的root用户运行mysqld,因为安全原因,mysqld会阻止root用户启动mysql服务器。

错误(2)原因

容器内的mysqld没有执行数据库初始化,mysql数据文件夹内缺少相关配置文件,导致数据文件夹无效。

3.问题解决

docker 容器内默认使用的是debian linux,且不安装vim,为了能编辑配置文件,首先安装vim:

apt update
apt install vim

然后编辑mysql配置文件

cd /etc/mysql
vim my.cnf

在配置文件中加上

user=mysql

保存退出后接着执行数据库初始化:

mysqld -I

此时有以下输出:
在这里插入图片描述
注意最后一行是随机生成的mysql root用户密码,要记得更改
因为我们的数据库初始化是root用户执行的,所以生成的文件权限也是root,但是mysqld运行用户身份是mysql,因此需要把mysql数据文件夹下的所有文件和目录权限改成mysql:

chown mysql /var/lib/mysql/*
chgrp mysql /var/lib/mysql/*

你可能感兴趣的:(docker,docker,mysql)