尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Windows下MySQL压缩版安装指南:从解压到配置初始化

Windows下MySQL压缩版安装指南:从解压到配置初始化 前一阵子在帮同事配开发环境发现好多人卡在同一个地方——明明下载的是MySQL压缩版安装包解压完却不知道下一步该干嘛。目录里没有setup.exe双击mysqld.exe一闪而过网上搜教程又全是老版本的界面对不上号。这篇文章就把我这些年装压缩版MySQL踩过的坑、总结的套路从下载到初始化再到改密码完整走一遍没有特殊神器、没有玄学操作照着做基本都能起来。适合第一次接触MySQL的同学也适合被MSI安装方式折腾到想换方案的开发者。1. 为什么选择压缩版MSI与ZIP的取舍1.1 两种安装方式的核心区别MySQL在Windows下主要有两种安装包MSI安装版和ZIP压缩版。MSI版就是那种图形化向导安装一路Next自动帮你注册服务、写注册表、设置环境变量看起来省事但问题往往就藏在“自动”两个字里。MSI安装版有一个比较尴尬的点安装过程对系统环境的干预很多注册表、服务管理器、PATH环境变量都会被动过。如果哪天你想卸干净重装光靠控制面板的卸载程序往往删不干净残留的注册表项和服务项可能会影响下一次安装。而且MSI版装完之后配置文件的默认路径分布在ProgramData这些系统目录里想改配置还得去翻隐藏文件夹。ZIP压缩版则完全是另一套思路解压即所得整个MySQL程序就在你解压出来的那一个目录里不写注册表、不自动创建服务、不碰系统环境变量除非你自己动手。数据文件、配置文件、错误日志全都在自己目录下想备份整个目录拷走就行想清理直接删文件夹再删掉手动注册的服务就完事了。这种“绿色”特性在开发和测试场景下特别舒服。对比项MSI安装版ZIP压缩版安装方式图形向导流程固定解压后手动配置系统干预写入注册表、自动建服务不写注册表服务需手动注册定制程度低标准安装极高所有参数自己掌控多版本共存容易冲突互不干扰目录分隔即可卸载干净度存在残留可能删目录删服务即可1.2 压缩版安装的适用场景我个人用压缩版最多的场景有三个一是本地开发环境需要在不同MySQL版本之间来回切换测试兼容性二是离线内网部署没法在线跑安装向导拷一个压缩包过去解压就能用三是在写自动化脚本时压缩版的命令行操作方式更适合脚本化处理。可以这么说MSI版适合那种不想了解MySQL内部结构、只想装完就跑的人压缩版适合愿意花十分钟搞清楚原理、之后一劳永逸的人。我的经验是一旦你用明白压缩版的配置方式后面再遇到MySQL相关问题排查思路会清晰很多因为你清楚每一步改了什么。2. 装前准备版本选择和文件核对2.1 MySQL版本怎么挑先在官网下载环节说清楚。进入MySQL Community Server下载页面页面名可以搜“MySQL Community Downloads”在“Select Operating System”下拉框选“Microsoft Windows”下面会出现两个选项一个是“Windows Installer”另一个是“Windows (x86, 64-bit), ZIP Archive”。我们要选的是后者也就是ZIP Archive。以MySQL 8.0.46为例下载下来的文件类似“mysql-8.0.46-winx64.zip”大小在200MB上下。下载时如果页面提示登录Oracle账号不用紧张在登录框下面找到“No thanks, just start my download”链接点击即可直接下载不需要注册账号。版本选择上除非项目有特殊兼容性要求否则建议优先选8.0系列。8.0是目前使用最广、社区资料最全的稳定分支默认存储引擎是InnoDB支持窗口函数、CTE这些现代SQL特性。5.7已经停止维护更新不建议新项目再用。至于更新的9.x版本尝鲜可以生产环境还是保守点好。2.2 下载解压后的目录结构解压时有个容易被忽略的点默认解压出来的目录名会带版本号后缀比如“mysql-8.0.46-winx64”整个路径会比较长。部分命令行工具对过长的路径或特殊字符处理不好建议把目录改得短一点比如“C:\mysql-8.0.46”或者“D:\mysql-8.0.46”关键要求是目录名不能带中文、不能带空格。解压完成后目录里应该有bin、docs、include、lib、share这些子目录。bin里放的是所有可执行文件mysqld、mysql、mysqldump等share目录里是错误消息和字符集支持文件docs里是自带文档。注意压缩包里一般没有现成的my.ini配置文件也没有data数据目录这两个东西后面都要我们自己创建或生成。2.3 环境依赖VC运行库检查这里先插一个高频坑。很多人在解压后直接运行bin目录下的mysqld.exe结果弹窗提示缺少“msvcp140.dll”或“vcruntime140.dll”这是因为MySQL依赖Microsoft Visual C运行库。系统没装这个运行库时程序根本起不来。解决办法很简单去微软官网下载“Microsoft Visual C Redistributable for Visual Studio 2015-2022”的x64版本安装即可。建议在正式开始MySQL安装前就把这个装好。装完后可以先用命令验证一下依赖是否没问题bin\mysqld --version如果命令能正常输出版本信息比如“mysqld Ver 8.0.46 for Win64 on x86_64”说明运行库环境和程序文件都没问题可以进入下一步。3. my.ini配置与参数说明3.1 my.ini在哪、怎么创建压缩版MySQL不会自动生成my.ini配置文件这就需要我们自己动手。在MySQL解压根目录下新建一个文本文件改名为“my.ini”。文件编码建议用UTF-8无BOM格式Windows自带的记事本另存为时在“编码”下拉框选“UTF-8”即可。my.ini是整个MySQL实例的配置核心MySQL服务启动时会读取这个文件里的参数。如果文件名不对、位置不对或者内容里有非法参数服务就会启动失败。建议把my.ini直接放在解压根目录下这样路径逻辑最清晰后面注册服务时也会显式指定这个文件的绝对路径。3.2 核心参数逐项解释一个能正常启动的最小my.ini配置模板大致是这样的[mysqld] basedirD:/mysql-8.0.46 datadirD:/mysql-8.0.46/data port3306 character-set-serverutf8mb4 collation-serverutf8mb4_0900_ai_ci default-storage-engineInnoDB max_connections200 [client] default-character-setutf8mb4下面逐个解释这些参数的含义弄懂它们你就能自己按需调整。basedirMySQL程序的安装路径也就是解压目录。这里注意路径分隔符Windows下用正斜杠“/”或双反斜杠“\”都可以不要用单个反斜杠“\”因为ini文件里反斜杠会被当作转义字符处理。datadir数据文件存储目录一般放在basedir目录下的data子目录。MySQL会将所有数据库的数据文件、系统表空间、日志文件都写在这里。这个目录在初始化之前可以不存在mysqld初始化命令会自动创建。port服务监听端口默认3306。如果本机3306被其他程序占用可以改成3307等空闲端口。character-set-server服务端默认字符集现在强烈建议用utf8mb4。很多老教程会写utf8但在MySQL 8.0里utf8实际是utf8mb3不支持存储emoji和一些生僻字而utf8mb4是完整的四字节UTF-8编码是当前最稳妥的选择。collation-server排序规则8.0默认是utf8mb4_0900_ai_ci。这个参数和字符集是配套的一般情况下跟随默认值即可。如果考虑老项目兼容性也可以写成utf8mb4_general_ci。default-storage-engine默认存储引擎填InnoDB即可。MySQL 5.7以后InnoDB已经是默认引擎支持事务、行级锁、崩溃恢复是生产环境唯一合理的选择。max_connections最大连接数默认151。本地开发设100到200足够如果后面连接数不够用再调大即可但也要注意系统资源。[client]段配置的是客户端连接时的默认参数主要就是字符集要保持和服务端一致避免乱码。3.3 常见参数误区与避坑配置my.ini时最坑的一件事是请不要随便加skip-grant-tables。这个参数的意思是跳过所有权限验证网上很多“忘记root密码怎么办”的教程会让你在配置文件里加这一行但却没说清楚——加了它之后任何人在本机都能不需要密码直接登录你的数据库而且这时候执行修改密码类的操作还可能因为权限表状态异常而失败。我自己见过有人加了这个参数之后忘了删数据库裸奔了好几天。还有一个容易出问题的参数是lower_case_table_names也就是表名大小写是否敏感。Windows下默认是1即不区分大小写。但MySQL 8.0里这个参数如果在初始化之后再改会直接导致数据字典不一致服务启动时报错。如果确实需要设置务必在初始化前就放进my.ini。配置完成后可以先用这个命令检查一下配置是否被正确识别bin\mysqld --defaults-fileD:\mysql-8.0.46\my.ini --verbose --help命令会输出mysqld读取到的有效配置参数。如果输出的basedir、datadir和你预期一致说明配置文件被正常读取了如果报“Fatal error in defaults handling”那就是文件路径或格式有问题。4. 初始化数据库与注册服务4.1 初始化命令的两种方式在启动MySQL之前必须先初始化数据目录。这一步骤会在datadir下创建系统数据库mysql、performance_schema、sys等并生成初始数据文件。MySQL 5.7以前用的是mysql_install_db脚本8.0已经废弃了统一用mysqld程序自带初始化参数。具体操作以管理员身份打开命令提示符进入MySQL的bin目录执行下面两者之一。cd /d D:\mysql-8.0.46\bin mysqld --initialize-insecure--initialize-insecure的意思是初始化数据目录同时将root账号的初始密码设置为空。这个模式适合本地开发环境因为它省去了从日志里翻随机密码的麻烦。执行完命令后仔细观察bin目录同级的data目录是否生成生成了就代表初始化成功。另一个更安全的选项是mysqld --initialize这个命令会生成一个临时随机密码并且随机密码会记录在data目录下的错误日志文件后缀为.err中。初始化完成后打开.err文件搜索“temporary password”关键字就能看到类似“A temporary password is generated for rootlocalhost: xxxxxx”的一行记住这段密码用于首次登录。这种方式更适合正式环境避免有人趁root空密码搞事。为什么不能自己手工创建data目录然后拷几个文件进去因为系统表空间、undo日志、redo日志这些文件的初始结构是有版本关联的版本不匹配轻则启动失败重则数据字典损坏。老老实实让mysqld自己初始化最稳妥。4.2 注册Windows服务初始化完成后MySQL现在还是前台程序状态关掉命令窗口它就会终止。要让它像正式服务一样在后台常驻、开机自启需要把它注册成Windows服务。注册命令如下mysqld --install MySQL --defaults-fileD:\mysql-8.0.46\my.ini这条命令中“MySQL”是服务名称可以自定义但建议就叫MySQL方便记忆。--defaults-file必须显式指定因为如果没有它Windows服务启动时有可能找不到my.ini尤其是非默认路径时概率更高。命令执行后如果提示“Service successfully installed”说明注册成功。此时打开任务管理器里的“服务”标签页或者按WinR运行services.msc都能看到MySQL服务躺在列表里。如果提示“Install/Remove of the Service Denied”原因几乎可以断定是当前命令提示符不是管理员权限。右键以管理员身份重新打开即可。如果提示服务已存在说明之前装过其他版本的MySQL并且保留了服务项可以先执行mysqld --remove MySQL删掉旧服务再重新注册。也可以换个服务名比如MySQL8这样就能实现多版本共存。4.3 环境变量配置配置环境变量不是必须步骤但不配置的话之后每次在命令行里执行mysql、mysqldump这些命令都必须先cd到bin目录非常影响效率。配置方法如下右键“此电脑” - “属性” - “高级系统设置” - “环境变量” - 在“系统变量”里找到Path - 编辑 - 新建 - 填入MySQL的bin目录完整路径比如D:\mysql-8.0.46\bin - 确定保存。配置完成后重新打开一个命令提示符窗口输入mysql --version如果能看到版本输出说明环境变量生效。注意已经打开的命令行窗口不会自动更新环境变量必须新开一个窗口。5. 启动、连接与修改初始密码5.1 启动服务并验证服务注册好之后启动方式有两种。第一种用命令行net start MySQL如果看到“MySQL 服务已经启动成功”的提示说明服务正常起来了。第二种是打开services.msc找到MySQL服务右键点击“启动”。启动成功后再用netstat验证一下端口是否处于监听状态netstat -ano | findstr 3306输出结果中应该能看到一条“LISTENING”状态的记录前面的IP地址一般是0.0.0.0:3306或127.0.0.1:3306。这一步能确认MySQL是真的在监听连接而不只是进程被拉起来了。如果服务启动失败理论上net start会直接报错。这时不要慌去data目录下打开.err日志文件拉到最下面几行MySQL会把启动失败的具体原因写在这里——比如参数不合法、端口被占用、datadir路径不存在等。这个日志是排查问题的第一利器后面会展开讲。5.2 用命令行连接MySQL服务正常启动后开始第一次连接测试。打开一个新的命令行窗口此时因为已经配置了环境变量不需要再cd到bin目录执行mysql -uroot -p注意-p后面如果带了密码例如-proot两者之间不能加空格不带密码直接执行MySQL会提示“Enter password:”。如果之前用的是--initialize-insecure初始化那么root密码为空在Enter password提示处直接回车即可。如果之前用的是--initialize需要输入刚才从.err日志里找到的临时随机密码。密码输入正确后会进入mysql交互命令行。输入下面这句验证版本和当前用户SELECT VERSION(), CURRENT_USER();看到输出结果里有8.0.46和rootlocalhost就说明整个安装链路已经全部打通了。5.3 修改root密码的完整流程空密码肯定不能长期保留尤其是MySQL这种带数据库的服务。在mysql提示符下执行ALTER USER rootlocalhost IDENTIFIED BY 你的新密码;这里把“你的新密码”换成自己设定的强密码即可。MySQL 8.0默认的密码验证插件是caching_sha2_password对密码强度有一定要求太短的密码可能会报错提示不符合策略。修改成功后可以退出重连验证一下新密码是否生效mysql -uroot -p这次输入新密码能进入就说明密码修改成功。如果你的应用需要通过Navicat或MySQL Workbench等图形工具连接用root和这个新密码直接连即可。默认情况下root只允许从localhost连接本机工具不受影响。如果以后需要远程连接那就需要单独创建用户并授权了那是另一个话题安装阶段不需要涉及。6. 常见问题与排查实录6.1 启动失败类问题MySQL启动失败是压缩版安装里最常见的翻车点这里整理一个速查表格基本覆盖了绝大多数场景。现象直接原因解决方案服务启动后又自动停止my.ini参数错误或datadir未初始化打开data目录.err日志定位ERROR级别记录系统错误1067配置文件路径错误或目录权限不足检查basedir、datadir路径是否存在是否用了保留字符系统错误2找不到指定文件注册服务时路径写错重新用mysqld --remove删除再以正确路径注册端口3306被占用已有MySQL实例或其他程序占用netstat -ano报错缺少DLL文件缺少VC运行库安装Microsoft Visual C Redistributable 2015-2022这里重点说一下.err日志怎么看。比如你服务启动失败打开data目录下最新生成的.err文件在最后几十行里搜索“ERROR”字样。常见的错误信息类似[ERROR] [MY-010123] The server option basedir is pointing to a non-existing directory.这就是典型的basedir路径写错了去my.ini里改正路径再重启。如果看到“Cant create directory”或“Permission denied”等关键信息说明是目录权限或被杀毒软件拦截问题。.err日志里的每一条ERROR基本都在告诉你该改哪里静下心来看比到处搜教程要快。6.2 连接报错类问题服务都起来之后连接阶段也会遇到几个高频报错这里一并整理。ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES)密码错误或者输入密码时敲进了多余的空格。如果确认密码没错但一直报这个错检查my.ini里是不是残留了skip-grant-tables是的话先删掉并重启服务。ERROR 2003 (HY000): Cant connect to MySQL server on localhost (10061)网络层面连不上九成是服务没启动。输出net start MySQL启动服务再检查3306端口监听状态。如果服务已经启动但还是报10061就看my.ini里的port是不是被改成了别的端口连接时也需要对应指定比如mysql -uroot -p -P 3307。ERROR 1130 (HY000): Host xxx is not allowed to connect to this MySQL server这是远程连接时遇到的问题root默认只允许本机登录。这种情况不要直接改root的host字段更安全的做法是新建一个专用账号并授权比如CREATE USER dev% IDENTIFIED BY 密码; GRANT ALL PRIVILEGES ON *.* TO dev% WITH GRANT OPTION; FLUSH PRIVILEGES;6.3 其他高频坑有些问题不是每次都会遇到但一旦遇到就很容易卡住很久这里捡几个典型的说一下。第一个杀毒软件拦截。mysqld.exe这种会写文件、可能开放网络端口的程序偶尔会被Windows Defender或其他杀毒软件误报。表现是mysqld启动后过几秒就消失或者初始化时数据目录写到一半被锁定。排查方式暂时关闭实时保护重新执行初始化和启动如果确认是拦截把MySQL整个目录加入白名单。第二个是文件编码问题。my.ini如果用记事本保存成ANSI编码里面出现中文注释或者中文路径时可能解析异常。统一用UTF-8无BOM保存最稳妥。第三个是Windows服务凭据问题。有时MySQL服务被设置为用某个受限账号运行导致无权写入datadir。可以在services.msc里双击MySQL服务切到“登录”标签页选择“本地系统账户”确定后重启服务。第四个是卸载残留。如果你打算从MSI版切到压缩版但旧版的MySQL服务没有卸干净新服务启动时可能会因为端口冲突或者服务名冲突起不来。先执行mysqld --remove删除新注册的服务再确认旧服务是否还在有的话一并卸载最后统一排查3306端口占用。7. 一些实际操作中的体会最后聊点个人经验。我这么多年来一直偏爱压缩版核心原因是它把每个环节都摊在明面上配置文件是我自己写的数据目录我知道在哪服务是我亲手注册的。出了问题打开日志基本就能定位不会像MSI版那样一堆自动化的操作叠加在一起查起来往往摸不着头脑。装多版本MySQL的时候压缩版的优势尤其突出。我机器上同时留过MySQL 5.7和8.0两个目录对应的服务名一个叫MySQL57、一个叫MySQL80端口分别设置成3307和3308。要用哪个就net start哪个互不干扰切换成本几乎为零。MSI版想这么干虽然也能做到但操作复杂度要高不少。还有一个细节第一次用--initialize初始化时临时随机密码那串字符很容易看错特别是零和字母o、一和小写L混在一起的时候。建议拿到密码后直接复制别手敲。另外不管哪种初始化方式首次登录后第一件事一定要改密码这个习惯能帮你绕开后续一大堆权限问题。MySQL压缩版安装的整套流程说到底就是“配置 - 初始化 - 注册服务 - 连接验证”四步走。版本在更新参数名在变化但这个核心链条一直很稳定。按这个思路走不管以后遇到MySQL哪个新版本你都能从容应对。
返回列表