Docker 安装 MySQL 并使用 Navicat 连接

本文详细介绍了如何在Docker中拉取MySQL镜像,创建并运行MySQL容器,设置root用户的密码,开启远程访问权限,配置服务器3306端口,处理MySQL8的密码加密问题,以及使用Navicat进行连接测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 容器时的示例:

  1. 设置单个环境变量:

    docker run -e VAR_NAME=VAR_VALUE image_name
    

    这将在容器中设置一个名为 VAR_NAME 的环境变量,其值为 VAR_VALUE

  2. 设置多个环境变量:

    docker run -e VAR1_NAME=VAR1_VALUE -e VAR2_NAME=VAR2_VALUE image_name
    

    这将在容器中设置两个环境变量 VAR1_NAMEVAR2_NAME,分别对应的值为 VAR1_VALUEVAR2_VALUE

  3. 从环境变量文件设置:

    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;

在这里插入图片描述

  • 确保 roothost% 即代表可以远程连接。

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. 可能出现的问题

  • 可能出现的问题截图

img

  • 问题出现原因

这是因为 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 连接 正式结束!

### 如何使用 Navicat Premium 连接Docker 中的 MySQL 数据库 要通过 Navicat Premium 成功连接Docker 容器中的 MySQL 数据库,需按照以下方法操作: #### 1. **确认 Docker 容器正常运行** 确保 Docker 已成功启动 MySQL 容器,验证其状态。可以执行以下命令来查看容器的状态: ```bash docker ps ``` 此命令会显示当前正在运行的所有容器及其端口映射情况。 如果未找到名为 `docmysql` 的容器(假设这是您命名的),可以通过以下命令重启它: ```bash docker start docmysql ``` #### 2. **检查 MySQL 容器的网络配置** MySQL 容器需要暴露一个外部可访问的端口以便 Navicat 可以连接。在创建容器时使用的 `-p 3306:3306` 参数已经完成了这一设置[^1]。 为了进一步确认,可通过以下命令获取容器的具体 IP 地址和端口号: ```bash docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' docmysql ``` 这将返回容器内部的 IPv4 地址。然而,在大多数情况下,可以直接使用本地主机地址 (`localhost`) 或者 `127.0.0.1` 来建立连接。 #### 3. **Navicat Premium 配置步骤** ##### (a) 创建新连接 打开 Navicat Premium 软件,点击左上角的“新建连接”,选择“MySQL”。 ##### (b) 设置基本参数 填写以下字段: - **Connection Name**: 自定义名称,例如 `Docker_MySQL`. - **Host Name or IP Address**: 如果是在同一台机器上运行 DockerNavicat,则输入 `127.0.0.1` 或 `localhost`. 若是远程服务器,请替换为主机的真实公网 IP。 - **Port Number**: 默认为 `3306`, 即容器中指定的端口映射值. - **Username**: 使用默认管理员账户名 `root`. - **Password**: 初始化时设定的密码,如例子中的 `123456`. ##### (c) 测试连接 完成上述配置后,单击右下角的 “测试连接” 按钮。如果没有错误提示,则表示一切准备就绪;否则可能涉及防火墙规则或其他环境因素干扰通信过程[^2]. #### 4. **处理常见问题** 当遇到诸如错误码 `10061` 或 `10060` 等连接失败的情况时,应考虑以下几个方面的原因分析与排查措施[^3]: - 是否正确设置了时间区域变量(-e TZ),因为某些场景下不匹配可能导致认证异常; - 查看是否存在多余的空白字符影响解析逻辑(比如 conf 文件内的不当换行现象); - 清理残留的历史数据路径(/usr/local/mysql/*), 重新构建干净实例. --- ### 示例代码片段 以下是用于调试的一个简单脚本,帮助定位潜在的问题源: ```bash #!/bin/bash echo "Stopping existing container..." docker stop docmysql || true docker rm docmysql || true echo "Starting fresh instance of MySQL with updated settings..." docker run \ --name docmysql \ -p 3306:3306 \ -v /usr/local/mysql/conf:/etc/mysql/conf.d \ -v /usr/local/mysql/logs:/logs \ -v /usr/local/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=your_secure_password_here \ -d mysql:5.7 ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值