ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

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.0MySQL 8.0 的版本号格式是8.0.x比如8.0.36、8.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.com或www.mysql.com认准这个。2.2 安装包类型怎么选MSI、ZIP 还是 DockerWindows 上官网提供两种主要形式安装包类型文件名特征适合人群优缺点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 用aptCentOS/RHEL 用yum或dnf也可以下载官方的tar.gz或rpm包。生产环境我更推荐用官方仓库安装版本管理清晰。2.3 系统位数和依赖检查下载前确认你的系统是 64 位。现在基本没有 32 位系统了但如果你在虚拟机里跑注意别装成 32 位系统。Windows 上还需要确认已安装Visual C RedistributableMySQL 8.0 依赖它缺了会报找不到 VCRUNTIME140_1.dll之类的错误。官网下载页通常会提示装之前先把这个装上。Linux 上要确认libaio库存在Ubuntu 下apt install libaio1CentOS 下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 或者 CustomDeveloper 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 Encryptioncaching_sha2_password一个是Use Legacy Authentication Methodmysql_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] basedirD:\mysql-8.0.40 datadirD:\mysql-8.0.40\data port3306 character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci default-authentication-pluginmysql_native_password [client] port3306 default-character-setutf8mb4这里几个参数解释一下。basedir和datadir必须写绝对路径反斜杠在 ini 文件里可以直接用。character-set-serverutf8mb4是关键MySQL 8.0 默认字符集已经是 utf8mb4 了但显式写出来更保险utf8mb4 支持 emoji 和更多生僻字比老的 utf8其实是 utf8mb3强。default-authentication-pluginmysql_native_password是为了兼容老客户端如果你确定只用新工具可以删掉这行。第二步以管理员身份打开命令提示符进入 bin 目录执行初始化cd /d D:\mysql-8.0.40\bin mysqld --initialize --console注意--console参数会把初始化日志打到屏幕上其中有一行A temporary password is generated for rootlocalhost: xxxxxxxx这个临时密码一定要记下来第一次登录要用。如果你不小心关了窗口没记下来删掉 data 目录重新初始化。注意初始化时如果报mysqld: Cant create directory多半是 datadir 路径不对或者权限不够。确认路径存在且当前用户有写权限。第三步安装服务并启动mysqld --install MySQL80 net start MySQL80如果提示服务名已存在先sc delete MySQL80删掉再装。第四步登录并改密码mysql -u root -p输入刚才记下的临时密码。进去之后第一件事就是改密码ALTER USER rootlocalhost 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.0Ubuntu 20.04 之后的版本默认源里的 MySQL 就是 8.0。直接sudo apt update sudo apt install mysql-server装完 MySQL 会自动启动并且 root 用户默认用auth_socket插件认证也就是说你sudo mysql能直接进但用密码登不进去。要改成密码认证sudo mysql ALTER USER rootlocalhost 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_PASSWORDyourpassword \ -e MYSQL_DATABASEtestdb \ -v /data/mysql8:/var/lib/mysql \ mysql:8.0 \ --character-set-serverutf8mb4 \ --collation-serverutf8mb4_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。主机本机就填localhost或127.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 插件而老版本 Navicat16 之前不支持。两个解决办法办法一改用户认证插件。登录 MySQL 执行ALTER USER rootlocalhost 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报Cant connect to MySQL server on x.x.x.x按这个顺序查MySQL 是否监听在所有网卡上。默认 MySQL 只监听127.0.0.1外部连不进来。改配置文件my.ini或mysqld.cnf把bind-address 127.0.0.1改成bind-address 0.0.0.0重启服务。root 用户是否允许远程登录。MySQL 的 root 默认只允许localhost登录。需要创建一个允许远程的用户或者改 root 的 hostCREATE USER root% IDENTIFIED BY 你的密码; GRANT ALL PRIVILEGES ON *.* TO root% WITH GRANT OPTION; FLUSH PRIVILEGES;防火墙是否放行 3306 端口。Linux 下firewall-cmd --add-port3306/tcp --permanent然后firewall-cmd --reload或者直接关掉防火墙测试生产环境别关。这三步走完基本都能连上。我遇到过最离谱的一次是云服务器安全组没放行 3306查了半天本地配置最后发现是云平台层面的问题。6. 常见问题速查与避坑经验6.1 服务启动失败排查表现象可能原因解决办法net start MySQL80报 1067配置文件路径错、data 目录损坏检查 my.ini 的 basedir/datadir删 data 重新 initialize服务启动后立即停止端口被占用netstat -anoLinux 下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_server、character_set_database、character_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 devlocalhost IDENTIFIED BY devpassword; GRANT ALL PRIVILEGES ON mydb.* TO devlocalhost; FLUSH PRIVILEGES;第二把my.ini或mysqld.cnf备份一份以后调参数出问题能快速回滚。第三用mysqladmin -u root -p status看一眼运行状态确认连接数、运行时长正常。第四如果你用 Navicat把连接配置导出备份换机器时直接导入。我个人在实际操作中的体会是MySQL 8.0 的安装难点不在技术本身而在信息太杂。网上很多教程是 5.7 时代的照搬到 8.0 就会踩认证插件和密码策略的坑。认准官方文档遇到报错先看错误日志Windows 在 data 目录下的.err文件Linux 在/var/log/mysqld.log日志里的信息比搜索引擎靠谱得多。最后再分享一个小技巧装之前先截个图记录你的安装路径、端口、密码装完出问题回头对照能省掉大量我到底填了什么的回忆时间。
返回列表