news 2026/9/19 23:13:51

MySQL 8.0 安装配置全流程:Windows、Linux 与 Docker 环境及 Navicat 连接实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 8.0 安装配置全流程:Windows、Linux 与 Docker 环境及 Navicat 连接实战

1. 为什么 MySQL 8.0 的安装值得单独写一篇长文

MySQL 8.0 从 2018 年正式 GA 到现在,已经迭代了好几个大版本,但我在实际带人、帮同事配环境的过程中发现,真正卡住新手的从来不是 SQL 语法,而是"装不上、连不上、密码改不了、服务起不来"这四件事。你可能觉得装个数据库能有多难,双击下一步下一步不就完了?现实是:官网下载页面有 ZIP Archive、MSI Installer、Debug Test、Source Code 一大堆选项,选错一个后面全是坑;装完之后 root 密码规则变了,mysql -u root -p直接报错;用 Navicat 连接又提示caching_sha2_password认证插件不兼容。这些问题在搜索引擎里能搜到几十种互相矛盾的答案,新手照着做往往越修越乱。

这篇内容就是把我这些年反复装 MySQL 8.0 的经验整理成一条清晰的主线:从官网下载哪个包、Windows 和 Linux 两种主流环境怎么配、Navicat 怎么连、Docker 方式怎么快速起一个干净的实例,一直到出问题怎么排查。适合完全没接触过数据库的在校学生、刚转行做后端或数据分析的朋友,也适合已经装过 MySQL 5.7 想升级到 8.0 的老手对照检查。我不会只给你命令,每个关键选择我都会说清楚为什么这么选,参数是怎么算出来的,踩过的坑长什么样。

2. 下载前的关键决策:版本、安装包类型与系统匹配

2.1 先搞清楚你要的是哪个 MySQL 8.0

MySQL 8.0 的版本号格式是8.0.x,比如8.0.368.0.40。这里有个很多人忽略的点:小版本号不是随便选的。MySQL 官方把 8.0.x 分为两类,一类是 Innovation 创新版,一类是 LTS 长期支持版。从 8.0.34 之后官方调整了发布策略,8.0 系列本身是稳定分支,但如果你在生产环境用,建议选官方标注为 LTS 的版本,比如 8.0.40 这类经过充分测试的版本。个人学习用最新的 8.0.x 完全没问题,新版本修复了不少安全漏洞和性能问题。

怎么确认最新版本?直接去 MySQL 官网的 Downloads 页面,找到 "MySQL Community Server",注意是Community 社区版,不是 Enterprise 企业版。社区版免费,功能对学习和中小项目完全够用。企业版要授权,个人下载了也用不了那些高级插件。

提示:不要从任何第三方"软件站"下载 MySQL 安装包。那些站点经常捆绑推广软件,甚至改过安装包。官网域名是dev.mysql.comwww.mysql.com,认准这个。

2.2 安装包类型怎么选:MSI、ZIP 还是 Docker

Windows 上官网提供两种主要形式:

安装包类型文件名特征适合人群优缺点
MSI Installermysql-installer-community-8.0.xx.msi纯新手、想图形化配置有向导,自动配服务,但体积大、会装一堆用不到的东西
ZIP Archivemysql-8.0.xx-winx64.zip想手动控制、便携部署干净、可控,但需要手动初始化、配环境变量
Docker 镜像mysql:8.0有 Docker 基础、想快速起实例一条命令搞定,环境隔离,但需要先装 Docker

我的建议很直接:如果你只是想学 SQL、做课程作业,用 MSI 最省事;如果你想真正理解 MySQL 的目录结构和配置,用 ZIP 手动装一遍;如果你已经会 Docker,直接用 Docker,五分钟就能跑起来。这三种方式我下面都会讲,你可以按需跳读。

Linux 上就简单多了,主流发行版都有包管理器,Ubuntu 用apt,CentOS/RHEL 用yumdnf,也可以下载官方的tar.gzrpm包。生产环境我更推荐用官方仓库安装,版本管理清晰。

2.3 系统位数和依赖检查

下载前确认你的系统是 64 位。现在基本没有 32 位系统了,但如果你在虚拟机里跑,注意别装成 32 位系统。Windows 上还需要确认已安装Visual C++ Redistributable,MySQL 8.0 依赖它,缺了会报找不到 VCRUNTIME140_1.dll之类的错误。官网下载页通常会提示,装之前先把这个装上。

Linux 上要确认libaio库存在,Ubuntu 下apt install libaio1,CentOS 下yum install libaio。这个库是 MySQL 做异步 IO 用的,缺了服务起不来,报错信息还特别隐晦。

3. Windows 下 MySQL 8.0 的完整安装配置

3.1 MSI 图形化安装:一步步走完向导

下载好mysql-installer-community-8.0.xx.msi之后,双击运行。第一步是选择安装类型,有 Developer Default、Server only、Client only、Full、Custom 几个选项。新手直接选 Server only 或者 Custom,Developer Default 会给你装 MySQL Workbench、Excel 插件、各种连接器,装完占好几个 G,很多你根本用不上。

选 Custom 的话,在左侧列表里展开 "MySQL Servers",选 MySQL Server 8.0.x,加到右侧。如果你还想要图形化管理工具,可以顺便把 "MySQL Workbench" 也加进去。然后一路 Next,到 Configuration 阶段:

  • Config Type:选 Development Computer,它会根据你的机器内存自动分配合理的 buffer pool 大小。如果是服务器,选 Server Computer。
  • Port:默认 3306。如果这台机器上已经有别的 MySQL 或者别的服务占了 3306,改成 3307 之类。改端口之后所有连接都要带-P 3307,别忘了。
  • Authentication Method:这一步是重灾区。有两个选项,一个是Use Strong Password Encryption(caching_sha2_password),一个是Use Legacy Authentication Method(mysql_native_password)。如果你要用 Navicat 老版本或者一些老客户端,选 Legacy,否则连不上。新版本 Navicat 16+ 已经支持 caching_sha2_password,可以选强加密。我个人的做法是:学习环境选 Legacy 省心,生产环境选强加密更安全。
  • Root Password:设一个你记得住的强密码。MySQL 8.0 默认要求密码包含大小写字母、数字、特殊字符,长度至少 8 位。别设123456,它会直接拒绝。
  • Windows Service:勾选 "Configure MySQL Server as a Windows Service",服务名默认 MySQL80。这样开机自启,不用每次手动开。

配置完成后点 Execute,等它把服务装好、初始化数据目录。全部打绿勾就成功了。

3.2 ZIP 免安装版:手动初始化的完整流程

ZIP 版是我更推荐给想搞懂原理的人的方式。下载mysql-8.0.xx-winx64.zip,解压到一个没有中文、没有空格的路径,比如D:\mysql-8.0.40。路径里有中文或空格是很多诡异问题的根源,别问我是怎么知道的。

解压后目录结构是这样的:bin放可执行文件,data目录一开始不存在,需要初始化生成,my.ini也需要你自己建。

第一步,在D:\mysql-8.0.40下新建my.ini,内容如下:

[mysqld] basedir=D:\mysql-8.0.40 datadir=D:\mysql-8.0.40\data port=3306 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci default-authentication-plugin=mysql_native_password [client] port=3306 default-character-set=utf8mb4

这里几个参数解释一下。basedirdatadir必须写绝对路径,反斜杠在 ini 文件里可以直接用。character-set-server=utf8mb4是关键,MySQL 8.0 默认字符集已经是 utf8mb4 了,但显式写出来更保险,utf8mb4 支持 emoji 和更多生僻字,比老的 utf8(其实是 utf8mb3)强。default-authentication-plugin=mysql_native_password是为了兼容老客户端,如果你确定只用新工具,可以删掉这行。

第二步,以管理员身份打开命令提示符,进入 bin 目录,执行初始化:

cd /d D:\mysql-8.0.40\bin mysqld --initialize --console

注意--console参数会把初始化日志打到屏幕上,其中有一行A temporary password is generated for root@localhost: xxxxxxxx,这个临时密码一定要记下来,第一次登录要用。如果你不小心关了窗口没记下来,删掉 data 目录重新初始化。

注意:初始化时如果报mysqld: Can't create directory,多半是 datadir 路径不对或者权限不够。确认路径存在且当前用户有写权限。

第三步,安装服务并启动:

mysqld --install MySQL80 net start MySQL80

如果提示"服务名已存在",先sc delete MySQL80删掉再装。

第四步,登录并改密码:

mysql -u root -p

输入刚才记下的临时密码。进去之后第一件事就是改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; FLUSH PRIVILEGES;

改完退出重新登录,验证新密码生效。

3.3 环境变量配置:让 mysql 命令随处可用

不管 MSI 还是 ZIP,装完之后如果不想每次都cd到 bin 目录,就把 bin 路径加到系统环境变量 Path 里。Windows 下:此电脑右键 → 属性 → 高级系统设置 → 环境变量 → 系统变量里找到 Path → 编辑 → 新建 → 填入D:\mysql-8.0.40\bin。确定保存后,重新开一个命令行窗口(旧窗口不会刷新环境变量),输入mysql --version,能显示版本号就成功了。

这一步看着简单,但很多人配完不生效,99% 是因为没重开命令行窗口。环境变量是在进程启动时读取的,已经开着的窗口读的还是旧值。

4. Linux 与 Docker 环境下的安装方式

4.1 Ubuntu 用 apt 安装 MySQL 8.0

Ubuntu 20.04 之后的版本,默认源里的 MySQL 就是 8.0。直接:

sudo apt update sudo apt install mysql-server

装完 MySQL 会自动启动,并且 root 用户默认用auth_socket插件认证,也就是说你sudo mysql能直接进,但用密码登不进去。要改成密码认证:

sudo mysql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES;

然后就可以mysql -u root -p了。Ubuntu 下配置文件在/etc/mysql/mysql.conf.d/mysqld.cnf,改端口、改字符集都在这里。

4.2 CentOS/RHEL 用官方仓库安装

CentOS 默认源里没有 MySQL 8.0,需要先加官方仓库:

sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm sudo yum install mysql-community-server

装完启动并查看临时密码:

sudo systemctl start mysqld sudo grep 'temporary password' /var/log/mysqld.log

拿到临时密码后mysql -u root -p登录,同样用ALTER USER改密码。CentOS 下 MySQL 8.0 默认密码策略比较严,如果嫌麻烦可以调低:

SET GLOBAL validate_password.policy = LOW; SET GLOBAL validate_password.length = 6;

但生产环境别这么干,密码强度是安全底线。

4.3 Docker 一条命令起 MySQL 8.0

如果你机器上有 Docker,这是最快的方式:

docker run -d \ --name mysql8 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=yourpassword \ -e MYSQL_DATABASE=testdb \ -v /data/mysql8:/var/lib/mysql \ mysql:8.0 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci

参数逐个说:-d后台运行,--name给容器起名,-p 3306:3306把容器端口映射到宿主机,-e MYSQL_ROOT_PASSWORD设 root 密码,-e MYSQL_DATABASE顺便建一个库,-v把数据目录挂到宿主机,这样容器删了数据还在。最后那两行是传给 mysqld 的启动参数,设字符集。

提示:-v /data/mysql8:/var/lib/mysql这个挂载非常重要。不挂载的话,容器一删数据全没。挂载目录要先确保宿主机上存在且有权限。

起完之后docker exec -it mysql8 mysql -u root -p就能进去。想停就docker stop mysql8,想删就docker rm -f mysql8。Docker 方式特别适合同时要维护多个版本 MySQL 的场景,互不干扰。

5. Navicat 连接 MySQL 8.0 的配置与认证问题

5.1 新建连接的正确姿势

打开 Navicat,点"连接" → "MySQL",弹出配置窗口。几个关键字段:

  • 连接名:随便起,比如local-mysql8
  • 主机:本机就填localhost127.0.0.1。如果 MySQL 在虚拟机或另一台机器上,填那台机器的 IP。
  • 端口:默认 3306,如果你装的时候改过就填改后的。
  • 用户名:root。
  • 密码:你设的密码。

填完先别急着点确定,点左下角"测试连接"。如果提示成功,恭喜。如果报错,往下看。

5.2 caching_sha2_password 认证失败怎么解决

最常见的报错是Authentication plugin 'caching_sha2_password' cannot be loaded。这是因为 MySQL 8.0 默认用 caching_sha2_password 插件,而老版本 Navicat(16 之前)不支持。两个解决办法:

办法一:改用户认证插件。登录 MySQL 执行:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES;

这样 root 就用老的 mysql_native_password 认证,所有客户端都能连。缺点是安全性略低,但本地学习无所谓。

办法二:升级 Navicat。Navicat 16 及以上版本已经支持 caching_sha2_password,升级后不用改 MySQL 配置。如果你用的是 Navicat Premium 17,直接就能连。

5.3 远程连接连不上的排查

如果你在另一台机器上用 Navicat 连这台 MySQL,报Can't connect to MySQL server on 'x.x.x.x',按这个顺序查:

  1. MySQL 是否监听在所有网卡上。默认 MySQL 只监听127.0.0.1,外部连不进来。改配置文件my.inimysqld.cnf,把bind-address = 127.0.0.1改成bind-address = 0.0.0.0,重启服务。
  2. root 用户是否允许远程登录。MySQL 的 root 默认只允许localhost登录。需要创建一个允许远程的用户,或者改 root 的 host:
CREATE USER 'root'@'%' IDENTIFIED BY '你的密码'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
  1. 防火墙是否放行 3306 端口。Linux 下firewall-cmd --add-port=3306/tcp --permanent然后firewall-cmd --reload,或者直接关掉防火墙测试(生产环境别关)。

这三步走完基本都能连上。我遇到过最离谱的一次是云服务器安全组没放行 3306,查了半天本地配置,最后发现是云平台层面的问题。

6. 常见问题速查与避坑经验

6.1 服务启动失败排查表

现象可能原因解决办法
net start MySQL80报 1067配置文件路径错、data 目录损坏检查 my.ini 的 basedir/datadir,删 data 重新 initialize
服务启动后立即停止端口被占用`netstat -ano
Linux 下systemctl start mysqld失败libaio 缺失、权限问题装 libaio,检查 /var/lib/mysql 属主
初始化报unknown variablemy.ini 里有 MySQL 8.0 不认识的参数删掉可疑参数,用最小配置启动

6.2 密码相关的坑

MySQL 8.0 的密码策略比 5.7 严很多。如果你ALTER USER时报Your password does not satisfy the current policy requirements,说明密码太弱。要么换强密码,要么临时调低策略:

SET GLOBAL validate_password.policy = LOW; SET GLOBAL validate_password.length = 4;

但记住这是全局变量,重启后失效,要永久生效得写进配置文件。

还有一个经典问题:忘记 root 密码怎么办。停掉 MySQL 服务,用mysqld --skip-grant-tables启动(跳过权限验证),然后另开窗口mysql -u root直接进,执行FLUSH PRIVILEGES;ALTER USER改密码,改完正常重启服务。这个操作要谨慎,跳过权限验证期间任何本地用户都能连,改完立刻恢复正常模式。

6.3 字符集乱码问题

插入中文变成问号或者乱码,根源是字符集不统一。检查三个层面:

SHOW VARIABLES LIKE 'character%'; SHOW VARIABLES LIKE 'collation%';

确保character_set_servercharacter_set_databasecharacter_set_client都是utf8mb4。建库建表时也显式指定:

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Navicat 连接属性里也有字符集设置,选utf8mb4或者auto。三层都对齐了就不会乱码。

6.4 我踩过的几个真实坑

第一个坑:ZIP 版解压到C:\Program Files\mysql,路径里有空格,初始化直接失败。后来换到D:\mysql就好了。路径不要有空格和中文,这是铁律。

第二个坑:装完 MSI 版之后又装 ZIP 版,两个都想用 3306 端口,结果服务冲突。一台机器上尽量只保留一个 MySQL 实例,要多个就用 Docker 或者改端口。

第三个坑:Navicat 保存了旧密码,改了 MySQL 密码之后 Navicat 还拿旧密码连,一直报认证失败。在 Navicat 连接属性里重新输密码,或者删掉连接重建。

第四个坑:Docker 起 MySQL 时忘了挂载数据卷,容器删了之后数据全丢,只能重新初始化。Docker 方式一定要挂载/var/lib/mysql,这个教训值一个下午的工作量。

7. 装完之后该做的几件事

MySQL 装好只是开始,有几个收尾动作建议立刻做。第一,建一个日常用的普通用户,别一直用 root 干活:

CREATE USER 'dev'@'localhost' IDENTIFIED BY 'devpassword'; GRANT ALL PRIVILEGES ON mydb.* TO 'dev'@'localhost'; FLUSH PRIVILEGES;

第二,把my.inimysqld.cnf备份一份,以后调参数出问题能快速回滚。第三,用mysqladmin -u root -p status看一眼运行状态,确认连接数、运行时长正常。第四,如果你用 Navicat,把连接配置导出备份,换机器时直接导入。

我个人在实际操作中的体会是,MySQL 8.0 的安装难点不在技术本身,而在信息太杂。网上很多教程是 5.7 时代的,照搬到 8.0 就会踩认证插件和密码策略的坑。认准官方文档,遇到报错先看错误日志(Windows 在 data 目录下的.err文件,Linux 在/var/log/mysqld.log),日志里的信息比搜索引擎靠谱得多。最后再分享一个小技巧:装之前先截个图记录你的安装路径、端口、密码,装完出问题回头对照,能省掉大量"我到底填了什么"的回忆时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 23:11:34

Roo Code 不走魔搭社区,TaoToken 这条路行不行?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 23:10:44

51单片机交通灯状态机设计与定时器精准控制

简介:本资源是一份面向高校电子类、自动化专业学生的51单片机实训报告,聚焦交通灯控制系统设计与实现,解决嵌入式系统中定时控制、人机交互与硬件协同等典型工程问题。报告完整覆盖系统设计要求(含60秒红绿灯交替、黄灯闪烁5次过渡…

作者头像 李华
网站建设 2026/9/19 23:09:10

组合式液压试验台设计与搭建:模块化回路与测控系统解析

简介:《多功能组合式液压试验台研制总结报告》是一份针对高校液压实验教学改革的完整研制总结,面向机械设计制造及自动化、液压传动等专业师生及实验室建设人员。报告围绕自2006年底启动的试验台研制项目,系统阐述模块化结构、PLC控制系统、自…

作者头像 李华
网站建设 2026/9/19 23:08:52

Lenis 平滑滚动使用指南:3 步接好,让滚动和动画同频

Lenis 平滑滚动使用指南:3 步接好,让滚动和动画同频 【免费下载链接】lenis Smooth scroll as it should be 项目地址: https://gitcode.com/GitHub_Trending/le/lenis Lenis 是一个零依赖的小体积平滑滚动库:接管浏览器原生滚动&…

作者头像 李华