一止长渊

docker创建mysql后,显示daemon is not running

N 人看过
字数:397字 | 预计阅读时长:1分钟

创建 mysql 容器,并通过-v 将 mysql 内的日志、数据卷、配置挂在到容器外 mydata 相应目录下,实现修改容器外 mydata 内容,会同步修改 mysql 容器中内容

docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=make1234 -d mysql:latest

这时候启动 mysql 容器,显示 daemon is not running,那是因为 MYSQL 新特性 secure_file_priv 对读写文件的影响。

解决办法: 1.删除旧的 mysql 容器
docker rm mysql 2.新建容器,但是不要输入密码
docker run -p 3306:3306 –name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -d mysql:latest 3.新建 my.cnf
因为我们使用了-v 将文件挂载到了外部,所以直接在 mydata/mysql/conf 下新建 my.conf
my.cnf 添加如下内容,其他配置都不重要,重要的是 secure_file_priv=/var/lib/mysql  这一行,然后就可以启动创建好的 mysql 容器了

[mysqld]
secure_file_priv=/var/lib/mysql
user=mysql
character-set-server=utf8
#default_authentication_plugin=mysql_native_password  #此行要注释掉,否则密码验证方式不对
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
secure_file_priv=/var/lib/mysql

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

4.进入 mysql 容器
docker exec -it mysql /bin/bash
mysql -uroot #因为没有设置 root 密码,所以直接登入 5.设置 root 用户密码永久修改
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘新密码’ PASSWORD EXPIRE NEVER; 6.退出就可以用密码登陆了
mysql -uroot -pmake1234 7.其他主机想访问需要修改 host
use mysql;
参考:https://zhuanlan.zhihu.com/p/98920303

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。