在Windows下安装MySQL 5.7.21通常有两种方式:使用官方MSI安装向导,或下载免安装压缩包手动配置。MSI安装虽然交互简单,但自定义安装路径、数据目录和字符集时步骤较多,卸载后残留的注册表项或服务配置也容易影响再次安装。本文采用mysql-5.7.21-winx64.zip免安装包,将文件解压到C:\mysql-5.7.21-winx64目录,通过命令完成初始化并注册为Windows系统服务。整个流程对文件位置、配置文件和命令参数都有明确要求,适合需要重复部署或对安装目录有固定规划的环境。

一、准备安装文件与目录结构
解压压缩包之前,建议先规划好目录。推荐放在磁盘根目录下,避免路径中包含中文或空格,例如C:\mysql-5.7.21-winx64。完整路径中如果带有空格,后续命令行参数解析和配置文件读取都可能出现不必要的麻烦。尤其不建议放在C:\Program Files目录下,因为该目录受Windows系统权限保护,普通权限的进程写入数据文件时可能被拒绝。
解压完成后,应确认目录下存在bin、include、lib、share等子目录,其中bin目录中包含mysqld.exe和mysql.exe这两个核心程序。mysqld.exe是数据库服务主程序,mysql.exe是命令行客户端。如果计算机上曾经安装过其他版本的MySQL,需要先停止旧服务并备份原有数据目录,避免旧服务的注册信息与新安装目录冲突。
二、创建并配置my.ini文件
my.ini是MySQL在Windows下的核心配置文件,必须放在实例的basedir目录下,也就是C:\mysql-5.7.21-winx64目录。保存时建议使用ANSI编码,不要使用UTF-8 with BOM,否则mysqld在解析第一行配置时可能出错。文件中的basedir和datadir路径需要写成完整的绝对路径,并且使用反斜杠分隔。
下面是一个可用的最小配置。datadir指向的data目录需要提前创建,并且保证内容为空。如果data目录中已经存在旧的系统库文件,初始化过程会失败。可以使用mkdir命令创建目录,例如mkdir C:\mysql-5.7.21-winx64\data。
[mysqld] basedir=C:\mysql-5.7.21-winx64 datadir=C:\mysql-5.7.21-winx64\data port=3306 character-set-server=utf8 default-storage-engine=INNODB sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES max_connections=200 log-error=C:\mysql-5.7.21-winx64\data\error.log
其中character-set-server=utf8用于设置服务端默认字符集,如果业务中需要存储表情符号,可以改为utf8mb4。sql-mode采用严格模式有助于发现数据截断或不规范的写入。端口号3306是MySQL默认值,如果该端口已被其他程序占用,需要改成其他端口,否则服务启动后客户端可能连接失败。
三、初始化数据库并获取临时密码
配置文件准备完成后,进入bin目录执行初始化命令。MySQL 5.7支持两种初始化方式:--initialize会为root用户生成随机临时密码,--initialize-insecure则会创建无密码的root用户。生产环境建议使用--initialize,避免初始化后数据库处于无密码的危险状态。初始化时必须确保命令提示符以管理员身份打开。
cd C:\mysql-5.7.21-winx64\bin mysqld --initialize --basedir=C:\mysql-5.7.21-winx64 --datadir=C:\mysql-5.7.21-winx64\data
初始化成功后,data目录下会自动生成mysql、performance_schema、sys等系统数据库目录。同时会生成一个以计算机名命名的错误日志文件,例如DESKTOP-ABC.err。root用户的临时密码会记录在该日志文件中,可以通过findstr命令快速筛选出来。
findstr /C:"temporary password" C:\mysql-5.7.21-winx64\data\*.err
执行后命令输出中会显示类似A temporary password is generated for root@localhost: 后面跟着一串随机字符。这部分内容就是首次登录所需的临时密码。注意密码区分大小写,复制时不要遗漏末尾的符号。
四、注册系统服务并启动登录
初始化完成后,还需要把mysqld注册为Windows系统服务,才能让数据库在后台持续运行。注册服务使用mysqld --install命令,服务名可以自定义,本文使用MySQL57。注册前要确认命令提示符具有管理员权限,否则会提示Install/Remove of the Service Denied。如果之前已经存在同名服务,需要先执行mysqld --remove MySQL57将其移除。
C:\mysql-5.7.21-winx64\bin\mysqld --install MySQL57 --defaults-file=C:\mysql-5.7.21-winx64\my.ini net start MySQL57
服务注册成功后,Windows会在注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL57下保存相关配置。通过net start MySQL57启动服务,如果出现服务名无效或服务未安装的提示,通常说明注册命令没有成功执行或服务名拼写有误。
服务启动后,使用mysql命令行客户端登录。输入mysql -uroot -p并按回车,当提示Enter password时粘贴前面获取到的临时密码。登录成功后,MySQL会强制要求修改root密码,否则大部分管理操作无法进行。可以执行下面的SQL语句完成密码修改。
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; FLUSH PRIVILEGES;
MySQL 5.7默认启用了密码复杂度校验,新密码建议包含大小写字母、数字和符号,长度不要过短。如果仅用于本地测试,不希望密码策略过于严格,可以在配置文件中调整validate_password相关参数,但生产环境不建议放宽。
五、常见问题与卸载注意事项
如果服务启动失败,最常见的原因是my.ini配置错误或data目录未正确初始化。Windows服务启动失败时通常只显示错误代码,例如1067,具体原因需要查看data目录下的错误日志。如果日志中出现unknown variable字样,说明配置文件中存在MySQL 5.7不认识的参数或参数值写错;如果出现Can't create/write to file,则说明目录权限不足,应检查安装目录的属性是否允许当前用户写入。
另一个常见问题与运行库有关。启动mysqld时如果提示计算机中丢失VCRUNTIME140.dll或MSVCP140.dll,说明系统缺少对应的Microsoft Visual C++ Redistributable运行库。安装相应版本的运行库后,服务即可正常启动。不要只复制单个DLL文件,这样容易导致后续运行出现更隐蔽的问题。
端口冲突也会导致服务无法正常接收请求。可以在命令提示符执行netstat -ano | findstr :3306查看端口占用情况,如果确认是其他程序占用,要么停止该程序,要么修改my.ini中的port参数。卸载MySQL 5.7.21时,应先在管理员命令提示符中执行net stop MySQL57停止服务,再执行mysqld --remove MySQL57移除服务,最后删除C:\mysql-5.7.21-winx64目录。如果需要更换其他MySQL版本,不要直接复用一个已经安装过的data目录,必须使用新版本重新初始化,否则系统库结构不一致会导致启动失败。