MySQL 9.1.0安装教程:Windows与Linux全流程保姆级指南
1. 写在安装之前为什么9.1.0值得你重新折腾一遍MySQL 9.1.0 是 Oracle 在创新版Innovation Release序列里的重要一版也是从 8.x 迈向新版本号体系之后普通开发者最容易接触到的“第一个大版本跳跃”。很多人一看到版本号从 8.0 跳到 9.1第一反应是“又改了个寂寞”但实际装完用上之后你会发现这一版在密码认证、clone 插件、MySQL Shell 语义、以及部分 SQL 模式的默认行为上都有肉眼可见的变化。这篇教程面向的是三类人刚接触 MySQL 不久想从零装一个最新版练手的新手已经在用 8.0但想评估 9.x 兼容性的开发或 DBA想要一份“照着敲就能跑通”的保姆级步骤不想在百度/Google 之间反复横跳的人。我会用 Windows 和 LinuxCentOS / Ubuntu 都有涉及两条主线来写因为这两类系统在安装思路上差异很大而且网上大量教程都只说一半导致很多人卡在 service 起不来、socket 连不上、root 密码重置这些环节。这篇不会再让你踩同样的坑。2. 下载前必须确认的三件事版本、平台、安装方式2.1 先分清“创新版”和“长期支持版”MySQL 从 8.0 之后采用了双版本线Innovation Release创新版和LTS长期支持版。9.1.0 属于创新版特点是功能更新快、会引入新特性但对应的维护周期短适合开发测试环境如果是生产环境求稳继续用 8.0.x 或者等 9.x 的 LTS 版本更保险。你在官网会看到类似MySQL Community Server 9.1.0的下载入口同时旁边还挂着8.0.40之类的 LTS 版本。不要选错。这篇教程的目标就是 9.1.0下载时认准这个版本号即可。2.2 确认操作系统和位数MySQL 官方安装包对系统的区分非常严格。Windows 下分.msi和.zip两种Linux 下分glibc2.28类通用包、rpm包、deb包。建议先执行uname -mLinux或查看系统属性Windows确认是 x86_64 还是 ARM 架构。以最常见的 x86_64 为例系统推荐安装包说明Windows 10/11mysql-9.1.0-winx64.zip 或 .msi.msi 适合交互式安装.zip 适合免安装CentOS 7/8, Rocky Linuxmysql-9.1.0-el7-x86_64.tar.gz 或 rpm bundleel7 兼容性好el8/el9 也能用Ubuntu 22.04/24.04mysql-9.1.0-linux-glibc2.28-x86_64.tar.xz 或 apt 源若用官方 tar 包需手动初始化Docker 场景mysql:9.1.0 镜像一条命令拉起适合快速体验2.3 想清楚用“源码包/二进制包”还是“包管理器”很多人一上来就apt install mysql-server结果装出来的是发行版仓库里的老版本根本不是 9.1.0。如果你一定要用包管理器建议先添加 MySQL 官方 apt/yum 源再安装这样才可能拿到 9.1.0。教程后面会给出具体命令。3. Windows 下安装 MySQL 9.1.0从 ZIP 包到命令行启动3.1 为什么我推荐 ZIP 包而不是 MSIMSI 安装器虽然点点点就行但它有一个隐藏问题默认安装路径经常带空格比如C:\Program Files\MySQL后续写配置文件、配环境变量、跑一些自动化脚本时容易踩坑。ZIP 免安装版反而更干净你把它解压到某个纯英文目录手动写一个my.ini再初始化数据目录就能完全掌控整个实例。这里我用D:\mysql-9.1.0-winx64作为示例目录。3.2 解压并配置 my.ini解压完成后在根目录新建一个文本文件重命名为my.ini。下面这份配置是经过实测的直接用就行[mysqld] # 端口号默认3306如果被占用可以改成3307 port3306 # 安装目录改成你自己的实际路径注意用双斜杠或反斜杠 basedirD:/mysql-9.1.0-winx64 # 数据目录存放数据库文件 datadirD:/mysql-9.1.0-winx64/data # 允许最大连接数 max_connections200 # 字符集设置 character-set-serverutf8mb4 collation-serverutf8mb4_0900_ai_ci # 默认存储引擎 default-storage-engineINNODB # 跳过MySQL8.0默认的caching_sha2_password这边可选 # default_authentication_pluginmysql_native_password [client] port3306 default-character-setutf8mb4注意basedir和datadir不能写错否则初始化必然报错MySQL 9.x 依然支持utf8mb4_0900_ai_ci作为默认排序规则不用刻意改成utf8mb4_general_cidefault_authentication_plugin参数我注释掉了因为 9.x 里mysql_native_password插件已被标记为废弃不建议再设置不然密码认证方式会退回老协议。3.3 初始化数据目录用管理员身份打开 CMD进入 MySQL 的bin目录执行cd D:\mysql-9.1.0-winx64\bin mysqld --initialize-insecure --console这里我用的是--initialize-insecure含义是初始化数据目录并且 root 账号初始密码为空。如果用--initialize系统会随机生成一个临时密码打印在控制台里记不住的话后续还得靠跳过授权表重置非常麻烦。初始化完成后你会在D:\mysql-9.1.0-winx64下看到data文件夹说明数据目录已生成。3.4 安装 Windows 服务并启动继续在管理员 CMD 中执行mysqld --install MySQL91 net start MySQL91--install后面跟的是服务显示名称我用MySQL91来区分 8.0 的服务。执行成功后服务会出现在 Windows 服务列表里并且开机自启。如果net start报错优先查看data目录下的.err日志文件里面会有明确的错误原因。大部分情况是my.ini路径写错或者端口被占用。3.5 使用 root 登录并修改密码初始化时我们用了空密码现在需要用 root 登录后再设置密码mysql -uroot -p -- 提示输入密码时直接回车 ALTER USER rootlocalhost IDENTIFIED BY 你的新密码; FLUSH PRIVILEGES;到这里Windows 下的安装已经完成。4. Linux 下安装 MySQL 9.1.0通用二进制包全流程Linux 上的坑比 Windows 多得多尤其是依赖库和目录权限。如果是 CentOS 7/8 或兼容环境我更推荐直接用 MySQL 官方提供的 Yum 源Ubuntu 用户则可以用 Apt 源当然也可以手动解压通用二进制包。这里先讲 Yum/Apt 源方案再补充手动 tar 包的路径。4.1 CentOS / Rocky Linux 使用官方 Yum 源首先安装 MySQL 官方仓库配置包。以 CentOS 7 为例rpm -Uvh https://dev.mysql.com/get/mysql84-community-release-el7-1.noarch.rpm注意官方仓库名是mysql84-community但仓库内部已经包含了 9.x 的 RPM。安装完仓库配置后执行yum install mysql-community-server -y如果仓库里默认启用的是 8.4 LTS你可以手动禁用 8.4 子仓库、启用 9.1 子仓库yum install yum-utils -y yum-config-manager --disable mysql84-community yum-config-manager --enable mysql-9.1-community yum install mysql-community-server -y安装完成后启动服务systemctl start mysqld systemctl enable mysqld4.2 Ubuntu 使用官方 Apt 源Ubuntu 的方法稍微迂回一点。先下载并安装仓库配置包wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb dpkg -i mysql-apt-config_0.8.33-1_all.deb安装过程中会弹出选择界面把 MySQL Server Cluster 的版本选成mysql-9.1然后一路 OK。再执行apt update apt install mysql-server -yUbuntu 装完默认启动的是mysql.service直接systemctl status mysql就能看到。4.3 通用二进制包安装tar.gz如果你不想污染系统的包管理器或者需要定制目录结构通用二进制包是最灵活的方案。groupadd mysql useradd -r -g mysql -s /bin/false mysql cd /usr/local tar -xvf mysql-9.1.0-linux-glibc2.28-x86_64.tar.xz mv mysql-9.1.0-linux-glibc2.28-x86_64 mysql-9.1.0 ln -s mysql-9.1.0 mysql创建数据目录并修改权限mkdir -p /usr/local/mysql-data chown -R mysql:mysql /usr/local/mysql /usr/local/mysql-data初始化cd /usr/local/mysql/bin ./mysqld --initialize-insecure --usermysql --basedir/usr/local/mysql --datadir/usr/local/mysql-data这里注意如果不加--usermysqlmysqld 会拒绝以 root 身份初始化。初始化完成后用--daemonize参数后台启动./mysqld --daemonize --usermysql --basedir/usr/local/mysql --datadir/usr/local/mysql-data4.4 设置 systemd 服务如果你希望用systemctl管理可以手动创建服务文件/etc/systemd/system/mysqld91.service[Unit] DescriptionMySQL 9.1.0 Afternetwork.target [Service] Typesimple Usermysql Groupmysql ExecStart/usr/local/mysql/bin/mysqld --basedir/usr/local/mysql --datadir/usr/local/mysql-data Restarton-failure LimitNOFILE65535 [Install] WantedBymulti-user.target然后执行systemctl daemon-reload systemctl start mysqld91 systemctl enable mysqld914.5 Linux 下首次登录的临时密码如果使用了--initialize带随机密码执行下面命令从日志中提取临时密码grep temporary password /var/log/mysqld.log然后登录并改密mysql -uroot -p ALTER USER rootlocalhost IDENTIFIED BY 新密码;5. 安装完成后必须做的检查服务、端口、密码策略5.1 检查服务进程和端口监听systemctl status mysqld ss -lntp | grep 3306Windows 下用netstat -ano | findstr 33065.2 检查插件与默认认证方式MySQL 9.x 默认认证插件是caching_sha2_password登录后可以用下面的 SQL 查看SHOW VARIABLES LIKE default_authentication_plugin; SELECT user, host, plugin FROM mysql.user;如果你用的是比较老的客户端比如 8.0 之前的驱动或 Navicat 旧版连接时可能报Authentication plugin caching_sha2_password cannot be loaded。解决办法有两个升级客户端驱动到支持 caching_sha2_password 的新版本将该用户的认证方式改回 mysql_native_password不推荐但兼容老项目ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 密码;5.3 修改默认密码策略9.1.0 默认密码策略为STRONG要求密码包含大小写字母、数字和特殊字符且长度至少 8 位。如果只是本地开发太复杂的密码纯粹给自己找麻烦SET GLOBAL validate_password.policy LOW; SET GLOBAL validate_password.length 4;注意这些是全局动态变量重启后失效。想永久生效需要写进my.ini或/etc/my.cnf[mysqld] validate_password.policyLOW validate_password.length46. 高频报错排查从 2002 到 1045 到安装失败6.1 ERROR 2002 (HY000): Cant connect to local MySQL server through socket这是 Linux 平台最经典的问题很多人刚装完 9.1.0 就卡在这里。原因通常是 MySQL 服务没启动或者客户端连接时走的 socket 文件路径和服务端不一致。先确认服务到底起没起systemctl status mysqld91如果服务是 active (running)但还是报 socket 错误那就要检查 socket 文件路径。默认一般位于/tmp/mysql.sock或/var/run/mysqld/mysqld.sock。通过命令行指定主机和 socket 重试mysql -uroot -p --socket/tmp/mysql.sock还有一种可能是目录/var/run/mysqld不存在mysqld 无法创建 socket 文件。手动创建并授权mkdir -p /var/run/mysqld chown mysql:mysql /var/run/mysqld6.2 ERROR 1045 (28000): Access denied for user rootlocalhost这个报错的意思是认证失败密码错误或 root 账号不允许从当前来源登录。常见场景是刚安装完不知道初始密码或者改了密码忘了。如果记得密码但不想用可以用以下步骤重置停止 MySQL 服务以跳过授权表方式启动mysqld --skip-grant-tables --skip-networking 直接空密码登录mysql -uroot -p修改密码FLUSH PRIVILEGES; ALTER USER rootlocalhost IDENTIFIED BY 新密码;退出并重启正常服务。注意9.x 里--skip-grant-tables模式默认也会禁用远程连接这是保护机制。6.3 Windows 下 datadir 初始化失败Windows 下mysqld --initialize-insecure如果报Failed to create data directory十有八九是my.ini里datadir的目录不存在或没有读写权限。先手动创建对应文件夹再赋予当前用户完全控制权限然后重跑。6.4 服务无法启动The service already exists重复执行mysqld --install会提示服务已存在。可以先删除mysqld --remove MySQL91再重新安装。6.5 MySQL 启动后自动退出 / 崩溃Linux 下用通用二进制包启动时最常见的是缺少libaio依赖yum install libaio -y # 或 apt install libaio1 -yCentOS 7 上还容易缺ncurses-compat-libs一并提醒。7. 安装完顺手做的三件优化初始化账号、字符集、远程访问7.1 创建普通用户而不是固守 root刚装完 MySQL 的人很喜欢一直用 root 干活后面项目上线时再改权限会非常痛苦。建议装完顺手建一个业务账号CREATE USER app_userlocalhost IDENTIFIED BY App123456; GRANT ALL PRIVILEGES ON app_db.* TO app_userlocalhost; FLUSH PRIVILEGES;7.2 字符集统一 utf8mb4MySQL 8.0 默认已经是 utf8mb4但很多老项目导进来的库还是 latin1最终导致中文乱码。安装完建议检查SHOW VARIABLES LIKE character_set_server; SHOW VARIABLES LIKE collation_server;如果不是 utf8mb4再在配置文件里强制指定character-set-serverutf8mb4 collation-serverutf8mb4_0900_ai_ci7.3 开放远程连接注意安全需要远程连 MySQL 时先看 root 用户是否允许远程访问SELECT user, host FROM mysql.user WHERE userroot;默认 root 的 host 是localhost不支持远程。可以创建专用远程账号CREATE USER remote_user% IDENTIFIED BY Remote123456; GRANT ALL PRIVILEGES ON *.* TO remote_user% WITH GRANT OPTION; FLUSH PRIVILEGES;同时确保 Linux 防火墙放行 3306firewall-cmd --permanent --add-port3306/tcp firewall-cmd --reload到这里MySQL 9.1.0 的完整安装、初始化、常见排错和基础优化已经一条龙走完。这套流程我前后在不同服务器上跑过好几遍踩坑点就是上面提到的那些照着走基本能一路顺风。

相关新闻

净利润暴增529%背后:拆解工厂智能物流集成商的V型反转与真实含金量

净利润暴增529%背后:拆解工厂智能物流集成商的V型反转与真实含金量

朋友圈被一条财报数据刷了屏:净利润同比暴增529%。乍一看以为是哪家互联网大厂,结果点进去是一家做工厂智能物流的集成商。这个行业平时很低调,名字扔到街上没几个人认识,但就是这样的公司,在过去一年里走了一个标准的…

2026/9/24 19:35:05 阅读更多 →
从Code Review看反直觉代码:位运算与算法背后的精妙设计

从Code Review看反直觉代码:位运算与算法背后的精妙设计

上个月做Code Review,我看到同事提交的一个方法,第一反应是:写这个方法的人真是个不折不扣的大啥春儿!这个梗出自《哆啦A梦》里胖虎的口头禅,后来在程序员圈子里专门用来形容那种“第一眼看过去觉得对方脑子有坑&#…

2026/9/24 19:35:05 阅读更多 →
GTA5 460报错排查:GPU TDR与D3D初始化失败的完整修复指南

GTA5 460报错排查:GPU TDR与D3D初始化失败的完整修复指南

1. 先别急着翻论坛,460报错的真实来源藏在系统日志里大概半年前,我遇到GTA5启动没几分钟就弹ERR_GFX_D3D_INIT的460报错,画面一黑、驱动停止响应,然后被踢回桌面。那时候我和大多数人一样,第一反应就是去贴吧、论坛一页…

2026/9/24 19:35:05 阅读更多 →

最新新闻

麒麟V10安装openGauss全记录:兼容性排查与源码编译实战

麒麟V10安装openGauss全记录:兼容性排查与源码编译实战

下午四点多,我接手一台刚装好银河麒麟 V10 的服务器,任务很明确:把 openGauss 跑起来。当时我心里想的是,数据库安装这种事,最多半小时搞定。结果从下午一直折腾到晚上,中间踩的坑一个接一个,最…

2026/9/24 20:14:36 阅读更多 →
让AI直接调用.NET接口:MCP服务端与客户端落地实战

让AI直接调用.NET接口:MCP服务端与客户端落地实战

让 AI 直接调你的 .NET 接口:MCP 服务端与客户端落地实战先说我为什么会折腾这个事儿。前阵子团队里老有人抱怨:AI 写代码再强,也只是一块"高级键盘",它看不到我们系统的真实数据。你问它"这个订单是什么状态"…

2026/9/24 20:14:36 阅读更多 →
法国EPR追溯应对指南:从通知识别到合规整改全解析

法国EPR追溯应对指南:从通知识别到合规整改全解析

1. 被追溯通知到手:先分清你遇到的是哪一种"追"法国EPR被追溯,这个事在跨境圈里这两年已经不算新闻了,但每次有卖家把通知截图甩进群里,第一句话永远是同一个:"我是不是要被罚死了?"先…

2026/9/24 20:14:36 阅读更多 →
Python豆瓣音乐数据可视化平台:爬虫+Flask+Echarts实战解析

Python豆瓣音乐数据可视化平台:爬虫+Flask+Echarts实战解析

又到了一年一度的毕设季节,后台私信里问得最多的就是“课设/毕设选什么题”。Java管理系统、PHP商城这类题目早已经被做烂了,答辩时老师一听标题就没什么兴趣。反而是Python爬虫数据可视化这一条线,几乎每年都能拿到不错的评价。今天我就把“…

2026/9/24 20:14:36 阅读更多 →
数据库保护+:从备份恢复到权限审计的体系化实战指南

数据库保护+:从备份恢复到权限审计的体系化实战指南

数据库保护这件事,做了这么多年,每年都有新花样。今年你随便打开一个技术社区,数据库安全相关的讨论热度依然居高不下,但聊的内容和三五年前已经完全不一样了。“2026数据库保护”这个标题,恰恰点出了当前的核心趋势&a…

2026/9/24 20:14:36 阅读更多 →
CNN遥感影像地物分类实战:Landsat数据处理与Python源码详解

CNN遥感影像地物分类实战:Landsat数据处理与Python源码详解

简介:一套基于PyTorch的CNN深度学习遥感影像地物分类项目源码,面向人工智能、遥感、自动化、电子信息等专业的高校师生与从业者,适用于毕业设计、课程设计或项目初期演示。代码经严格测试可正常运行,包含数据切块、模型训练、新影…

2026/9/24 20:13:35 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →