MySQL启动报错找不到MSVCR120.dll?详解VC++运行库缺失的修复方法
2026/9/12 19:10:51 网站建设 项目流程

这问题我遇到过不止一次,第一次是在帮朋友的新电脑部署 MySQL 5.7,服务启动的瞬间直接弹窗“找不到 MSVCR120.dll”,MySQL 服务状态栏里明晃晃写着“已停止”,当场人有点懵。后来自己调测环境、给服务器装库,前前后后也帮人处理过不少次,发现这个报错在 Windows 上非常典型,而且解决思路其实很统一。这篇文章我就把自己的排查过程、解决步骤和踩坑记录都写下来,给同样被这个报错卡住的同学一个参考。

这个报错本身不复杂,核心原因就是 Windows 系统缺少 Visual C++ 2013 运行库。MySQL 的 Windows 版本在编译时依赖了这套运行库,系统里没有对应文件,程序自然起不来。适合刚接触 MySQL 安装、遇到服务启动失败的新手,也适合在 Windows Server 上做部署、不想在环境问题上浪费时间的运维同学。

1. 报错真相:MSVCR120.dll 到底是谁,MySQL 为什么离不开它

1.1 MSVCR120.dll 的“真实身份”

MSVCR120.dll 全称是 Microsoft Visual C++ 2013 Runtime Library,属于微软 Visual C++ 2013 Redistributable Package 的一部分。Visual C++ 运行库是 Windows 平台几乎所有 C++ 程序都会依赖的公共组件,MySQL、PHP、Apache、Redis 这类用 C/C++ 写的服务端程序,在 Windows 上基本都绕不开它。

这个文件的命名有规律可循:数字部分代表 Visual Studio 的版本号。MSVCR100.dll 对应 VS2010,MSVCR110.dll 对应 VS2012,MSVCR120.dll 对应 VS2013,后面的 VCRUNTIME140.dll 则对应 VS2015 到 VS2022。看到 MSVCR120.dll 报错,就说明程序依赖的是 VS2013 那一代编译的运行时。这个细节很有用,能帮你快速判断该装哪个版本。

1.2 MySQL 在 Windows 下为什么会依赖运行库

MySQL 官方在 Windows 上发布的安装包,无论是 MSI 安装版还是 ZIP 免安装版,二进制文件都是用 Visual C++ 编译的。编译器在生成代码时,并不会把所有 C/C++ 标准库函数都静态打包进 exe/dll,而是选择链接到系统级的运行库文件。这样程序体积更小、内存共享更高效,但代价就是对系统环境有要求——目标机器上必须先装好对应的运行库。

可以把它理解成汽车需要特定的汽油标号。MySQL 是按“95 号油”标准调校的,系统里没有这个过程依赖,发动机就点不着火。运行库缺失或者版本不对,程序在启动阶段加载 dll 失败,系统就会抛出“找不到 MSVCR120.dll”这种让人摸不着头脑的提示。

1.3 触发这个报错的典型场景

很多人以为只有“安装坏了”才会这样,实际上触发场景还挺多的:

  • 新装系统或者精简版系统:原版 Windows 自带一部分运行库,但新版系统不一定包含 VS2013 运行库;Ghost 或精简版系统更是经常把这类组件裁剪掉。
  • 使用 ZIP 免安装版 MySQL:官方免安装版只解压文件,不执行任何环境配置。如果你之前的机器恰好有运行库,就没问题;换到一台新机器,环境缺失就会暴雷。
  • 杀毒软件清理或误删 dll:某些安全工具会把 dll 文件识别为可疑项直接隔离,运行库文件被处理后,程序自然起不来。这类问题平时比较隐蔽,往往是某天程序突然报错才被发现。
  • 服务器从旧机器迁移到新机器:旧机器当年装过运行库,新机器是全新的,迁移过程中只拷了 MySQL 目录,没有同步系统组件,启动就直接报错。

明白这些场景之后,再看解决方案就顺理成章了:核心目标就是一个——把系统缺失的 VS2013 运行库补上。

2. 解决方案选型:三个方向,为什么我只推荐其中一个

方向其实就三个:单独装 VS2013 运行库、装 Visual C++ 运行库合集、手动把 dll 拷贝到系统目录。最后一个在搜索引擎里还很常见,但我强烈不建议。

2.1 单独安装 VC++ 2013 运行库

这是最标准、最可控的处理方式。微软官方提供 Visual C++ Redistributable for Visual Studio 2013 安装包,运行之后会自动注册系统组件,把 MSVCR120.dll 及相关文件放到正确位置,并写入注册表。

为什么推荐这个?因为只动和 VS2013 相关的组件,不干扰其他运行库,出错面最小。下载来源是微软官方,安全性有保证。安装后立即生效,不要求重启,MySQL 服务直接就能拉起来。

2.2 安装 Visual C++ 运行库合集

有一种情况我会推荐合集方案:一台机器用途杂、经常装各种开发工具和服务程序,或者你给公司部署的是一批普通办公电脑。这种情况今天缺 2013,明天缺 2015,后天缺 2019,每次等到报错再补太折腾。直接装一个覆盖 2005 到 2022 的 Visual C++ 运行库合集,一次性把所有公共组件补齐,后面能省很多事。

需要注意,合集安装包网上鱼龙混杂,很多站点打包时夹带私货,务必从可信渠道获取,最好是你自己用官方安装包离线保存下来,再放到内网使用。

2.3 手动拷贝 dll 到 System32 目录:不推荐

网上教程里有一类常见做法:单独下载一个 MSVCR120.dll,然后扔进 C:\Windows\System32。这方法看着简单,但坑特别多。

第一,来源不可控。单独下载 dll 的站点很多不靠谱,文件被篡改、捆绑病毒的情况都不少见。第二,MSVCR120.dll 不是“一个”文件的问题,它往往还依赖 msvcp120.dll、vcruntime120.dll 等同伴,只补一个文件经常解决不了。第三,手动拷贝文件时,32 位和 64 位系统目录的区别很容易搞混——64 位系统里,System32 放的是 64 位文件,32 位程序实际读取的是 SysWOW64 目录里的副本。一旦放错位置,报错依旧,甚至引发别的兼容问题。

所以我的建议很明确:优先走官方安装包,不要手动拷贝 dll。除非你是在排查阶段临时验证问题,可以放一个文件试试,但最终修复一定要用安装包。

2.4 怎么判断当前系统缺的是哪个运行库

除了 MSVCR120.dll,你可能还会遇到 MSVCR100.dll、MSVCR110.dll、VCRUNTIME140.dll 等报错,它们对应不同年份的 Visual C++ 版本。想查系统里已安装的运行库,可以打开“控制面板 -> 程序和功能”,搜索“Microsoft Visual C++”就能看到当前所有版本。

如果搜索结果里没有 2013(x86 或 x64),那基本就实锤了缺这个。需要注意,不要只搜到 2013 x86 就觉得万事大吉,MySQL 如果是 64 位版本,还要求系统里有 2013 x64 运行库,两者不是同一个注册条目。

3. 实操全流程:从确认缺失到服务正常启动

3.1 先确认系统架构和 MySQL 位数

动手之前,先搞清楚你的系统是 32 位还是 64 位,以及 MySQL 装的是哪个版本。

查看系统架构很简单:右键“此电脑” -> 属性,在“系统类型”里能看到。或者 Win+R 打开运行框,输入cmd进入命令提示符,执行:

echo %PROCESSOR_ARCHITECTURE%

输出 AMD64 表示 64 位系统,x86 表示 32 位系统。

再看 MySQL 位数,如果是官方安装包,安装目录里通常有bin\mysqld.exe。用命令查一下:

wmic process where "name='mysqld.exe'" get ExecutablePath

然后在文件上右键看属性,最晚在“详细信息”页能看到“文件版本”,一般会标注 x64 或 Win32。命令行方式也可以做到:

dumpbin /headers "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe" | findstr "machine"

没装 dumpbin 的话,直接用属性页面判断即可。因为 64 位系统可以运行 32 位程序,但 64 位程序在 32 位系统上跑不起来,所以确认这个信息,是为了确定待会儿要装的运行库版本,以及如果验证失败,该从哪个方向排查。

3.2 下载 VS2013 运行库并安装

打开微软官方网站,搜索 “Visual C++ Redistributable for Visual Studio 2013”,在官方下载页面找到vcredist_x86.exevcredist_x64.exe两个文件。为了省心,我建议在 64 位系统上两个都下载安装,x86 和 x64 并不冲突,很多软件会在 64 位系统上仍依赖 32 位版本的运行库,比如一些 32 位插件或命令行工具。

下载完成后,先装 x64,再装 x86,顺序随意,但别同时运行两个安装向导。安装过程就是一键 Next,装完不需要重启,直接开 MySQL 服务测试。

如果安装过程中提示“已安装相同或更高版本”,说明系统里已经有这个运行库了,那问题多半不在缺失上,而是文件损坏、被杀毒软件拦截或者版本不完整。这种情况可以直接跳到第 4 节排查。

3.3 修复完成后的验证步骤

运行库装好后,怎么确认问题解决了?直接尝试启动 MySQL 服务:

net start mysql

这里的mysql是你本机 MySQL 服务名,如果之前安装时改过名字,改成对应的服务名即可。启动成功的标准是命令提示符不再报错,提示 “服务已经启动成功” 之类的话。

然后进入 MySQL 客户端验证一下能不能正常连库:

mysql -uroot -p

输入密码后能看到mysql>提示符,说明整个链路已经通了。如果想换一个视角再查一遍,在 Windows 事件查看器里找一下“应用程序”日志,确认最后一次报错的时间点之后,服务启动是否正常。我习惯把这个步骤也做一遍,因为这样能确认服务是不是真的稳定,而不是只碰巧启动了一次。

3.4 那如果电脑完全不能联网怎么办

有些公司服务器在内网环境,无法直接访问外网下载运行库。这种情况提前规划就很关键:在一台能联网的机器上,提前下载好vcredist_x86.exevcredist_x64.exe,拷贝到内网机器执行安装。安装包是独立的 exe,不需要额外依赖,放到内网后直接双击运行即可。

如果没有现成的安装包,也可以找另一台已经装了 VS2013 运行库的机器,从它那里拷贝文件。但要注意,拷贝文件和执行官方安装包是不同的路径,我之前说了不推荐手动拷贝,但内网环境实在没办法时,优先选“拷贝安装包 exe”,而不是“拷贝单独的 dll 文件”。前者才能正常写入系统注册,一劳永逸地修复问题。

3.5 关于 ZIP 免安装版 MySQL 的一个额外提醒

如果你用的是官方免安装版(下载 ZIP 解压即用),除了运行库之外,还有几个特别容易踩的坑。解压后直接用mysqld.exe启动,提示缺失运行库的情况很常见,因为没经过 MSI 安装向导检查环境。而且免安装版必须做这几步:

在 MySQL 目录下创建一个my.ini配置文件,指定basedirdatadir路径:

[mysqld] basedir=C:/mysql-5.7.44-winx64 datadir=C:/mysql-5.7.44-winx64/data port=3306

然后以管理员身份打开 cmd,进入 MySQL 的 bin 目录执行:

mysqld --initialize-insecure

这会生成 data 目录,并创建一个 root 空密码账号,方便初次登录。最后用mysqld --install安装成 Windows 服务,然后再net start mysql

如果--initialize这步就报“找不到 MSVCR120.dll”,那跑再多的初始化命令都是白搭,核心还是先把运行库装上。这也是很多新手栽跟头的地方——以为是 MySQL 配置问题,结果其实是环境问题。

4. 实战排查:为什么运行库装了、MySQL 还是起不来

4.1 别急着重装,先对照这张速查表

现象可能原因处理建议
已装 x64 运行库,但 32 位 MySQL 仍报错缺少 x86 版本运行库补装 vcredist_x86.exe
已经装了 2013,仍然提示找不到 dll运行库文件损坏或注册信息异常卸载后重装,或用合集覆盖安装
运行库安装包提示“已安装相同或更高版本”系统里版本较新,但文件缺失用“修复”模式重装运行库
装完运行库 MySQL 还是报错杀毒软件隔离了 dll 文件到隔离区恢复文件、添加信任
安装过程中被杀毒软件拦截安全软件误报临时退出拦截,安装后加白名单
系统为 Ghost 精简版系统组件被裁剪补装运行库仍未解决时,考虑系统层面修复

这张表不代表全部情况,但覆盖了排查中最常遇到的几类。如果你对不上自己的现象,往下继续看深层原因。

4.2 “我已经装了,还是报错”的深层原因

装完运行库还报错,一般跑不掉下面这几种情况。

第一种,32 位和 64 位搞混。这是最常见的失误。很多人下载时看到 vcredist_x64.exe,装完就以为万事大吉。但如果你装的 MySQL 是 32 位版本,加载的其实是 32 位版本的 MSVCR120.dll,也就是 SysWOW64 目录里的那份。64 位安装包只安装 64 位文件,并不会给 32 位程序提供支持。反过来也一样。所以最稳妥的办法是两个版本都装上,别在这上面浪费排查时间。

第二种,安装包被“顺手”静默拦截。Windows Defender 或其他安全软件在运行库安装过程中,可能拦截 dll 注册动作。这个过程不一定有弹窗提示,你只看到安装向导走完,但文件压根没有成功写入。处理方式是暂时禁用实时保护,以管理员身份重新运行安装包,安装完成后立即恢复保护,然后把C:\Windows\System32\MSVCR120.dllC:\Windows\SysWOW64\MSVCR120.dll拉入安全软件信任列表。

第三种,系统被过度精简。这个问题主要集中在 Ghost 版、精简版 Windows 或某些被“优化”过头的系统上。这类系统可能缺失不仅一个运行库,而是大量系统组件整体被砍掉了。装了 VS2013 后,可能继续报 MSVCR110.dll 或 VCRUNTIME140.dll 缺失,或者注册表信息不完整。遇到这种情况,推荐直接跑一遍运行库合集,覆盖 2005 到 2022 的所有版本,让系统组件尽量补齐。

第四种,环境的 PATH 变量被改坏了。dll 的搜索顺序中,系统目录和 PATH 里的目录都有影响。如果 PATH 里某个目录存在同名 dll 且版本不兼容,程序可能加载到“假文件”,表现一直是“找不到”或者“已加载但初始化失败”。排查方法是在 cmd 里跑:

set PATH=C:\Windows\System32;C:\Windows mysql

如果这样能正常启动,说明 PATH 被改坏了,需要检查环境变量里有没有可疑的 MySQL 目录或残留路径。

4.3 用工具核查 dll 是否真的就位

如果你不想靠猜,可以直接验证系统里到底有没有这个文件。管理员身份打开 cmd,运行:

dir C:\Windows\System32\MSVCR120.dll dir C:\Windows\SysWOW64\MSVCR120.dll

System32 下存在,表示 64 位版本就位;SysWOW64 下存在,表示 32 位版本就位。在 64 位系统上,两者都应该存在。如果其中一个是空的或者文件大小异常小,说明安装过程并不完整,考虑修复安装。

还有一种情况会误导你:文件明明存在,但程序还是报“找不到 dll”。这通常是系统文件被替换成不兼容的版本,或者系统映像损坏。可以用系统自带的文件检查工具修复:

sfc /scannow

这个命令会扫描系统文件,如果发现问题会自动修复。跑完之后重新检查一遍 dll 是否存在,再尝试启动 MySQL。这个是微软官方机制,虽然不是每次都灵,但在系统文件被篡改的场景下经常能救回来。

5. 从这个问题延伸开:运行库的统一管理与避坑

5.1 一个报错背后,可能还有一连串 dll 缺缺失

从 MSVCR120.dll 这个问题延伸开,Windows 上部署各类开发环境、服务程序时,相关报错是成体系的:

报错文件对应运行库常见关联程序
MSVCR100.dllVisual C++ 2010旧版 Python、PHP、一些老工具
MSVCR110.dllVisual C++ 2012部分游戏、旧版 Qt 程序
MSVCR120.dllVisual C++ 2013MySQL 5.x、MariaDB、部分服务端组件
VCRUNTIME140.dllVisual C++ 2015-2022MySQL 8.x、新版 Redis、Node.js 原生模块
VCRUNTIME140_1.dllVisual C++ 2015-2022较新编译的 C++ 应用

所以排查的时候,眼光放宽一点。如果环境里同时要跑 MySQL 5.7 和 MySQL 8.0,前者要 VS2013,后者要 VS2015-2022,一次把合集装齐,后面就不用反复来回折腾。

5.2 生产服务器部署建议:把环境修复纳入初始化流程

个人电脑遇到这种问题,装个运行库、重启就解决了。但生产服务器不一样,尤其是有几十台机器要批量部署 MySQL 的场景,最怕就是每台机器环境不一致,导致同样的安装步骤在部分机器上报错。我的做法是把运行库安装提前到系统初始化脚本里,服务器交付之前就完成环境加固,而不是等 MySQL 装完再处理报错。

具体来说就是在初始化脚本里加入静默安装命令,比如:

vcredist_x64_2013.exe /install /quiet /norestart vcredist_x86_2013.exe /install /quiet /norestart

静默安装的好处是不弹窗、不需要人工点下一步,适合脚本化批量执行。装完顺手验证一下 dll 文件是否存在,如果不存在就输出告警,提前发现问题。这样 MySQL 部署阶段就不用每次在环境问题上反复折腾。

另外建议把 MySQL 依赖的运行库版本记录在部署文档里。别小看这个习惯,半年后你回看一批服务器,如果环境变化、某台机器被重装过系统,部署文档就是最快定位问题的依据。

5.3 常见的“错误操作”提醒

网上很多旧教程会引导下载“dll 修复工具”或者“某某管家一键修复”,我建议直接绕开。这类工具为了展示能力,往往会扫描出大量你不认识的问题,然后诱导你下载它们的安装包,安全性和稳定性都很难保证。Windows 下缺失运行库,最好的修复源就是微软官方安装包,没有之一。

还有一个容易忽略的点:运行库安装完成之后,尽量把当前 shell 关掉重开一个。尤其你是在 cmd 里执行net start mysql报错,去装完运行库,回到同一个 cmd 窗口再执行,有可能因为环境变量没有刷新仍然报错。不是 MySQL 的问题,是环境没更新。关掉 cmd 重开,问题大概率就没了。

6. 写在最后:一次报错之后,我更推荐把环境做扎实

说实话,MSVCR120.dll 这个报错本身很简单,就是个缺失运行库的问题,按标准流程装好 VS2013 运行库,几十秒就能解决。但它背后反映的“Windows 环境依赖管理”这个问题,却是很多新手甚至一些有经验的开发者在部署时容易忽略的点。我在实际开发过程中最深的感触就是:环境问题早暴露比晚暴露好,之前没有统一的环境初始化步骤,后续很可能会在想不到的地方再踩一遍坑。

我个人的习惯是,新装任何服务软件之前,先把机器上所有 Visual C++ 运行库装上,顺便把常用系统组件一并检查。宁可一次剪碎花几分钟装齐,也不要等报错来了才逐个补。根据我的经验,这样做之后,后面部署别的 C++ 依赖的程序也会顺利很多,那种“换个软件又报一个 dll 缺失”的连锁问题基本上就能避开。

最后再分享一个小技巧:如果身边有同事或者朋友已经正常运行 MySQL 的机器,你可以在那台机器上导出 dll 清单对比,直接用reg query查看已安装的运行库列表,或者干脆把 VS2013 运行库安装包备份到 U 盘里常备着。这个方法在断网环境下帮了我不少次,建议你也存一份。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询