[关闭]
@ghimi 2018-08-02T07:04:11.000000Z 字数 1656 阅读 862

Docker 运行 Mysql 数据库

docker mysql


通过 Docker 客户端搜索Mysql 镜像

  1. docker search mysql

获得当前的全部 Mysql 镜像列表:

NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation 6567 [OK]
mariadb MariaDB is a community-developed fork of MyS 2075 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create 482 [OK]
percona Percona Server is a fork of the MySQL relati 350 [OK]
zabbix/zabbix-server-mysql Zabbix Server with MySQL database support 106 [OK]

然后根据列表拉取最新的MySQL镜像:

  1. docker pull mysql

拉取完成后使用命令通过镜像生成容器并运行

  1. docker run --name mysql -p 12345:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

最新版本的 mysql 在密码方面发生了较大改动,如果远端直接使用端口访问的话会报一个错误:

  1. ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: 找不到指定的模块。

从网上找到了相关的原因:

在mysql5.7环境里,虽然可以设置default_authentication_plugin来改变认证加密方式,但是一般人不会去设置.在mysql8.0下,默认变成了default_authentication_plugin=caching_sha2_password,包括你刚初始化的root用户也是这个认证加密方式,这样的结果是让你除非用新的协议驱动,例如必须用8.0自带的mysql客户端才行,不然就连接不上数据库.这样就必然造成不兼容的情况,幸好,是可以改回旧的方式的.

简单来说就是你使用的是mysql8.0的服务,但是却用mysql5.7的客户端去访问,由于mysql8.0在密码插件方面做了部分改动,导致使用mysql5.7的版本直接去访问时会报错.要想正常访问,需要做如下配置:

1.进入mysql容器

  1. docker exec -it mysql /bin/bash

2.进入mysql

  1. mysql -uroot -p123456

3.修改密码

  1. ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

4.刷新权限

  1. FLUSH PRIVILEGES; #刷新权限

通俗点来讲就是需要修改mysql对root用户的加密规则,下面还有一种方法可以做到,但是较上面的方法复杂了一点. 之前的步骤还是需要进入 mysql 容器中的mysql客户端:

  1. 处理:
  2. ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则
  3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码
  4. FLUSH PRIVILEGES; #刷新权限
  5. 再重置下密码:alter user 'root'@'localhost' identified by '123qwe';
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注