ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Windows Server部署MySQL 5.7.44:从下载到配置的完整指南

Windows Server部署MySQL 5.7.44:从下载到配置的完整指南 1. 下载前的准备为什么选择MySQL 5.7.44在Windows Server上装MySQL这事看着简单真正操作起来踩坑的人不在少数。尤其是很多服务器环境还是Windows Server 2012 R2、2016、2019这些版本并存的状态不同系统版本、不同硬件配置、不同业务需求选错版本真的会让你折腾好几天。先说结论如果你不是非要尝鲜MySQL 8.0的窗口函数、CTE公共表表达式这些新特性5.7.44目前依然是生产环境里最稳妥的选择之一。这个版本是MySQL 5.7系列的最后一个正式发布版本官方对5.7系列的支持周期一直持续到2023年10月而5.7.44作为收尾版本累积修复了大量Bug和安全漏洞在稳定性、性能表现上与后续版本保持了极好的兼容性。为什么很多老运维至今还在用5.7核心原因是生态问题。比如说很多老业务系统当初就是按5.7的语法写的SQL8.0对一些旧语法做了调整比如认证插件从mysql_native_password改成了caching_sha2_password升级后容易出现连接报错。一些第三方备份工具、监控工具、中间件对5.7的支持最成熟比如Percona XtraBackup 2.4系列就是专门对应5.7的而8.0需要用8.0版本的备份工具两者还不通用。5.7的内存占用相对8.0更小对于配置不高的服务器比如2核4G的Windows Server来说跑5.7会轻松得多。所以这次我们选的版本是mysql-5.7.44-winx64.zipZIP免安装版而不是MSI安装包。原因后面细讲这里先记住结论ZIP版更适合服务器环境可控性更强出了问题也好排查。1.1 部署前的三个关键检查安装之前先把服务器的底细摸清楚。我遇到过太多次装到一半才发现系统不满足条件的情况。确认Windows Server版本和位数在服务器上右键“此电脑” → “属性”查看系统类型。必须是64位操作系统才能用winx64版本。查看具体版本号WinR输入winver。Windows Server 2012 R2、2016、2019、2022都可以安装MySQL 5.7.44但不同版本在服务权限、防火墙策略上略有差异后面我们会提到。确认磁盘空间MySQL 5.7.44解压后大约占用1.5GB左右含binlog、临时文件预留空间建议D盘或数据盘至少留出5GB可用空间。这里特别提醒一句尽量别把数据库装在C盘系统盘Windows更新、系统日志都吃C盘空间一旦C盘写满数据库直接宕机这坑我踩过。确认端口是否被占用MySQL默认端口是3306安装前先检查一下netstat -ano | findstr :3306如果有输出说明端口被其他程序占用了。常见的情况是服务器上已经装了旧版MySQL或者有别的服务监听了3306。遇到这种情况要么停掉旧服务要么后面在my.ini里把端口改成3307之类的其他端口。1.2 ZIP版和MSI版怎么选很多新手搞不清楚mysql-5.7.44-winx64.zip和mysql-installer-community-5.7.44.msi的区别这里直接说明白对比项ZIP免安装版MSI安装版安装方式解压后手动配置创建配置文件、初始化数据目录、注册服务向导式安装图形界面操作可控性高每个环节都知道在做什么低很多配置被向导隐藏了排查难度出问题容易定位日志清晰出问题相对难排查微软Installer的坑不少适合场景服务器生产环境、二次封装、批量部署本地开发环境、新手体验卸载方式删除服务删除目录即可需要运行卸载程序残留多我的建议是服务器上优先选ZIP版。MSI向导在安装过程中可能会自动创建服务、自动初始化数据目录一旦某个环节失败它不会告诉你具体卡在哪一步而ZIP版所有操作都是我们自己执行的每一步跑什么命令、在哪里报错一目了然。注意MSI版还会装了自带的一堆组件MySQL Notifier、MySQL Shell等对服务器来说这些都没啥用纯粹浪费资源。2. 下载安装包官网获取与文件校验2.1 从官网找到正确的下载地址MySQL的下载页面经常改版但核心路径很稳定。进入官网https://dev.mysql.com/downloads/依次寻找页面顶部选择MySQL Community (GPL) Downloads社区版是免费的GPL协议生产环境可以放心用。在MySQL Community Server那一栏点击Download。页面会列出多个版本选择5.7.44这个版本号。注意如果默认显示的是8.0或8.4等较新版本需要在版本选择下拉框里切换到5.7.44。然后选择Windows (x86, 64-bit), ZIP Archive这个选项文件名是mysql-5.7.44-winx64.zip大小约200MB左右。这里有个细节下载页面会提示你先登录Oracle账号实际上不用登录页面上有小字写着No thanks, just start my download.点击那个就能直接下载了不需要注册任何账号。2.2 文件完整性校验官方安装包在下载过程中偶尔会因为网络原因损坏服务器上又经常有各种下载工具拦截所以解压前务必校验文件完整性。MySQL官方提供了每个文件的SHA256校验值在下载页面上每个版本旁边都能找到。校验方法Windows PowerShellGet-FileHash .\mysql-5.7.44-winx64.zip -Algorithm SHA256把这个结果和官网页面上显示的SHA256值比对完全一致再继续。别嫌这一步麻烦我见过一个案例群里有人下载的压缩包损坏了解压时没有报错但mysqld.exe无法启动查了半天才意识到是安装包本身有问题。2.3 解压与目录规划解压时有一个容易忽略的点ZIP包解压后的文件夹名很长mysql-5.7.44-winx64而且里面直接就是bin、lib、share这些目录。我的习惯是把它改成一个简短干净的路径比如D:\mysql\mysql-5.7.44之所以这样规划路径中不要出现中文、空格和特殊字符。很多配置文件、命令行工具对空格路径处理不友好后面配环境变量和写配置时省心。用D:\mysql\作为父目录以后如果还要安装MySQL 8.0或者其他数据库组件可以在D:\mysql\下并列存放方便管理。数据目录尽量不要放在MySQL的程序目录内部。后面我们会单独指定一个数据目录比如D:\mysql\data把数据和程序分离备份和迁移都方便。解压完成后说明一下里面的关键目录目录/文件作用bin存放所有可执行程序最重要的是mysqld.exe服务端和mysql.exe客户端lib存放动态链接库程序运行时依赖share存放字符集、错误信息等资源文件my-default.ini默认配置模板安装时以此为参考创建my.inidocs官方文档其实用处不大有需要直接上网查3. 初始化配置my.ini文件与数据目录3.1 创建my.ini配置文件解压完先别急着启动MySQL必须有一个配置文件才知道数据目录在哪、端口是多少、字符集用什么。在D:\mysql\mysql-5.7.44目录下新建一个文本文件重命名为my.ini然后写入以下内容[mysqld] # 端口号默认3306如果有冲突就改这里 port3306 # MySQL程序安装目录 basedirD:/mysql/mysql-5.7.44 # 数据文件存放目录 datadirD:/mysql/data # 允许最大连接数 max_connections200 # 服务端默认字符集 character-set-serverutf8mb4 # 默认存储引擎 default-storage-engineINNODB # 跳过域名解析提升连接速度否则客户端连接时可能因为反查DNS变慢 skip-name-resolve # 默认身份验证插件5.7默认就是这个保持兼容 default_authentication_pluginmysql_native_password [client] # 客户端默认字符集 default-character-setutf8mb4 [mysql] # mysql命令行工具的默认字符集 default-character-setutf8mb4这里有几个参数值得解释一下basedir和datadir是MySQL两个最核心的路径参数一个告诉程序“我装在哪儿”一个告诉程序“数据存在哪儿”。注意这里用的是正斜杠/虽然Windows也接受反斜杠\但在ini配置文件里反斜杠有时会被当成转义符处理干脆统一用正斜杠最省事。character-set-serverutf8mb4是字符集选择。utf8mb4是真正的“完整UTF-8”能存储emoji和生僻字是当前的主流选择。很多老项目还在用utf8但在5.7版本中utf8是utf8mb3的别名字符范围有限新部署直接用utf8mb4就对了。skip-name-resolve这个参数很多人不知道什么意思。MySQL默认会对客户端IP做反向DNS解析在Windows Server上如果DNS配置有问题会导致连接非常慢。加上这个参数后跳过解析连接速度会快很多。注意加了之后使用localhost连接可能会受影响建议统一用127.0.0.1连接本机。3.2 初始化数据目录配置文件写好后用管理员身份打开命令提示符一定要右键“以管理员身份运行”先进入MySQL的bin目录cd /d D:\mysql\mysql-5.7.44\bin然后执行初始化命令mysqld --initialize-insecure这个命令会做的事情是读取my.ini配置在datadir指定的位置创建MySQL系统数据库和系统表。--initialize-insecure的作用是生成一个root空密码的初始账户方便我们第一次登录后再修改密码。为什么不推荐用--initialize不带insecure因为那个模式会生成一个随机临时密码而且这个密码会写进datadir目录下的xxx.err日志文件中很多新手根本不知道去哪找这个密码很容易卡住。用--initialize-insecure先拿到空密码登录进去再改密码流程最顺畅。执行过程中如果没有任何输出、直接回到命令行说明初始化成功了。可以在D:\mysql\data目录下看到生成了auto.cnf、ibdata1、mysql目录、performance_schema目录等文件和文件夹。注意如果执行初始化时报错最常见的原因是缺少VC运行库。MySQL 5.7是在较老的VS2013环境下编译的Windows Server默认环境往往没有安装对应的运行库提示信息一般是mysqld: error while loading shared libraries: ...或直接说缺少VCRUNTIME140.dll。遇到这种情况去微软官网下载安装“Visual C Redistributable for Visual Studio 2013”vc_redist_x64.exe装完重新执行初始化命令即可。3.3 注册Windows服务初始化完成后接下来把MySQL注册成Windows服务这样可以让它开机自动启动也能用net start mysql这样的命令统一管理。执行服务注册命令mysqld --install MySQL这里的MySQL是服务名称也可以改成别的比如MySQL57自己记住就行。执行成功后提示Service successfully installed。接着启动服务net start MySQL启动成功后会提示MySQL 服务已经启动成功。如果这一步报错别慌详细解决方案在第6节的常见问题里这里先把流程走通。4. 验证安装命令行登录与基础配置4.1 首次登录与密码修改服务启动后用命令行客户端验证一下能不能正常连接。还是在bin目录下执行mysql -u root -p提示输入密码时直接回车因为我们用的是--initialize-insecure初始密码是空的。登录成功会出现mysql提示符。进入MySQL后第一件事修改root密码。这里建议设置一个足够复杂的密码并在服务器密码管理器中留存记录ALTER USER rootlocalhost IDENTIFIED BY 这里换成你的新密码;修改完成后执行FLUSH PRIVILEGES;刷新权限然后执行exit;退出重新用新密码登录验证一次。这里多说一句MySQL 5.7的root用户默认只允许在localhost本机登录。如果后面要通过Navicat、DBeaver等工具远程连接这台服务器上的MySQL还需要单独创建远程用户或者修改root的host限制。具体操作在第5节说。4.2 环境变量配置告别cd命令每次都要先cd /d D:\mysql\mysql-5.7.44\bin才能使用mysql命令很麻烦。把bin目录加到系统环境变量里一劳永逸右键“此电脑” → “属性” → “高级系统设置” → “环境变量”。在“系统变量”区域找到Path变量双击编辑。点击“新建”填入D:\mysql\mysql-5.7.44\bin点击确定。重新打开一个命令提示符窗口输入mysql --version如果能输出版本信息mysql Ver 14.14 Distrib 5.7.44, for Win64说明环境变量配置成功。注意环境变量修改后已经打开的终端窗口不会自动生效必须新开一个窗口。4.3 基础安全加固新装的MySQL有几项安全设置建议立刻做不要拖删除匿名用户。默认安装可能存在匿名账户执行SELECT user, host FROM mysql.user;看到user字段为空的记录时用下面的命令删除DROP USER localhost;删除默认的test数据库。test库是安装时自动创建的用不到就删掉DROP DATABASE IF EXISTS test;设置root密码后明确定义允许登录的主机。如果暂时没有远程连接需求保持rootlocalhost即可不要再创建允许任意IP登录的root账户。5. Windows Server下的服务管理与远程访问配置5.1 服务自启动与手动管理注册成Windows服务之后MySQL的开机自启已经在服务属性中默认开启。如果想检查或调整打开服务管理器WinR输入services.msc。找到名为MySQL的服务或者你注册服务时自定义的名称。双击查看“启动类型”生产环境建议设为“自动”。如果数据库不常用或者内存紧张可以改成“手动”甚至“禁用”。常用管理命令归纳如下管理员身份运行操作命令启动MySQL服务net start MySQL停止MySQL服务net stop MySQL重启MySQL服务net stop MySQL net start MySQL删除MySQL服务mysqld --remove MySQL5.2 配置远程连接要让开发机上的Navicat、DataGrip等客户端连接这台Windows Server上的MySQL需要做三件事第一步创建允许远程访问的用户CREATE USER appuser% IDENTIFIED BY 远程访问密码; GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO appuser%; FLUSH PRIVILEGES;这里的%表示允许任意IP访问。如果希望更安全可以换成具体的IP比如appuser192.168.1.100这样只允许那一台机器连。第二步检查MySQL端口监听确认mysqld在监听3306端口netstat -ano | findstr :3306正常会看到TCP 0.0.0.0:3306或TCP [::]:3306的监听条目说明MySQL在正常的端口上等待连接。第三步配置Windows防火墙这是远程连接最容易挂掉的一环。MySQL安装不会自动创建防火墙规则在没关防火墙的情况下外部IP无法访问3306端口。放行端口操作如下netsh advfirewall firewall add rule nameMySQL 3306 dirin actionallow protocolTCP localport3306或者走图形界面控制面板 → Windows Defender防火墙 → 高级设置 → 入站规则 → 新建规则 → 端口 → TCP → 特定本地端口填3306 → 允许连接。特别注意如果你的服务器在云平台阿里云、腾讯云、AWS等除了Windows防火墙还要在云控制台的安全组里放行3306端口否则一切白搭。5.3 连接超时与编码问题排查远程连接测试中比较常见的几个现象和解决方法连接超时检查服务器防火墙、安全组是否放行用telnet 服务器IP 3306测试端口通不通。如果不通按上一步检查。密码正确但连接报错Access denied注意MySQL 5.7的认证插件默认是mysql_native_password而8.0默认是caching_sha2_password。如果客户端工具版本太老可能在握手阶段就报错。在5.7.44上保持默认插件即可别去改。中文乱码在my.ini中已经统一设置了utf8mb4的情况下连接字符串中还要显式指定字符集。例如Navicat在连接属性的“编码”选项选择utf8mb4或AutoJDBC连接串加characterEncodingutf8。6. 常见问题与排查技巧实录6.1 服务无法启动错误日志怎么看无论是net start MySQL时报错还是服务管理器里启动后立刻停止第一步永远是去看数据目录下的错误日志。日志文件名是计算机名.err在datadir目录下。用记事本打开拉到文件末尾就是最近一次启动失败的具体原因。典型错误1[ERROR] InnoDB: The innodb_system data file ibdata1 must be writable。原因通常是数据目录权限不对或者my.ini里datadir路径写错了程序找不到数据目录。典型错误2[ERROR] Cant start server: Bind on TCP/IP port: No such file or directory。原因通常是3306端口被占用或者防火墙拦截了监听。用netstat -ano | findstr :3306看清楚谁占用了端口。如果是旧版MySQL残留的服务先停掉再启动。典型错误3[ERROR] MySQL server cannot start because the data directory ... is missing。原因是没有执行初始化命令或者datadir配置变了但数据目录还是空的。重新执行mysqld --initialize-insecure即可。6.2 忘记root密码怎么办这事我经历过不止一次。别急着卸载重装有一个标准的找回流程停止MySQL服务net stop MySQL。以跳过权限表的方式启动MySQL在bin目录下执行mysqld --skip-grant-tables --skip-networking这个窗口会一直挂着不要关闭。--skip-networking表示只允许本机命令行连接防止有外部连接趁虚而入。另外开一个新的命令提示符窗口直接执行mysql -u root不需要密码就能进入。在MySQL中执行FLUSH PRIVILEGES; ALTER USER rootlocalhost IDENTIFIED BY 新密码; exit;关闭第一个窗口的mysqld进程CtrlC或者直接关窗口然后正常启动服务net start MySQL用新密码登录。6.3 本地连接正常但局域网其他机器连不上这个问题出现频率极高按照下面的顺序依次排查能否ping通服务器IP。ping不通就先查网络和防火墙。telnet服务器IP 3306看端口通不通。不通的话基本就是Windows防火墙或云安全组的问题。确认MySQL用户确实是允许远程访问的。登录MySQL后执行SELECT user, host FROM mysql.user;如果对应的用户host是localhost那只能本机登录与网络无关是权限配置问题。确认my.ini里bind-address没有被设置为127.0.0.1。MySQL默认监听所有网卡0.0.0.0但如果你在my.ini里显式配置了bind-address127.0.0.1外部连接就永远不可能成功。去掉这一行或者改成0.0.0.0重启服务。6.4 安装过程容易忽略的三大注意事项根据我的经验Windows Server上装MySQL 5.7.44最容易出问题的不是MySQL本身而是环境层面的几个点杀毒软件和系统加固拦截。Windows Server上如果装了360、火绒或者云安全Agentmysqld.exe首次启动时经常会触发拦截。轻则写入文件失败重则服务启动直接被干掉。安装期间建议先把这些防护软件暂时退出安装完成后再开了。务必用管理员权限执行命令。mysqld --install、net start 这些操作都需要管理员权限。直接在普通命令行窗口执行会出现访问被拒绝或者服务名无效的报错。这个看起来是常识但确实每天都有很多人踩。别用远程桌面断开会话的方式启动mysqld。有同学图省事直接双击mysqld.exe启动一旦注销远程桌面进程也会跟着被结束。正确的做法一定是注册成Windows服务来管理让它在会话0中运行与登录会话无关。6.5 备份策略刚装好就养成习惯装好MySQL后的第一件事不应该急着把业务数据导进去而是先验证备份方案。Windows Server上最简单的备份方式mysqldump -u root -p --all-databases D:\mysql_backup\all_$(date %Y%m%d).sql配合Windows任务计划程序每天凌晨执行一次备份脚本。这方面我吃过亏曾经手滑删了库才发现上次备份是三个月前的。数据库不备份等于裸奔这句话说一百遍都不夸张。写在最后Windows Server上部署MySQL 5.7.44整个流程走下来其实就几步下载解压、写配置、初始化、注册服务、登录验证。但每一步背后的细节比如目录规划、字符集选择、服务权限、防火墙规则都能决定最终效果是否稳定。我个人在实际部署中的体会是MySQL这类数据库服务安装只是开始真正考验人的是后续的运维习惯。有没有做防火墙端口管控、有没有定期备份、密码强度够不够、日志有没有定期清理这些比版本选型重要得多。如果你是在内网测试环境折腾完全可以用我上面的默认配置一路到底如果是正式生产环境强烈建议把密码策略、数据目录独立磁盘、远程访问用户最小化权限这三件事认真做一遍。版本可以换服务器可以重装但数据一旦丢了代价远比你想象的沉重。最后分享一个小技巧把整个安装过程的关键命令和配置文件内容记录在一个markdown文档里随服务器一起存档。半年后服务器出问题需要重装时你会感谢当初那个愿意多写几行笔记的自己。这套流程我已经在Windows Server 2012 R2、2016、2019上验证过多次按照上面的顺序走正常情况下半小时内就能把MySQL 5.7.44跑起来。
返回列表