这个问题是在启动容器尝试对容器挂载数据卷的时候出现的, 不挂载数据卷不会有这个问题。

我的数据卷挂载参数如下, 其中报错就是因为缺少第二行, 对my.cnf文件也挂载。

-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \

 

启动容器之前, 先去宿主机创建这个my.cnf, 

输入命令vi /usr/local/docker/mysql/my.cnf, 加入内容:

[mysqld]
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

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

保存退出之后, 就可以用如下命令启动了:

docker run -d --privileged=true \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-v /usr/local/docker/mysql/my.cnf:/etc/mysql/my.cnf \
-p 33060:3306 --name=mysql -e MYSQL_ROOT_PASSWORD=123456 \
<镜像id>

 

需要说明的是, 在mysql 5.7.9以后废弃了password字段和password()函数;

用docker exec -it mysql bash命令进入容器后,输入mysql即可连上mysql server,

输入use mysql切换数据库, 然后顺手一个select * from user;可以看到用户密码字段变成了authentication_string, 

要修改root密码, 用sql语句ALTER user 'root' IDENTIFIED BY '123456'; 

然后用navicat就可以连上了。

 

 posted on 2020-05-13 13:47  银色甲壳虫  阅读(2765)  评论(0编辑  收藏  举报