Docker 安装 MySQL 8.0

MySQL Centos

# 一。搜索镜像

查找 Docker Hub 上的 mysql 镜像。

1
2
3
4
5
[root@localhost ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 8178 [OK]
mariadb MariaDB is a community-developed fork of MyS… 2785 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 610 [OK]

# 二。拉取 MySQL 镜像

拉取 Docker Hub 上的 mysql 镜像。

1
[root@localhost ~]# docker pull mysql:8.0

# 三。查看本地镜像列表

查看 MySQL 镜像是否拉取成功。

1
2
[root@localhost ~]# docker images | grep mysql
mysql 8.0 990386cbd5c0 7 days ago 443MB

# 四。创建存储目录

创建 MySQL 持久化文件目录。

1
[root@localhost ~]# mkdir -p /home/data/mysql/data /home/data/mysql/conf /home/data/mysql/logs

# 五。启动容器

options 说明:
–restart=always: 重启策略
- d: 后台运行容器,并返回容器 ID
-p: 端口映射,格式为:主机 (宿主) 端口:容器端口
–name: 为容器指定一个名称
- v: 给容器挂载存储卷,挂载到容器的某个目录
–mount: 绑定数据目录和服务器配置文件
- e MYSQL_ROOT_PASSWORD: 设置数据库密码
–character-set-server: 设置编码
–collation-server: 设置编码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@localhost ~]# docker run --restart=always --name=mysql8.0 -p 3306:3306 \
--mount type=bind,src=/home/data/mysql/conf/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/home/data/mysql/data,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
# 检查配置信息
[root@localhost ~]# docker inspect mysql8.0
...
"Mounts": [
{
"Type": "bind",
"Source": "/home/data/mysql/conf/my.cnf",
"Target": "/etc/my.cnf"
},
{
"Type": "bind",
"Source": "/home/data/mysql/data",
"Target": "/var/lib/mysql"
}
],
...
# 查看镜像服务是否启动成功
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0bab4245d067 mysql:8.0 "docker-entrypoint.s…" 41 minutes ago Up 41 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql8.0

# 六。配置远程工具连接

使用远程工具连接会报错: 2059 - Authentication plugin ‘caching_sha2_password’ cannot be loaded: …
原因: MySql 8.0 换了新的身份验证插件 caching_sha2_password, 原来的身份验证插件为 mysql_native_password。而客户端工具 Navicat Premium 中找不到新的身份验证插件 caching_sha2_password;
解决方法:
以 root 用户身份进入 mysql
命令: docker exec -it mysql8.0 mysql --user=root --password=123456

1
2
3
4
5
6
7
[root@localhost data]# docker exec -it mysql8.0 mysql --user=root --password=123456
# 切换数据库
mysql> use mysql;
# 修改校验插件规则
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新数据库
mysql> flush privileges;