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 root@localhost: hGt5#xS8sJ
如果你没看全,重新执行初始化又容易报错,所以建议用 --initialize-console 时把终端缓冲区调大,或者先创建一个日志目录,用命令重定向输出到文件再查看。
如果你用 --initialize-insecure 生成空密码,之后第一件事就是用 mysql -uroot 登录,然后立刻设置新密码,否则任何本地用户都能用空密码访问你的数据库,这是多危险的事不用我多说。
2.5 自定义 my.ini 的几个推荐配置
ZIP 版或者 MSI 版都允许你自定义 my.ini(MSI 版通常放在数据目录下)。一个常见配置例子如下:
[mysqld] basedir=D:/mysql-8.0.39-winx64 datadir=D:/mysql-8.0.39-winx64/data port=3306 max_connections=200 character-set-server=utf8mb4 default-storage-engine=InnoDB有几个地方要特别提醒。basedir 和 datadir 在 Windows 里可以用正斜杠,也可以写双反斜杠,但不要写单个反斜杠,否则会被当成转义符。datadir 指向的目录必须存在,或者由 mysqld 初始化时创建。如果文件里有中文路径,或者目录含中文名,很可能会导致服务启动失败。
字符集方面,MySQL 8.0 默认字符集已经是 utf8mb4,如果你的程序需要兼容老数据,可以显式配置 feature;还需要注意连接层的字符集,建议在 my.ini 里加 [client] default-character-set=utf8mb4,否则命令行下输入中文可能会乱码。
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,最后 server:
sudo 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-libs,rpm 安装过程中可能会提示文件冲突。常见解决方式是把 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.policy=LOW; SET GLOBAL validate_password.length=6;再做密码修改。但生产环境请保持默认的强密码策略。
4. 安装过程中的常见问题排查实录
4.1 Windows 下的 0xe0434352 错误
很多人在 Windows 上安装 MySQL 8.0 的 MSI 时,会碰到一个以 0xe0434352 结尾的弹出框,提示安装失败。这个错误码不是 MySQL 特有的,而是 Windows 表示 “.NET 运行时异常” 的通用错误码。绝大多数原因是你机器上的 Visual C++ 可再发行组件或者 .NET Framework 版本太低,无法运行 MySQL Installer。
我的建议是先安装最新的 Microsoft Visual C++ Redistributable(2015-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 上。如果客户端工具比较老,可以考虑在连接字符串中配置 useSSL=false,或者对老客户端暂时使用 native_password 认证插件。但注意这属于临时方案,长期来看建议升级客户端。
MySQL 8.0 的连接层默认需要的 OpenSSL 版本和 TLS 协议一般没问题,但如果你用的是一年前下载的旧版客户端,握手失败的概率比较大。
4.3 服务启动失败:先看 data 目录和日志
MySQL 服务安装好但无法启动,这是安装过程中最常遇到的坑。在 Windows 上表现为 net start mysql 后提示“服务无法启动,服务没有报告错误”,在 Linux 上表现为 systemctl start mysqld 失败。
第一步永远是看错误日志。Windows 下默认错误日志在数据目录下,比如 D:\mysql\data\计算机名.err;Linux 在 /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 下彻底卸载官方 MySQL
Linux 下卸载 MySQL 的过程比较简单,但也很容易留下依赖包和配置。先停掉服务:
sudo systemctl stop mysql sudo systemctl disable mysqlDebian/Ubuntu 下使用 apt 卸载官方 MySQL:
sudo 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\Data;Linux 下是 /var/lib/mysql。删除前最好用命令确认一下路径,不要因为手滑删了别的目录。我自己的经验是:无论是否计划保留,先在系统盘之外单独建一个备份目录,把整个 Data 文件夹复制过去,再执行卸载清理,这样任何时候反悔都来得及。
6. 写在安装卸载之后的一些话
这一节没有太多技术内容,但我觉得值得聊一聊。MySQL 的安装和卸载看似基础,其实是整个数据库生命周期中最容易被忽略、也最容易出问题的环节。很多“装不上”“连不上”的问题,追根溯源都是安装阶段埋下的雷。
我个人的经验是,在第一次正式安装之前,不要急着下载安装包,先花 10 分钟回答自己几个问题:这台机器是学习用还是生产用?数据量大概多大?需要跟哪些旧的客户端工具对接?需不需要在同一台机器上跑多个版本?想清楚这些问题,再去选版本、选安装方式,会少走很多弯路。
还要养成的习惯是记录安装过程中的每个关键信息:安装目录、数据目录、端口号、root 密码、服务名、配置文件的位置。把它们写在一个文件里丢到项目仓库,或者放进密码管理器。很多人在半年后重装系统或者迁移服务器时,因为忘了当初数据库装在哪、配置改过什么,只能全盘重来,非常浪费时间。
如果你只是在学习阶段,我强烈建议多为 “卸载重装” 做一次演练。故意准备好一个损坏的配置,然后用本章的方法去卸载、清理残留、重新安装,走通一次之后,你对 MySQL 目录结构、配置项作用、服务管理的认识会提升一个台阶。等到真正出了问题,至少不会手忙脚乱。
最后再分享一个小技巧:多版本共存或者频繁测试新版本时,优先用 ZIP 解压版或官方仓库的多实例配置,而不是在系统里反复安装卸载。每台机器上保留一个基础的 MySQL 8.0 作为主服务,需要测试新版本时用解压版起第二个实例,端口错开,数据目录分开。这样既不用动主服务,也不用担心卸载不干净的问题。我在本机维护了几个不同版本的 MySQL 实例,一直用这种方式,稳得很。