
如果你手头还有 MySQL 5.5 的老项目或者你正在课程实验、内网部署里被要求还原一套旧环境那么这篇记录正好能对上你的需求。Windows 环境下 MySQL 5.5 的安装与配置表面上只是双击安装包、下一步到底实际上涉及服务注册、端口分配、字符集设置、权限控制这些细节哪一步没选对后面连接数据库或者跑项目时就会冒出各种怪问题。这篇就把我实际安装配置 MySQL 5.5 的完整过程、踩过的坑和验证方法一次说清楚从下载安装包开始到命令行登录、建库建表、远程连接再到服务启动失败和乱码的排查给你一条可以直接照着做的路径。1. 为什么还在用 MySQL 5.5适用场景与安装准备1.1 哪些场景会遇见 MySQL 5.5很多人看到 5.5 这个版本号会觉得奇怪明明 8.0 都出很久了怎么还有人装这么老的版本。我最初也是这么想的直到接手了一个多年前开发的信息管理系统部署文档里白纸黑字写着“数据库MySQL 5.5字符集 utf8”这才意识到老版本并没有消失只是藏在一堆遗留系统里。实际工作中遇到 MySQL 5.5 的场景大概有三类。第一类是旧项目源码直接依赖 5.5 的行为比如某些 SQL 写法、函数逻辑、默认排序规则和老版本绑定得很死升级到新版本后要么执行报错要么查询结果顺序变了。第二类是高校实验和培训环境教材和实验指导书用的是 5.5 的截图配套光盘里的安装包也是 5.5为了保证学生操作步骤和教材一致只能在 Windows 上装同版本。第三类是数据迁移和备份恢复如果你手上有一套 5.5 的物理备份或者逻辑备份需要验证数据完整性最稳妥的办法就是本地起一个同版本实例做恢复对比。MySQL 5.5 在功能上并不算落后太多它把 InnoDB 作为默认存储引擎支持视图、触发器、存储过程、分区表也支持完整的 SQL 标准子集用来做课程设计、中小型管理系统、个人博客这类项目完全够用。而且它对硬件要求很低一个单核 CPU、512MB 内存的虚拟机就能跑得很流畅这反而是新版本给不了的优势。1.2 安装包选型MSI、ZIP 与版本位数我在安装前遇到的第一个问题是选哪个安装包。MySQL 5.5 时代官方提供的 Windows 安装包分成 MSI 安装向导版和 ZIP 解压版同时还有 win32 和 win64 的区别。MSI 安装版适合第一次接触 MySQL 的人。它会自动完成目录创建、服务注册、my.ini 生成还会弹出一个图形化配置向导让你设置端口、字符集、root 密码。缺点是安装路径往往被放到C:\Program Files\MySQL\MySQL Server 5.5下面路径里带着空格虽然是官方默认但偶尔会引发一些脚本路径解析问题。另外 MSI 安装向导自动生成的服务名和配置文件位置不固定后续想改成自定义目录比较麻烦。ZIP 解压版则更适合我在内网部署和排障的场景。下载一个mysql-5.5.62-win64.zip解压到C:\mysql-5.5.62-winx64手动写 my.ini用mysqld --install注册服务所有东西都在自己掌控范围内。想换目录、想多版本共存、想排查启动报错都比 MSI 版方便。我的建议是如果只是课程实验或者快速体验选 MSI 版如果是给老项目做部署、要给多个实例分别配置选 ZIP 版。位数方面现在绝大多数 Windows 都是 64 位直接选 winx64如果你的机器是老旧的 32 位系统才需要选 win32。重点注意5.5 的 zip 包解压后目录名里的位数标识建议保留这样以后同目录下放多个实例时不会混淆。提示无论选择哪种安装包安装程序都建议右键“以管理员身份运行”。Windows 下 MySQL 服务注册和系统目录写入都需要管理员权限直接双击可能弹 UAC 之后静默失败后面服务列表里找不到 MySQL。2. 从安装包到服务完整安装过程拆解2.1 安装前必须做的三个检查正式点击安装程序之前我习惯先做三个快速检查能省掉后面一堆麻烦。第一检查 3306 端口是否被占用。5.5 默认监听 3306 端口如果本机已经装了别的关系型数据库或者另一个 MySQL 实例端口冲突会导致服务启动失败。检查命令是netstat -ano | findstr 3306如果看到 LISTENING 状态说明端口被占用要么关掉对应的进程要么等下把 MySQL 端口改成 3307。第二检查系统是否存在残留的 MySQL 服务。打开命令提示符输入sc query type service state all | findstr mysql如果有旧服务残留建议先卸载旧版本或删除旧服务否则新服务注册时可能提示同名服务已存在。第三关闭杀毒软件和系统安全拦截。MySQL 安装时会在注册表写入服务项、在系统目录创建文件部分安全软件会误报并拦截。我在一台装有某安全卫士的机器上安装时安装过程正常但服务始终启动不了后来发现是安全软件把mysqld.exe拉进了隔离区。2.2 安装向导分步详解MSI 版我以 MSI 安装版为例把每一步的选择说明白。进入安装向导后先看到 Welcome 页面直接 Next。然后出现安装类型选择默认是 Typical但我会选 Custom。Typical 会把程序装到C:\Program Files\MySQL\MySQL Server 5.5数据目录放在同一个安装目录下路径中带空格后续如果要迁移数据目录或者改 my.ini 时会稍微麻烦。Custom 模式下我把安装路径手动改成C:\mysql-5.5.62-winx64\短路径没有空格脚本操作起来更省心。往下一步安装程序会列出要安装的组件。MySQL Server 是必选的必须勾选。Client Tools 建议勾选包含 mysql 命令行客户端和 mysqldump 工具。Documentation、Developer Components 这些可选组件看情况如果只是跑服务不勾选也能减少出错概率。安装完成后程序会提示是否立即配置实例勾选 “Configure the MySQL Server now”进入配置向导。5.5 的配置向导和 5.7、8.0 的新版安装器不一样它是一个独立的实例配置向导里面有非常多选项。第一层选择 Standard Configuration 和 Detailed Configuration。我强烈建议选 Detailed Configuration因为 Standard 模式基本不让你动字符集和存储引擎默认 character_set_server 还是 latin1后面中文数据很容易乱码。Detailed Configuration 里面的选项是连环五步服务器类型选择 Developer Machine、Server Machine、Dedicated MySQL Server Machine。这个选项影响 InnoDB buffer pool 的默认大小。选 Developer Machine 内存占用最小适合本机实验如果这台机器专门跑数据库选 Dedicated MySQL Server Machine会分配更多内存作为缓存。课程实验环境选 Developer Machine 就够了。数据库用途选择 Multifunctional Database、Transactional Database Only、Non-Transactional Database Only。老项目里如果既用到 InnoDB 又用到 MyISAM选 Multifunctional Database我一般选 Multifunctional兼容性最好。Transactional Database Only 会强制默认引擎为 InnoDB如果有老业务表用的是 MyISAM这种选项会导致建表时被替换。InnoDB Tablespace Settings 保持默认即可。并发连接数可以选择 Decision Support、OLTP 或 Manual Setting。选 Manual Setting然后手动填 50。5.5 对连接数上限没有新版本那么激进50 足够个人实验和中小型系统并发。字符集选择是整个配置里最关键的一步。默认选项是 “Best Support For Multilingualism”听名字很美好但它会把 character_set_server 设置成 utf8同时在排序规则上采用 utf8_general_ci其实也还行。为了稳妥我通常选 “Manual Selected Default Character Set/Collation”然后手动在下拉框里选 utf8。再往后设置 Windows 服务选项。勾选 “Install As Windows Service”服务名可以改成MySQL55。这个命名习惯很好以后如果同一台机器上再装 5.7 或 8.0服务名不会冲突。紧接着一定要勾选 “Include Bin Directory in Windows PATH”这样命令行里才能直接敲mysql不用每次都切到安装目录下的 bin。安全选项里设置 root 密码同时有两个默认勾选项一个是 “Enable root access from remote machines”一个是 “Create An Anonymous Account”。这两个都不要勾。root 远程访问是极大的安全隐患匿名账号更是没必要。如果以后需要远程连接我会在配置完成后单独创建应用账号比直接放开 root 安全得多。最后点击 Execute程序就会根据你的选择生成 my.ini完成服务注册并启动服务。看到 Configuration Complete 的绿色勾号安装环节就结束了。2.3 ZIP 解压版的安装方式如果你选择 ZIP 版流程就完全手动化。解压mysql-5.5.62-winx64.zip到C:\mysql-5.5.62-winx64在根目录下新建一个my.ini文件内容按我后面第三节的配置来写。然后打开命令提示符进入 bin 目录执行mysqld --install MySQL55 --defaults-fileC:\mysql-5.5.62-winx64\my.ini这一步的作用是把 MySQL 注册成 Windows 服务。注册成功后执行net start MySQL55服务启动后剩下的初始化和登录操作与 MSI 版一致。在 5.5 中ZIP 解压版首次启动服务时不需要手动执行mysqld --initialize因为 5.5 的数据目录会在启动时自动创建root 初始密码默认为空这是 5.5 与 5.7 之后版本的一个重要差异。5.7 及以上版本首次启动时会生成一个临时随机密码5.5 没有这个机制所以安装完成后直接mysql -uroot就能进入不需要 -p 参数。这一点很多人容易搞混。3. 关键配置my.ini、环境变量与命令行登录3.1 my.ini 到底该怎么改配置完成后my.ini 是服务端的核心配置文件。MSI 安装版会自动生成通常位置在 MySQL 安装目录下ZIP 版则是手动创建在解压根目录下。我维护 5.5 实例时my.ini 里最常用的一组配置是这样[client] default-character-setutf8 [mysqld] basedirC:/mysql-5.5.62-winx64 datadirC:/mysql-5.5.62-winx64/data port3306 character-set-serverutf8 default-storage-engineINNODB max_connections100 skip-name-resolve每一项解释一下basedir是程序根目录datadir是数据目录。port是服务监听端口如果本机端口冲突就改成 3307同时客户端连接也要跟着带-P3307。character-set-serverutf8确保建表时不指定字符集也不会出现 latin1。default-storage-engineINNODB是因为老项目有时会依赖 MyISAM 的表锁特性但 InnoDB 支持事务和外键通用性更好。skip-name-resolve可以加快连接速度让 MySQL 不通过反查域名来验证客户端代价是远程连接时必须用 IP 而不是主机名本地连接和课程实验一般不影响。修改 my.ini 后需要重启服务才能生效。命令是net stop MySQL55 net start MySQL55注意my.ini 保存编码不要使用带 BOM 的 UTF-8。用 Windows 记事本“另存为 UTF-8”时会自动写入 BOMMySQL 5.5 的老版本解析带 BOM 的配置文件有可能报错或者读不到后面的参数。我习惯用编辑器把编码明确保存成 UTF-8 无 BOM。3.2 环境变量配置与命令行登录如果你在安装向导里没有勾选 “Include Bin Directory in Windows PATH”或者你装的是 ZIP 版那就需要手动配置环境变量。右键“此电脑” - “属性” - “高级系统设置” - “环境变量”在系统变量里找到 Path把C:\mysql-5.5.62-winx64\bin加进去。配置完成后新开一个命令提示符窗口输入mysql -uroot -p密码输入正确后就能看到mysql提示符。这里有个细节5.5 的命令行提示符不像新版那样显示Server version: 5.5.62和Type \c to clear...那么详细但整体交互逻辑是一样。如果连接时提示Cant connect to MySQL server on localhost (10061)说明服务没起来或者端口不通。可以先net start MySQL55启动服务再连接。如果确认服务已经启动但连接还是失败多半是端口被改动过连接时手动指定端口mysql -uroot -p -P3306 -h127.0.0.13.3 账号与远程访问权限管理数据库装好后默认只有 root 账号并且 root 只能从本机连接。这个默认设置我认为是合理的。但实际项目中经常需要从另一台机器用图形化工具连接数据库这时候就不能直接放开 root而是要创建一个专用账号。创建账号并授权可以用以下 SQLCREATE USER appuser% IDENTIFIED BY your_password; GRANT ALL PRIVILEGES ON *.* TO appuser% WITH GRANT OPTION; FLUSH PRIVILEGES;其中%表示允许任意主机连接如果只允许某台机器连接可以把%换成具体的 IP 地址比如192.168.1.100。这里要特别提醒不要用 root 去远程连接。一旦 root 密码泄露攻击者可以直接对所有库做任意操作连 binlog 和数据目录都能动。专用账号即使泄露也还可以通过回收权限限制影响范围。4. 安装完成后的实测服务、端口、字符集、建库建表4.1 服务状态与端口监听检查安装配置完并不代表万事大吉我习惯按顺序做一轮实测确保服务是真的可用而不是只装了个花瓶。首先看服务状态。在命令行执行sc query MySQL55输出里STATE一栏是RUNNING说明服务运行正常。如果用net start MySQL55启动时提示服务已经启动说明服务进程一直在。再看端口监听情况netstat -ano | findstr 3306正常会看到TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING这样的行。如果找不到说明 mysqld 进程没有正常监听可能是配置里端口没对上或者服务根本不在运行状态。最后用 mysqladmin 查看服务状态mysqladmin -uroot -p status输入密码后会返回 Uptime、Threads、Questions 等一堆信息。只要能看到这些值说明服务端已经正常响应请求。4.2 建库建表与字符集实测接下来我会实际建一个库和一张表验证字符集和存储引擎是否生效。先看服务端当前字符集SHOW VARIABLES LIKE character_set_%;重点看character_set_server这一行如果显示的是utf8说明 my.ini 里的配置生效了。如果显示latin1说明你配置向导里字符集选错了或者 my.ini 改完没有重启。然后建库CREATE DATABASE demo DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE demo;建一张包含中文内容的表CREATE TABLE t_user ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, remark VARCHAR(200) ) ENGINEInnoDB DEFAULT CHARSETutf8;插入一条中文数据并查询INSERT INTO t_user(username, remark) VALUES (测试账号, 中文备注); SELECT * FROM t_user;如果查询结果中文显示正常没有乱码和问号说明服务端到客户端的字符集链路是通的。如果这里出现乱码就先在会话里执行SET NAMES utf8;再重新查询。后面第五节我会详细讲乱码的排查思路。4.3 备份恢复与基础维护命令数据库不备份等于白装。5.5 自带的mysqldump工具在安装目录的 bin 下配置好环境变量后可以直接用。备份整个库的命令mysqldump -uroot -p demo demo_backup.sql这个命令会把 demo 库的结构和数据全部导出到 sql 文件。恢复时先建一个空库再把文件灌进去mysql -uroot -p -e CREATE DATABASE demo_restore DEFAULT CHARACTER SET utf8; mysql -uroot -p demo_restore demo_backup.sql如果备份的就是整个实例的全部库可以加--all-databases参数mysqldump -uroot -p --all-databases all_backup.sql日常维护中我还会看上线的连接和慢查询情况。用SHOW PROCESSLIST;可以查看当前有哪些连接在跑以及每个连接正在执行的语句对排查卡顿和锁问题很有用。5. 高频问题排查实录从端口占用到乱码、忘记密码5.1 服务启动失败与端口冲突我在多次安装 5.5 过程中遇到最典型的问题是服务启动失败。表现是安装完成后服务启动直接报错常见的有两种情况。一种是提示发生系统错误 1067这表示进程意外终止。需要打开 MySQL 安装目录下的 my.ini检查 basedir 和 datadir 路径是否正确目录是否存在。如果是 ZIP 版经常有人解压之后把目录改过名但 my.ini 里写的还是旧路径导致启动时找不到数据目录。更直接的排查办法是手工前台启动 mysqld看日志输出mysqld --console前台模式下所有错误信息会直接打印出来包括找不到文件、权限不足、参数写错等比在服务里看错误日志直观得多。还有一种提示是发生系统错误 1067或者服务没有响应控制功能这种情况多半是端口被占用。执行netstat -ano | findstr 3306找到占用端口的 PID再通过任务管理器找到对应进程判断是否占用然后关掉或更改 MySQL 端口。5.2 中文乱码问题的根因中文乱码是 MySQL 5.5 里最让人头疼的问题没有之一。乱码的根源是服务端字符集、客户端字符集、表结构字符集三处设置不一致。汉字本身是 utf8 编码如果服务端把数据按 latin1 存储读取出来自然显示乱码。排查顺序是这样的。第一步看服务端字符集SHOW VARIABLES LIKE character_set_%;确保character_set_server是 utf8。第二步看表字段字符集SHOW CREATE TABLE t_user;如果表定义里出现DEFAULT CHARSETutf8说明建表时指定了。第三步看当前客户端连接字符集SHOW VARIABLES LIKE character_set_client;如果还是 latin1执行SET NAMES utf8;。如果是应用连接乱码还需要检查应用连接串里是否指定了字符集。比如使用图形化工具连接时在连接参数里加上characterEncodingutf8或者 URL 后面加?useUnicodetruecharacterEncodingutf8。很多老项目乱码就是连接串里没带这个参数。如果是已经存在的旧库旧表数据已经以 latin1 存进去了那就算修改了服务端字符集也救不回来。这种时候我一般是在程序层重新迁移数据新建 utf8 库读取旧数据时先转码再写入而不是在原表上硬改字符集。5.3 root 密码忘记与跳过授权表忘记 root 密码在所难免尤其是给客户部署完系统过几个月再来维护原密码早就不知道丢哪了。重置密码的思路是临时跳过权限检查直接进入数据库修改密码。第一步停止服务net stop MySQL55第二步在 my.ini 的[mysqld]段加一行skip-grant-tables第三步启动服务net start MySQL55第四步进入数据库因为跳过了授权表所以不需要密码mysql -uroot第五步修改 root 密码。注意 5.5 的 user 表密码字段名称是Password不是 5.7 之后的authentication_stringUPDATE mysql.user SET Password PASSWORD(新密码) WHERE User root; FLUSH PRIVILEGES;最后一步是恢复原样删掉 my.ini 里的skip-grant-tables重启服务用新密码登录。这里要注意跳过授权表期间 MySQL 完全没有权限控制任何人都能连上来所以这个操作只能在本机上进行并且过程要快改完密码立刻移除该参数。5.4 干净卸载与重装老项目里经常遇到一个需求这个 MySQL 版本装坏了或者和其他服务冲突我要卸掉重装。Windows 上卸载 MySQL 5.5 之所以容易出问题是因为除了应用程序本体服务项、数据目录、注册表服务项都会残留。我的卸载顺序是这样。第一步停服务net stop MySQL55第二步卸载程序。如果是 MSI 版在控制面板的“程序和功能”里找到 MySQL Server 5.5卸载。如果是 ZIP 版直接删除安装目录即可。第三步删除旧服务。卸载程序有时不会自动删除 Windows 服务项如果不删除重装时服务名重复会导致新服务注册失败。命令是sc delete MySQL55执行成功会提示[SC] DeleteService 成功。第四步手工清理残留数据目录。默认数据目录如果放在原来的安装目录下卸载后可能留着data文件夹。如果里面确实没有需要保留的数据可以一并删除如果有重要数据建议先备份整个 data 目录再删除原目录。第五步清理注册表。运行regedit找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\删除名字为MySQL55的子键。这个操作只在服务删除失败时使用注册表操作有风险不熟练的话建议先备份注册表再动手。提示卸载前一定要先导出数据。我见过不少人直接卸载 MySQL然后发现原来的库表全没了才追悔莫及。只要执行过mysqldump -uroot -p --all-databases backup.sql后续重装完再导回来数据就还在。最后分享一个我自己的习惯Windows 上跑 MySQL 5.5我一般不把它当成一次性安装而是把服务名、数据目录和端口都写成固定命名规则实例名版本号的方式比如MySQL55对应 5.5MySQL57对应 5.7。这样一台机器上多个版本共存互不冲突排查问题时看服务名就知道跑的是哪个版本。如果只是做课程实验我更推荐先用 ZIP 版手动跑通一遍再考虑注册成系统服务这个过程能让你对 MySQL 的目录结构、配置加载逻辑和启动流程有更深的感知远比一路 Next 到底收获更多。