MySQL(Windows)压缩包安装与配置指南(超详细版)

MySQL(Windows)压缩包安装与配置指南(超详细版)

在 Windows 环境下安装 MySQL,除了使用官方安装器之外,更常见也更灵活的方式是使用 zip 压缩包解压安装。这种方式的优点是目录结构清晰、迁移方便、不会写入过多系统组件,适合学习、开发环境以及需要多版本共存的场景。

本文记录一次完整的 MySQL 8.0.28(winx64)压缩包安装流程,包括环境变量配置、my.ini 编写、初始化、注册系统服务、启动、登录与修改 root 密码,并附带常见报错处理方法。


一、安装包准备

下载地址:https://dev.mysql.com/downloads/mysql/

我比较喜欢用zip

在这里插入图片描述

本次使用版本为:

  • MySQL Community Server 8.0.28
  • Windows x64 压缩包版(zip)

下载完成后解压到目标目录:

D:\mysql\mysql-8.0.28-winx64 

注意:路径尽量简洁,不要包含中文或特殊字符,避免后续服务启动异常。


二、配置环境变量

为了在任意目录下直接使用 mysqlmysqld 命令,需要将 MySQL 的 bin 目录加入系统环境变量。

将以下路径添加到系统变量 Path 中:

D:\mysql\mysql-8.0.28-winx64\bin 

配置完成后建议重新打开 CMD 或 PowerShell,使环境变量生效。


三、创建配置文件 my.ini

在 MySQL 安装目录下创建 my.ini 文件:

D:\mysql\mysql-8.0.28-winx64\my.ini 

写入以下内容:

[mysql] default-character-set=utf8 [mysqld] port = 3306 basedir = D:\mysql\mysql-8.0.28-winx64 datadir = D:\mysql\mysql-8.0.28-winx64\data max_connections=20 character-set-server=utf8 default-storage-engine=INNODB sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

参数说明:

  • port:MySQL 服务监听端口,默认 3306
  • basedir:MySQL 安装目录
  • datadir:数据文件存放目录(初始化后会自动生成 data 文件夹)
  • character-set-server:服务端默认字符集
  • default-storage-engine:默认存储引擎(MySQL 8 推荐 InnoDB)
  • sql_mode:SQL 模式控制,建议启用严格模式避免脏数据

编码注意事项

my.ini 文件建议保存为 ANSI 或 UTF-8(无 BOM),部分情况下编码错误会导致 MySQL 无法启动或读取配置失败。


四、初始化 MySQL 数据库

初始化会生成 MySQL 系统表、数据目录以及 root 的初始临时密码。

以管理员身份打开 CMD,执行:

mysqld --initialize 

如果初始化成功,会在 data 目录生成一批文件,同时生成 .err 错误日志文件。

下图这种输出一般表示初始化正常执行:

在这里插入图片描述

data 目录生成内容示例:

在这里插入图片描述

五、获取 root 初始临时密码

初始化完成后,MySQL 会在 data 目录生成一个 .err 文件,例如:

DESKTOP-xxx.err 

打开该 .err 文件,搜索关键字:

temporary password 

即可找到 root 初始临时密码,例如:

/MaQuy.7,WFV 

下图红框位置即为初始密码:

在这里插入图片描述

另一张示例图:

在这里插入图片描述

该密码用于首次登录,登录后必须修改,否则后续操作会受限制。


六、安装 MySQL Windows 服务

为了方便开机启动与后台运行,通常会把 MySQL 注册成 Windows 服务。

进入 MySQL 根目录:

D: cd D:\mysql\mysql-8.0.28-winx64 

执行安装服务命令:

mysqld --install 

执行成功后会创建默认名为 MySQL 的系统服务。


七、服务已存在报错处理

在安装服务时,可能会遇到如下提示:

The service already exists! The current server installed: D:\mysql\mysql-8.0.28-winx64\bin\mysqld MySQL 

示例截图如下:

在这里插入图片描述

该问题通常是系统中已经注册过 MySQL 服务(可能是旧版本残留),需要删除旧服务后重新安装。

执行删除命令:

sc delete MySQL 

输出如下说明删除成功:

[SC] DeleteService 成功 

示例截图:

在这里插入图片描述

如果执行 net stop MySQL 提示服务名无效,这是因为服务已经删除,不属于异常:

在这里插入图片描述

删除完成后重新执行:

mysqld --install 

即可完成注册。


八、启动 MySQL 服务

服务注册完成后启动 MySQL:

net start mysql 

启动成功示例:

在这里插入图片描述

如果启动失败,建议立即检查 data 目录下 .err 日志文件,里面会给出具体错误原因(端口占用、配置路径错误、权限不足等)。


九、登录 MySQL

启动成功后,使用 root 登录:

mysql -u root -p 

随后输入 .err 文件中查到的临时密码即可进入 MySQL。


十、修改 root 密码

MySQL 8.0 默认启用较强的密码校验策略,首次登录后必须修改密码。

执行以下 SQL:

alteruser'root'@'localhost' identified with mysql_native_password by'123456';

修改成功示例:

在这里插入图片描述

如果希望刷新权限(部分情况下建议执行):

FLUSH PRIVILEGES;

十一、验证 MySQL 是否安装成功

1. 查看版本号

mysql -V 

输出示例:

mysql Ver 8.0.28 for Win64 on x86_64 (MySQL Community Server - GPL) 

2. 检查端口监听状态

netstat -ano | findstr :3306 

如果看到 LISTENING 状态,说明 MySQL 服务已经正常监听端口。


十二、常见问题与排查建议

1. mysqld 初始化失败

通常原因包括:

  • my.ini 配置错误(basedir/datadir 写错)
  • data 目录已有旧数据导致冲突
  • 没有管理员权限

建议:

  • 删除 data 文件夹重新初始化
  • 检查 my.ini 路径是否正确
  • 使用管理员权限执行 CMD

2. 服务启动失败

大概率原因:

  • 3306 端口被占用(可能有旧 MySQL、MariaDB、XAMPP 等)
  • my.ini 配置读取失败(编码或格式问题)
  • data 目录权限不足

解决方法:

  • 使用 netstat -ano | findstr :3306 检查端口占用
  • 检查 .err 日志文件具体报错
  • 确认 my.ini 保存格式正确(ANSI 或 UTF-8 无 BOM)

3. root 密码错误或无法登录

建议确认:

  • 临时密码是否复制完整(注意符号)
  • 是否使用正确的 .err 文件(多次初始化会生成不同密码)

如果确实忘记密码,需要通过跳过权限表方式重置 root 密码(该内容属于扩展,可单独写一篇文章整理)。


十三、总结

MySQL 8.0 的 zip 安装方式本质上流程并不复杂,关键点集中在以下几处:

  • my.ini 配置必须正确,尤其是 basedirdatadir
  • 初始化后必须从 .err 文件获取 root 临时密码
  • 注册服务时可能存在旧服务残留,需要 sc delete MySQL 清理
  • 启动失败优先查看 .err 日志定位原因

完成上述步骤后,MySQL 就能稳定以 Windows 服务方式运行。

后续建议搭配 MySQL Workbench 或 Navicat 进行可视化管理,效率会更高。

Read more

Flutter 组件 spry 适配鸿蒙 HarmonyOS 实战:轻量化 Web 框架,构建高性能端侧微服务与 Middleware 治理架构

Flutter 组件 spry 适配鸿蒙 HarmonyOS 实战:轻量化 Web 框架,构建高性能端侧微服务与 Middleware 治理架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 spry 适配鸿蒙 HarmonyOS 实战:轻量化 Web 框架,构建高性能端侧微服务与 Middleware 治理架构 前言 在鸿蒙(OpenHarmony)生态迈向全场景分布式协同、涉及设备端侧 API 暴露、轻量化资源服务镜像及严苛的跨端 RPC 通信背景下,如何实现一套既能保持极低内存足迹(Footprint)、又能提供类似后端(Node.js/Koa)般丝滑开发体验且具备全异步处理能力的“端侧 Web 基座”,已成为决定应用分布式自治能力与全栈同构效率的关键。在鸿蒙设备这类强调 AOT 极致效能与背景任务严格限制的环境下,如果应用依然采用重量级的 HTTP 服务端,由于由于进程级的上下文切换开销,极易由于由于“算力溢出”导致鸿蒙应用在作为服务端响应时发生明显的电量损耗。 我们需要一种能够解耦路由逻辑、支持

By Ne0inhk

10、Vue3中Vuex从入门到实战:手写迷你Vuex,掌握前端状态管理核心

Vue3中Vuex从入门到实战:手写迷你Vuex,掌握前端状态管理核心 在Vue3项目开发中,组件化让代码复用和维护更高效,但跨组件、跨页面的数据共享却成了高频痛点——用户登录信息、全局权限、公共计数器等数据,如果靠组件传参层层传递,代码会变得混乱不堪。这时候,Vuex就成了前端状态管理的“大管家”,帮我们集中式管理共享数据。本文将从前端数据管理的痛点出发,带你吃透Vuex的核心用法,甚至手写一个迷你Vuex理解其底层原理。 一、前端数据管理:为什么需要Vuex? 现代Web应用由组件、数据、路由三大核心构成,组件内部的私有数据用ref/reactive管理即可,但共享数据的管理却需要更规范的方式。 我们先试想一个简单场景:用全局变量存储共享数据。 window._store ={}// 全局存储数据 这种方式看似简单,但存在致命问题:window._store不是响应式的,修改数据后Vue组件无法自动更新视图。如果我们用Vue的响应式API包裹全局数据,并提供统一的修改方法,这就是Vuex的雏形——本质是“响应式的全局数据 + 规范化的修改规则”。 二、Vuex是什

By Ne0inhk
【递归,搜索与回溯算法 & 记忆化搜索】深入理解记忆化搜索算法:记忆化搜索算法小专题

【递归,搜索与回溯算法 & 记忆化搜索】深入理解记忆化搜索算法:记忆化搜索算法小专题

前言:实现记忆化搜索的一般步骤      (1) 实现记忆化搜索代码步骤         (2) 如何将暴搜代码转换成记忆化搜索代码?         (3)如何添加一个备忘录?         斐波那契数     题目解析         算法原理         解法一:递归        时间复杂度高是因为递归展开树有很多次重复计算,我们可以优化这些重复的计算;我们可以创建一个备忘录,当计算其中一个分支时,把计算出的 d(i) 放入一个"备忘录"中 ( i = 1 ....... n ),当递归其他分支时,我们通过备忘录存储好的计算结果,减少递归树额外重复的展开;     解法二:记忆化搜索    当我们在递归的时候,发现递归过程会重复进行完全相同的问题,我们就把这些完全相同的问题存储到额外创建的"备忘录"中,再后续递归出现相同问题,直接从备忘录中拿计算好的结果即可,避免不必要的重复递归;  所以记忆化搜索,就是一个带备忘录的递归;记忆化搜索,其实也是剪枝的一种方式,在本题使用记忆化搜索,就能把指数级别的时间复杂度降到常数

By Ne0inhk
【踩坑记录】使用 Layui 框架时解决 Unity WebGL 渲染在 Tab 切换时黑屏问题

【踩坑记录】使用 Layui 框架时解决 Unity WebGL 渲染在 Tab 切换时黑屏问题

【踩坑记录】使用 Layui 框架时解决 Unity WebGL 渲染在 Tab 切换时黑屏问题 在开发 Web 应用时,尤其是集成了 Unity WebGL 内容的页面,遇到一个问题:当 Unity WebGL 渲染内容嵌入到一个 Tab 中时,切换 Tab 后画面会变黑,直到用户点击黑屏区域,才会恢复显示。 这个问题通常是因为 Unity 渲染在 Tab 切换时被暂停或未能获得焦点所致。 在本文中,我们将介绍如何在使用 Layui 框架时,通过监听 Tab 切换事件并强制 Unity WebGL 渲染恢复,来解决这一问题。 1. 问题描述 当 Unity WebGL 内容嵌入到页面中的多个

By Ne0inhk