本文目录
- 1. 拉取 MySQL 镜像
- 2. 创建并运行一个 MySQL 容器
- 3. 验证MySQL容器是否创建并运行成功
- 3.1 进入 MySQL 容器
- 3.2 进入 MySQL
- 3.3 查看 host 和 user
- 4. MySQL 开启远程访问权限
- 4.1 切换数据库
- 4.2 给 root 用户分配远程访问权限
- 4.3 强制刷新权限
- 5. 服务器配置 3306 的开放端口
- 6. 查看 Ubuntu IP
- 7. 可能出现的问题
- 7.1 进入 MySQL 数据库
- 7.2 选择数据库
- 7.3 更改密码加密方式
- 7.4 更新用户密码
- 7.5 刷新权限
- 8. Navicat 连接 MySQL 测试
1. 拉取 MySQL 镜像
在没有拉取 MySQL 镜像之前的镜像列表:
- 可以通过下面的命令拉取 MySQL 镜像:
docker pull mysql
这将下载最新版本的 MySQL 镜像到虚拟机中。
2. 创建并运行一个 MySQL 容器
docker run --name=mysql-test -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root123456 -d mysql
参数说明:
- –name:指定了容器的名称,方便之后进入容器的命令行。
- -itd:其中,i 是交互式操作,t 是一个终端,d 指的是在后台运行。
- -p:指在本地生成一个随机端口,用来映射
mysql
的 3306 端口。 - -e:设置环境变量。
- MYSQL_ROOT_PASSWORD=root123456:指定了 MySQL 的
root
密码。 - -d mysql:指运行
mysql
镜像,设置容器在在后台一直运行。
运行截图:
【补充知识】:
在 Docker 中,使用 -e
参数可以设置环境变量。环境变量是影响容器运行时行为的一些配置值。这些值可以在容器内部使用,例如在应用程序中访问数据库时,可以使用环境变量来指定数据库连接信息。
下面是一些使用 -e
参数运行 Docker 容器时的示例:
-
设置单个环境变量:
docker run -e VAR_NAME=VAR_VALUE image_name
这将在容器中设置一个名为
VAR_NAME
的环境变量,其值为VAR_VALUE
。 -
设置多个环境变量:
docker run -e VAR1_NAME=VAR1_VALUE -e VAR2_NAME=VAR2_VALUE image_name
这将在容器中设置两个环境变量
VAR1_NAME
和VAR2_NAME
,分别对应的值为VAR1_VALUE
和VAR2_VALUE
。 -
从环境变量文件设置:
docker run --env-file env_file_name image_name
env_file_name
是包含环境变量键值对的文件。每行应该包含一个键值对,例如VAR_NAME=VAR_VALUE
。Docker 将读取文件中的键值对,并在容器中设置相应的环境变量。
通过设置环境变量,可以在容器中配置应用程序所需的各种参数,例如数据库连接字符串、API密钥等。这样可以轻松地在不同环境中部署容器,而无需对应用程序的配置进行硬编码。
3. 验证MySQL容器是否创建并运行成功
docker ps
3.1 进入 MySQL 容器
docker exec -it mysql-test /bin/bash
3.2 进入 MySQL
mysql -uroot -p
Enter password:root123456
3.3 查看 host 和 user
select host,user from mysql.user;
- 确保
root
的host
为%
即代表可以远程连接。
4. MySQL 开启远程访问权限
4.1 切换数据库
注意:默认应该就是这个,不切换也行,保险起见还是切换一下
use mysql;
4.2 给 root 用户分配远程访问权限
GRANT ALL PRIVILEGES ON *.* TO root@'%' WITH GRANT OPTION;
参数说明:
- GRANT:赋权命令
- ALL PRIVILEGES:当前用户的所有权限
- ON:介词
- .:当前用户对所有数据库和表的相应操作权限
- TO:介词
- ‘root’@’%’:权限赋给
root
用户,所有 ip 都能连接 - WITH GRANT OPTION:允许级联赋权
4.3 强制刷新权限
FLUSH PRIVILEGES;
5. 服务器配置 3306 的开放端口
windows 如何开放端口
-
在虚拟机上开放 3306 端口,允许 MySQL 的入站连接,可以使用以下命令通过防火墙允许入站连接:
ufw allow 3306
6. 查看 Ubuntu IP
# 查看 IP 地址
ip addr
# 也可以用这个命令
ifconfig
7. 可能出现的问题
- 可能出现的问题截图:
- 问题出现原因:
这是因为 MySQL8 之前密码加密规则为 mysql_native_password
,而 MySQL8 之后的加密规则为 caching_sha2_password
,也就是说,如果要用 Navicat 连接 MySQL,其实只需要将密码规则改回 mysql_native_password
即可;
- 解决办法如下:
7.1 进入 MySQL 数据库
docker exec -it mysql-test /bin/bash
mysql -uroot -p
Enter password:root123456
7.2 选择数据库
use mysql;
7.3 更改密码加密方式
IDENTIFIED BY ‘root123456’:连接时输入密码,密码为 root123456
ALTER USER 'root'@'%' IDENTIFIED BY 'root123456' PASSWORD EXPIRE NEVER;
7.4 更新用户密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root123456';
7.5 刷新权限
FLUSH PRIVILEGES;
运行截图:
8. Navicat 连接 MySQL 测试
至此,Docker 安装 MySQL 并使用 Navicat 连接 正式结束!