Docker 安装 MySQL 8(个人镜像)
由于官方镜像默认时区、字符集编码、密码验证方式等不适合,因此提供了自定义的个人镜像。
Dockerfile 介绍
mysql 8.0 镜像 时区:上海 东八区时区;编码:utf8mb4
官方镜像:https://hub.docker.com/_/mysql
官方 Github: https://github.com/docker-library/mysql/blob/4af273a07854d7e4b68c5148b8e23b86aa8706e2/8.0/Dockerfile
创建容器
docker run \
--name mysql \
--restart=always \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=appmaster \
-e MYSQL_USER=appmaster \
-e MYSQL_PASSWORD=appmaster \
-v /var/lib/mysql/:/var/lib/mysql/ \
-d registry.cn-hangzhou.aliyuncs.com/mengweijin/mysql:latest
参数说明
-e MYSQL_ROOT_PASSWORD=root:指定 root 用户的密码为 root
-v /var/lib/mysql/:/var/lib/mysql/:挂载卷/var/lib/mysql/
可选参数
-e MYSQL_DATABASE=app_master \:创建一个名为 app_master 的数据库
-e MYSQL_USER=appmaster \:指定 app_master appmaster ,该用户对当前数据库拥有所有权限
-e MYSQL_PASSWORD=appmaster \:指定 app_master 数据库的 appmaster 用户的密码为 appmaster
创建数据库、用户并授权
创建数据库:
mysql> create database test_database;
创建用户(joe):
mysql> CREATE USER 'joe'@'%' IDENTIFIED BY '123456';
或者只能本地主机登录方式创建:
mysql> CREATE USER 'joe'@'localhost' IDENTIFIED BY '123456';
授权:
mysql> grant all privileges on test_database.* to 'joe'@'localhost' identified by '123456';
刷新权限:
mysql> flush privileges;
编码说明:当前镜像使用 utf8 编码
注意:当前镜像修改了默认身份验证插件为 mysql_native_password 以兼容客户端工具的连接。
mysql5.8 开始将 caching_sha2_password 作为默认的身份验证插件。该 caching_sha2_password 和 sha256_password 认证插件提供比 mysql_native_password 插件更安全的密码加密,并 caching_sha2_password 提供了比更好的性能 sha256_password。由于这些优越的安全性和性能特性,caching_sha2_password 它是 MySQL 8.0 首选的身份验证插件,而且也是默认的身份验证插件而不是 mysql_native_password。此更改会影响服务器和 libmysqlclient 客户端库;目前来说和经常使用的客户端软件兼容性不好。
在 MySQL 5.7 中,默认的身份验证插件是 mysql_native_password!
即,mysql5.8 版本及以后的版本中,由于 navicat 等客户端工具只支持 mysql_native_password 验证插件,不支持 caching_sha2_password 验证插件,当使用 navicat 等客户端工具无法连接 mysql5.8 版本及以后的版本,为了解决这个问题:
(1)配置/etc/mysql/conf.d/mysql.cnf,这将放弃提供的改进的身份验证安全性 caching_sha2_password
[mysqld]
default_authentication_plugin=mysql_native_password
(2)也可以修改用户的方式解决,如:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';