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/*