🙏废话不多说系列,直接开整🙏
MySQL数据库是一种非常流行的开源的免费的关系型数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序的数据库优先选择。
(1)检查是否 Docker 中是否已经存在 MySQL
# 检查是否已安装了 mysql
$ sudo docker images
结果展示
(2)查看可用的 MySQL版本
# 查看 docker 中可以安装的 MySQL版本
$ sudo docker search mysql
结果显示:
(3)拉取最新版本的 MySQL数据库
# 拉取最新的MySQL版本
sudo docker pull mysql:latest # 或者
sudo docker pull mysql
# 拉取指定版本的 mysql
sudo docker pull mysql:5.7.56
拉去MySQL最新的版本:
MySQL 安装成功:
显示已经存在 MySQL 最新版本的数据库
(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 标识开启成功
② 登录到 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 默认用户的访问权限
④ 使用外部第三方工具连接 docker 中的MySQL服务
- 连接问题:
Public Key Retrieval is not allowed
- 解决方案:
最简单的解决方法是在连接后面添加 allowPublicKeyRetrieval=true
(6)查看 Docker 拉取最新MySQL的版本号
注意:docker 是不能直接查看 MySQL的版本号的,只能先进入到 MySQL 服务内在登录时才能看得到MySQL的版本号的。
附录
(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)
🙏至此,非常感谢阅读🙏