
1. 装之前先搞清楚你要哪个版本MySQL的安装和卸载几乎每个接触过数据库的人都操作过但真正一次装好、一次卸载干净的人并不多。这篇文章我会从版本选择、Windows和Linux两套安装方式、常见错误排查到彻底卸载的完整步骤把踩过的坑和常用的处理办法都写出来。无论你是刚入门的后端开发还是要自己维护测试环境的运维应该都能找到可直接用的操作参考。1.1 社区版还是企业版MySQL官网提供两个主分支Community Server社区版和 Enterprise Edition企业版。社区版遵循 GPL 协议开源免费企业版包含了在线热备份、防火墙、审计等商业化功能需要付费订阅。绝大多数个人开发、中小型项目、学习环境社区版完全够用没有必要去碰企业版。打开官网下载页面时要注意默认展示的就是 Community Server旁边可能有一些引导你订阅的卡片不要点错。社区版下载地址是 mysql.com/downloads然后在页面底部找 MySQL Community (GPL) 入口再选 MySQL Community Server。很多新手会被官网首页眼花缭乱的按钮带偏下载成了 MySQL Enterprise 的试用安装包回头装完一抹黑。所以下载前第一件事就是确认你拿到的到底是不是社区版安装包。1.2 版本号里的玄机MySQL 的版本号形如 8.0.39主版本号是 8小版本是 0补丁版本是 39。小版本升级通常包含新功能和性能改进补丁版本则主要修 bug 和安全漏洞。截至我写这篇内容的时间点最常见的选择是 MySQL 8.0 系列官网也默认推荐 8.0.x 的滚动版本。但这里有个容易忽略的坑MySQL 从 2022 年开始改变了发布节奏把 8.1 定为创新版Innovation之后 8.2、8.3 陆续出现8.4 则是 LTS长期支持版本。也就是说社区版现在分为两类创新版和新功能更多但维护周期短LTS 版维护周期长适合生产使用。如果让我给建议本地学习和新开发项目直接用 MySQL 8.0 最新补丁版或者 8.4 LTS 都行已经跑着 5.7 的老项目建议尽早规划升级到 8.0因为 5.7 早在 2023 年就结束了官方支持。别在生产环境用 8.1、8.2 这类创新版升级周期太快维护成本高。1.3 安装包类型怎么选同一版本的 MySQL 提供了不止一种安装文件Windows 下有 MSI Installer 和 ZIP Archive 两种主流选择Linux 下有 apt、yum、RPM、源码编译等。很多人装 MySQL 时报错往往不是操作步骤错而是选错了安装包类型。我的建议是Windows 上如果只想要最省事的一路 Next首选 MSI 安装向导如果希望把 MySQL 当作便携软件放进某个目录、或者一台机器上跑多个 MySQL 实例用 ZIP 解压版更灵活。Linux 上优先用官方仓库通过包管理器安装除非你的机器无法访问外网才考虑下载 RPM 包手动安装。这些选择背后的细节我在后面的章节里会分别展开。先把版本和安装包类型定下来后面就少一半麻烦。2. Windows 下 MySQL 的安装MSI 和 ZIP 两条路线2.1 从官网找到真正能用的下载入口很多人在搜索引擎搜“MySQL下载”点进去却是第三方镜像或爬虫站下载下来要么无法启动要么绑了一堆推广软件。正确姿势是直接进入 dev.mysql.com/downloads/mysql/选择操作系统后会看到一个很大的下载列表。列表里通常有几个链接MySQL Installer for Windows包含多个小文件的在线安装器体积不到 2MB需要联网下载组件和 MySQL Installer for Windows将所有组件打包在一个大文件里离线安装更方便。如果你的网速不稳定建议直接下那个几百 MB 的完整版省得中途断线。文件还有 MD5 校验值可以核对虽然不是必需操作但你可以用系统的 certutil -hashfile 命令核对一下下载文件的 MD5防止因网络原因拿到损坏的安装包。这一步不是必须但偶尔能帮你排查到安装包本身的问题。2.2 MSI 安装向导的完整配置流程拿到 MSI 文件后双击运行如果系统提示需要 .NET Framework 或 Visual C 运行时先装好这些依赖否则可能会出现 0xe0434352 这类错误这个我在后面排查章节单独说。进入向导后有几个关键步骤需要留意第一是 Choose a Setup Type。我建议选 “Server only”因为默认的 “Developer Default” 会附带 MySQL Workbench、Excel 插件、Visual Studio 集成等一堆组件开发机也许用得上但如果是普通服务器或者只想跑数据库的机器装这些就是浪费而且拉长安装时间。第二是 Check Requirements向导会自动检测环境依赖缺什么就装什么。如果项目需要跟其他客户端工具连接确保这里没有红色错误项。第三是特性定制Server 部分是核心如果选了 Workbench 等组件可以后面再用 Installer 卸载不必纠结。第四是配置 MySQL Server 的端口默认 3306除非被占用否则不要改。新手常犯的错误是 3306 被自己装的另一个服务占了还在继续下一步最后连不上。可以在命令提示符里执行 netstat -ano | findstr 3306 提前检查。第五是认证方式向导默认推荐 “Use Strong Password Encryption for Authentication (RECOMMENDED)”对应的是 caching_sha2_password。早期很多客户端比如老版本 PHP 驱动、Navicat 旧版本不支持这个插件所以才有了第二种选项 “Use Legacy Authentication”。如果你只是自己开发选默认即可如果需要跟老系统对接先确认客户端支持情况。建议尽量选强认证老插件安全性差。第六是设置 root 密码这个密码记好后面所有操作都要用到。密码不要设置太简单至少 8 位、混合字母和数字。第七是 Windows Service 配置默认服务名为 MySQL80你可以改成自己熟悉的名称比如 MySQL-First。还要注意默认勾选的 “Start the MySQL Server at System Startup” 和服务启动账号。按默认来通常就行。设置完成后向导会自动安装并启动服务。看到 Success 页面时MySQL 已经可以连了。2.3 ZIP 解压版适合多实例和定制环境ZIP 版本的优点是不需要走安装向导只需要下载解压、初始化数据目录、启动服务而且可以任意移动目录想删就删不留系统痕迹前提是你没注册成系统服务。具体步骤我先做一次说明后面实操环节会再带一遍先解压到纯英文路径下比如 D:\mysql-8.0.39-winx64然后在解压目录下新建 my.ini 文件配置 basedir 和 datadir接着用管理员权限打开命令提示符进入安装目录的 bin 目录执行 mysqld --initialize-insecure注意如果目录里有旧数据会初始化失败之后执行 mysqld --install然后用 net start mysql 启动服务。ZIP 版本最大的坑有两个一是 my.ini 编码和配置项容易写错二是没有自动配置系统服务。但只要你按规范来它比 MSI 更可控尤其是在测试不同版本时复制一份目录就能跑一个新实例。2.4 初始化数据目录时的一次性密码MSI 向导会自动帮你初始化数据目录并设置 root 密码。ZIP 版本则需要你手动初始化。初始化有两种模式。mysqld --initialize --console 会生成一个随机临时密码输出在控制台上mysqld --initialize-insecure --console 则会创建一个 root 空密码账号。临时密码是这样的你可以看到日志里有一行类似 [Note] A temporary password is generated for rootlocalhost: hGt5#xS8sJ如果你没看全重新执行初始化又容易报错所以建议用 --initialize-console 时把终端缓冲区调大或者先创建一个日志目录用命令重定向输出到文件再查看。如果你用 --initialize-insecure 生成空密码之后第一件事就是用 mysql -uroot 登录然后立刻设置新密码否则任何本地用户都能用空密码访问你的数据库这是多危险的事不用我多说。2.5 自定义 my.ini 的几个推荐配置ZIP 版或者 MSI 版都允许你自定义 my.iniMSI 版通常放在数据目录下。一个常见配置例子如下[mysqld] basedirD:/mysql-8.0.39-winx64 datadirD:/mysql-8.0.39-winx64/data port3306 max_connections200 character-set-serverutf8mb4 default-storage-engineInnoDB有几个地方要特别提醒。basedir 和 datadir 在 Windows 里可以用正斜杠也可以写双反斜杠但不要写单个反斜杠否则会被当成转义符。datadir 指向的目录必须存在或者由 mysqld 初始化时创建。如果文件里有中文路径或者目录含中文名很可能会导致服务启动失败。字符集方面MySQL 8.0 默认字符集已经是 utf8mb4如果你的程序需要兼容老数据可以显式配置 feature还需要注意连接层的字符集建议在 my.ini 里加 [client] default-character-setutf8mb4否则命令行下输入中文可能会乱码。3. Linux 下 MySQL 的安装官方仓库最靠谱3.1 别直接用系统自带的 MySQL 包很多 Linux 发行版自带的 mysql-server 要么版本很老要么是 MariaDB 分支。它们的文件路径、参数名和 MySQL 官方版本有细微差异。如果你希望在生产环境安装 MySQL 官方版本最佳途径是添加 MySQL 官方 apt/yum 仓库然后通过包管理器安装。添加官方仓库需要 root 权限。安装方式根据发行版不同略有差异。数据库的包管理器版本跟你的系统版本绑定推荐到 MySQL 官方文档页 “Installing MySQL on Linux” 里获取对应的仓库包地址。下面我只写步骤思路不贴死链接因为官网地址会更新。3.2 Debian/Ubuntu 系安装步骤先更新系统然后下载对应发行版的 deb 仓库包。仓库包安装后会往 /etc/apt/sources.list.d/ 里增加一个 .list 文件。执行 apt update 刷新索引。安装命令sudo apt install mysql-server按照官方仓库的命名安装完成后服务名是 mysql而不是 mysqld。可以执行sudo systemctl start mysql sudo systemctl enable mysql这里有个细节apt 安装的 MySQL 8.0 在初次启动后会在日志中生成一个临时 root 密码。日志文件位置通常是 /var/log/mysql/error.log 或 /var/log/mysqld.log。用 grep temporary password 那个日志文件就能找到。拿到临时密码后再执行 mysql_secure_installation 进入初始化流程按提示设置新密码、移除匿名账号、禁止 root 远程登录。如果日志里找不到临时密码或者你是通过 deb 仓库自动安装可能 root 密码是空的那就直接 mysql -uroot 试一下。每个发行版的处理不一样遇到的时候别慌挨个排查。3.3 CentOS/RHEL 系安装步骤CentOS 7 和 RHEL 8 上的安装方式大体一致先安装 release 包比如 mysql80-community-release-el7-*.rpm。安装完 release 包后yum 或 dnf 仓库里就会出现 mysql-community-server。CentOS 7 用sudo yum install mysql-community-serverRHEL 8 / CentOS 8 用sudo dnf install mysql-community-server安装完成后启动服务并查看状态sudo systemctl start mysqld sudo systemctl enable mysqld sudo systemctl status mysqldRHEL 系首次启动时同样会生成临时 root 密码它记录在 /var/log/mysqld.log 中sudo grep temporary password /var/log/mysqld.log用临时密码登录后第一件事就是修改 root 密码。在 MySQL 8.0 中密码策略默认中等强度不能设置 123456 这类弱密码必须符合长度和复杂度要求。如果你只是想本地开发可以临时降低密码策略但不建议在服务器上这样做。3.4 手动 RPM 安装适合什么场景RPM 手动安装适合无法连接外部仓库、内网离线部署的环境。你需要下载 mysql-community-common、mysql-community-libs、mysql-community-client、mysql-community-server 这几个关键 RPM 包还需要确认依赖关系比如 compat-openssl10 之类的。安装顺序一般是先装 common再 libs然后 client最后 serversudo rpm -ivh mysql-community-common-*.rpm sudo rpm -ivh mysql-community-libs-*.rpm sudo rpm -ivh mysql-community-client-*.rpm sudo rpm -ivh mysql-community-server-*.rpm如果系统上已经装过 MariaDB-libsrpm 安装过程中可能会提示文件冲突。常见解决方式是把 MariaDB-libs 移除但移除前要确认没有服务依赖它。手动 RPM 安装没有预装 systemd 服务需要你自己用 mysqld --initialize 初始化然后使用 mysqld_safe 之类的启动方式或者手动创建 systemd unit 文件。复杂度明显高于仓库安装非离线场景不建议选。3.5 初始化后的安全选项无论用哪种方式安装装完后的安全初始化都是绕不开的。mysql_secure_installation 工具会引导你完成几个关键操作设置密码强度校验、删除匿名用户、禁止 root 远程登录、删除 test 数据库和权限表刷新。注意MySQL 8.0 默认已经禁止了 root 远程登录你可以在本地通过 root 连接然后单独创建应用账号并授权。应用账号的授权命令要控制好权限范围不要动不动 ALL PRIVILEGES ON.。如果初始化过程中提示密码不符合策略可以先用临时密码登录然后查看全局变量 validate_password.length 等。对于开发环境你可以用SET GLOBAL validate_password.policyLOW; SET GLOBAL validate_password.length6;再做密码修改。但生产环境请保持默认的强密码策略。4. 安装过程中的常见问题排查实录4.1 Windows 下的 0xe0434352 错误很多人在 Windows 上安装 MySQL 8.0 的 MSI 时会碰到一个以 0xe0434352 结尾的弹出框提示安装失败。这个错误码不是 MySQL 特有的而是 Windows 表示 “.NET 运行时异常” 的通用错误码。绝大多数原因是你机器上的 Visual C 可再发行组件或者 .NET Framework 版本太低无法运行 MySQL Installer。我的建议是先安装最新的 Microsoft Visual C Redistributable2015-2022 版本再安装 .NET Framework 4.8 或更高版本然后重新运行安装程序。有时候安装器还会需要 VC 2013 运行时所以最好把常见的 vc_redist.x64.exe 都装一遍。顺序是先装基础运行库再跑 MySQL 安装程序。如果你已经装过这些依赖还是报错可以尝试以管理员身份运行安装程序因为部分目录写入权限不足也会触发这个通用异常。4.2 MySQL 8 的连接层 SSL 错误MySQL 8 默认开启了 SSL 连接支持。有些客户端版本较老或者服务器上的 OpenSSL 库版本不匹配会导致连接时出现 “SSL connection error: unknown error number” 或者 “Authentication plugin ‘caching_sha2_password’ cannot be loaded” 之类的信息。排查思路是先确认服务端是否能正常连接。在 MySQL 服务器本机执行mysql -uroot -p如果本机能连而远程客户端连不上那优先检查防火墙、skip-bind-address 配置以及 MySQL 端口是否监听在 0.0.0.0 上。如果客户端工具比较老可以考虑在连接字符串中配置 useSSLfalse或者对老客户端暂时使用 native_password 认证插件。但注意这属于临时方案长期来看建议升级客户端。MySQL 8.0 的连接层默认需要的 OpenSSL 版本和 TLS 协议一般没问题但如果你用的是一年前下载的旧版客户端握手失败的概率比较大。4.3 服务启动失败先看 data 目录和日志MySQL 服务安装好但无法启动这是安装过程中最常遇到的坑。在 Windows 上表现为 net start mysql 后提示“服务无法启动服务没有报告错误”在 Linux 上表现为 systemctl start mysqld 失败。第一步永远是看错误日志。Windows 下默认错误日志在数据目录下比如 D:\mysql\data\计算机名.errLinux 在 /var/log/mysql/ 或 /var/lib/mysql/ 下面。日志末尾通常能看到失败原因。常见原因之一是 datadir 路径指向的目录并不存在或者没有写入权限。Windows 下如果 my.ini 里写的 datadir 是 C:\ProgramData\MySQL\MySQL Server 8.0\Data但该目录没有初始化启动就会失败。解决办法是进入 bin 目录执行 mysqld --initialize-insecure 完成初始化然后重新启动服务。Linux 下如果是用官方 RPM 安装数据目录 /var/lib/mysql 通常已创建好。如果手动初始化过注意目录属主必须是 mysql 用户sudo chown -R mysql:mysql /var/lib/mysql4.4 修改 my.ini 后起不来的排查步骤我专门把“改配置改崩”单独拿出来说因为这种情况太容易忽略了。大多数时候不是配置逻辑错了而是语法或权限问题。配置文件的几个高频错误点文件保存的编码不对Windows 下的记事本默认可能是 ANSI 编码存成 UTF-8 后 MySQL 无法识别部分配置项拼写错误比如 “bind_adderss” 少了一个字符服务解析时会静默跳过或直接拒绝启动格式上多了空格比如port 3306可以但 tab 键混用有时怪怪的还有一个是 datadir 末尾多了一个斜杠导致目录不存在。如果你的 MySQL 之前能正常启动改了配置文件后起不来最快的方法是先找出你修改的地方逐条回退每次只改一项。建议每次修改前备份 my.ini然后改完通过命令行启动并观察错误输出mysqld --console如果看到 Unknown variable 之类的提示说明配置文件有拼写错误。5. 卸载 MySQL别以为删掉目录就完事5.1 Windows 下用官方 Installer 卸载很多人卸载 MySQL 时图省事直接把安装目录 Delete然后发现服务还有磁盘里还有几百 MB 隐藏数据甚至在重装的时候各种报错。卸载这件事最稳妥的是用当初安装时所用的方式卸。如果你是用 MSI 安装的最省事的方法是重新运行 MySQL Installer点击 “Remove”然后勾选 MySQL Server 和相关组件选择完全移除。这个官方卸载工具会顺带处理一部分注册表项和服务项但注意它未必能清理 Data 目录和用户配置。如果是 ZIP 版安装的没有 Installer 可用必须先停掉服务再卸载。打开管理员 CMD执行net stop mysql mysqld --remove mysql这里如果服务名不是 mysql把服务名替换成你自己的名称。执行完可以通过 sc query mysql 验证一下如果返回的服务状态是 “SERVICE_STOPPED” 或者直接报“指定的服务未安装”说明服务已删除。5.2 清理 ProgramData 和注册表残留ZIP 版或 MSI 版卸载后至少还有两个地方的残留C:\ProgramData\MySQL 下的数据目录注册表里的 MySQL 键。ProgramData 是隐藏目录包含你所有数据库文件。如果你确实不再需要这些数据直接删掉即可如果你只是卸载重装建议先复制备份。注册表方面打开 regedit定位到如下路径逐个检查删除涉及 MySQL 的键HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL还要检查环境变量里有没有手动添加过的 MySQL bin 路径比如 D:\mysql\bin这些不会自动移除留着可能影响后续其他软件的判断。清理注册表前要谨慎建议先备份注册表或导出需要修改的键防止误删系统服务。5.3 Linux 下彻底卸载官方 MySQLLinux 下卸载 MySQL 的过程比较简单但也很容易留下依赖包和配置。先停掉服务sudo systemctl stop mysql sudo systemctl disable mysqlDebian/Ubuntu 下使用 apt 卸载官方 MySQLsudo apt purge mysql-server mysql-server-8.0 mysql-client sudo apt autoremovepurge 会同时删除相关配置文件。如果你还想移除 MySQL 官方 apt 仓库配置则删除 /etc/apt/sources.list.d/mysql*否则后续 apt update 可能会继续加载仓库。CentOS/RHEL 下使用 dnf 卸载sudo dnf remove mysql-community-server同样要记得卸载仓库包 mysql80-community-release。查看系统是否还有残余组件rpm -qa | grep mysql有残留就用 rpm -e 加上包名逐个移除。5.4 数据目录的去留怎么选择卸载数据库时最纠结的是数据目录要不要删。如果你只是为了升级版本旧数据一定要备份建议在卸载前用 mysqldump 把数据库全部逻辑导出然后再删物理文件如果你要完全清干净重新开始那数据目录整个删掉没问题。Windows 下数据目录默认在 C:\ProgramData\MySQL\MySQL Server 8.0\DataLinux 下是 /var/lib/mysql。删除前最好用命令确认一下路径不要因为手滑删了别的目录。我自己的经验是无论是否计划保留先在系统盘之外单独建一个备份目录把整个 Data 文件夹复制过去再执行卸载清理这样任何时候反悔都来得及。6. 写在安装卸载之后的一些话这一节没有太多技术内容但我觉得值得聊一聊。MySQL 的安装和卸载看似基础其实是整个数据库生命周期中最容易被忽略、也最容易出问题的环节。很多“装不上”“连不上”的问题追根溯源都是安装阶段埋下的雷。我个人的经验是在第一次正式安装之前不要急着下载安装包先花 10 分钟回答自己几个问题这台机器是学习用还是生产用数据量大概多大需要跟哪些旧的客户端工具对接需不需要在同一台机器上跑多个版本想清楚这些问题再去选版本、选安装方式会少走很多弯路。还要养成的习惯是记录安装过程中的每个关键信息安装目录、数据目录、端口号、root 密码、服务名、配置文件的位置。把它们写在一个文件里丢到项目仓库或者放进密码管理器。很多人在半年后重装系统或者迁移服务器时因为忘了当初数据库装在哪、配置改过什么只能全盘重来非常浪费时间。如果你只是在学习阶段我强烈建议多为 “卸载重装” 做一次演练。故意准备好一个损坏的配置然后用本章的方法去卸载、清理残留、重新安装走通一次之后你对 MySQL 目录结构、配置项作用、服务管理的认识会提升一个台阶。等到真正出了问题至少不会手忙脚乱。最后再分享一个小技巧多版本共存或者频繁测试新版本时优先用 ZIP 解压版或官方仓库的多实例配置而不是在系统里反复安装卸载。每台机器上保留一个基础的 MySQL 8.0 作为主服务需要测试新版本时用解压版起第二个实例端口错开数据目录分开。这样既不用动主服务也不用担心卸载不干净的问题。我在本机维护了几个不同版本的 MySQL 实例一直用这种方式稳得很。