「Docker 学习系列」之 Docker 安装 MySQL 8.X

32 阅读3分钟

🙏废话不多说系列,直接开整🙏

美女2.png

MySQL数据库是一种非常流行的开源的免费的关系型数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序的数据库优先选择。

(1)检查是否 Docker 中是否已经存在 MySQL

# 检查是否已安装了 mysql
$ sudo docker images

结果展示

image.png

(2)查看可用的 MySQL版本

# 查看 docker 中可以安装的 MySQL版本
$ sudo docker search mysql

结果显示:

image.png

(3)拉取最新版本的 MySQL数据库

# 拉取最新的MySQL版本
sudo docker pull mysql:latest  # 或者
sudo docker pull mysql

# 拉取指定版本的 mysql
sudo docker pull mysql:5.7.56

拉去MySQL最新的版本:

image.png

MySQL 安装成功:

image.png

显示已经存在 MySQL 最新版本的数据库

image.png

(4)运行 MySQL 容器

# 运行 MySQL 容器(开启docker中的 MySQL服务)将3307端口开放给外部应用调用,并设定密码为123456
$ sudo docker run -itd --name mysql-test -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

参数说明

参数名描述说明
-p 3307:3306映射容器服务的 3306 端口到宿主机的 3307 端口,外部主机可以直接通过 【宿主机IP:3307】访问到 MySQL服务。
MYSQL_ROOT_PASSWORD=123456设置 MySQL 服务 root 用户的密码。

运行结果

# 运行成功将会返回一个UUID字符串表示此MySQL容器的唯一标识。
drew@ubuntu:/snap/bin$  sudo docker run -itd --name mysql-test -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
357c9427638901e4182813422ed7f9a187e71eb394cd087ce0a613637ac236d9

(5)安装运行成功

① 查看 mysql container 的服务是否开启成功
# 查看是否开启成功
$ sudo docker ps

# 运行结果如下:
drew@ubuntu:/snap/bin$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS
357c94276389        mysql               "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        33060/tcp, 0.0.0.0:3307->3

STATUS: UP 标识开启成功

image.png

② 登录到 docker 中的 MySQL服务
# 进入docker中的MySQL服务
sudo docker exec -it mysql-test /bin/bash

结果显示:

drew@ubuntu:/snap/bin$ sudo docker exec -it mysql-test /bin/bash
# 建议在输入密码时,密码后面单独输入(改为: mysql -h localhost -u root -p)
root@357c94276389:/# mysql -h localhost -u root -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.24 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
③ 设置用户权限和允许远程访问连接

查看用户是否具有可远程访问的权限:

select user,authentication_string,host from user;

mysql 8.x 默认用户的访问权限

image.png

④ 使用外部第三方工具连接 docker 中的MySQL服务
  • 连接问题:Public Key Retrieval is not allowed
  • 解决方案:最简单的解决方法是在连接后面添加 allowPublicKeyRetrieval=true

image.png

(6)查看 Docker 拉取最新MySQL的版本号

注意:docker 是不能直接查看 MySQL的版本号的,只能先进入到 MySQL 服务内在登录时才能看得到MySQL的版本号的。

附录

  1. 知识来源:www.runoob.com/docker/dock…
(1)♥ MySQL 服务启动到关闭容器的全操作命令
# =====================[mysql 准备阶段]==================================
# 查看MySQL可用的版本在docker中
$ sudo docker search mysql
# 拉取指定版本的MySQL服务(示例使用最新版本的)
$ sudo docker pull mysql:latest
# 查看是否拉取MySQL镜像成功
$ sudo docker images
# 开启运行MySQL容器服务
$ sudo docker run -itd --name mysql-test -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
357c9427638901e4182813422ed7f9a187e71eb394cd087ce0a613637ac236d9
# 查看是否开启成功
$ sudo docker ps
# =====================[进入 mysql 使用阶段]==================================
# 进入docker中的MySQL服务
sudo docker exec -it mysql-test /bin/bash
# 登录到docker中的MySQL服务
$ mysql -h localhost -u root -p123456
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
# =====================[进入 mysql 退出阶段]==================================
mysql> exit
Bye
root@357c94276389:/# exit
exit
(2)外部登录docker下的MySQL8.x出现【caching_sha2_password】问题

知识来源:MySQL8.0登录提示caching_sha2_password问题解决方法_Simon的博客-CSDN博客_caching_sha2_password

方法一(docker)

使用场景:① 第一次构建容器、安装;② 已安装完成后新增用户;

配置:(配置 mysql.cnf 配置默认身份验证插件)

[mysqld]
default_authentication_plugin = mysql_native_password

验证是否生效

使用CLI 进入 MySQL

$ mysql -u root -proot
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SELECT Host, User, plugin from user;
+-----------+------------------+-----------------------+
| Host      | User             | plugin                |
+-----------+------------------+-----------------------+
| %         | root             | mysql_native_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session    | caching_sha2_password |
| localhost | mysql.sys        | caching_sha2_password |
| localhost | root             | mysql_native_password |
+-----------+------------------+-----------------------+
5 rows in set (0.00 sec)

root 用户的身份验证器插件已经变为:mysql_native_password

方法二(MySQL 安装完成后)

使用尝尽场景,查看身份验证类型。

mysql> use mysql;
Database changed

mysql> SELECT Host, User, plugin from user;
+-----------+------------------+-----------------------+
| Host      | User             | plugin                |
+-----------+------------------+-----------------------+
| %         | root             | caching_sha2_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session    | caching_sha2_password |
| localhost | mysql.sys        | caching_sha2_password |
| localhost | root             | caching_sha2_password |
+-----------+------------------+-----------------------+
5 rows in set (0.00 sec)

root 用户的验证器插件为:caching_sha2_password

修改身份验证类型(修改密码)并使生效。

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;

验证是否生效

mysql> SELECT Host, User, plugin from user;
+-----------+------------------+-----------------------+
| Host      | User             | plugin                |
+-----------+------------------+-----------------------+
| %         | root             | mysql_native_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session    | caching_sha2_password |
| localhost | mysql.sys        | caching_sha2_password |
| localhost | root             | mysql_native_password |
+-----------+------------------+-----------------------+
5 rows in set (0.00 sec)

🙏至此,非常感谢阅读🙏

美女2.png