拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MySQL 5.5 Windows安装配置全攻略:从下载到排查1067错误

MySQL 5.5 Windows安装配置全攻略:从下载到排查1067错误

MySQL 实验1:Windows 环境下 MySQL5.5 安装与配置,这个标题放在现在看确实有点复古,但恰恰是很多人的第一堂数据库实验课。这几年我在实验室和公司里帮人处理过不少次 MySQL 在 Windows 上的安装配置问题,5.5 版本又特别容易在服务注册、my.ini 读取、字符集这几个地方翻车。这篇文章把从下载开始到配置完成的完整路径写清楚,同时会解释每一步为什么要这么做,遇到问题怎么排查。新手可以照着做,运维老鸟也能复习一下老版本的特殊脾气。

1. 版本选择与安装前准备

1.1 为什么还在用 5.5?先确认你的场景

先说结论:MySQL 5.5 在官方已经停止维护多年。如果你是要做新项目,老老实实装 8.0;但如果你的课程考试指定了 5.5、或者手里维护的系统只支持 5.5,那这篇东西就有用了。

我自己碰到过三种场景。一是高校教材还在用 5.5,实验步骤全部基于老向导界面,装新版对不上;二是企业内部老系统连接串只适配 mysql-connector-java 5.x,换新版驱动要改一堆代码;三是一些开发机性能偏弱,5.5 在低配置机器上跑得更轻。确认你是这些场景再往下看,否则别浪费时间装过时版本。

1.2 下载哪个包:MSI 还是 ZIP

如果去官网下载页,MySQL 的下载入口默认给的是 8.x,版本下拉里没有 5.5。要拿 5.5,需要跳到官方下载存档页 downloads.mysql.com/archives/installer,在 Version 下拉里选 5.5.62。这里注意,5.5 系列的最终版本是 5.5.62,选它代表补丁相对最全。

安装包有两种:MSI(图形安装向导)和 ZIP(免安装包)。我的建议是:第一次装、懒得折腾的人选 MSI,下载 mysql-5.5.62-winx64.msi,一路向导点下来就行;要是你想以后快速迁移环境、或者让这台机器上同时存在多个 MySQL 版本,就选 ZIP 包解压部署。ZIP 版看着免安装,其实要做的事比 MSI 多一点,后面我会专门讲。

另外注意位数:MySQL 5.5 在老版本里是区分 32 位和 64 位的,别在 x64 系统上硬装 x86 包,性能差且莫名问题多。如果系统特别老,比如 32 位 Windows 或嵌入式测试机,才需要特意找 win32 版。下载页的 Platform 下拉里看清 Windows 对应 x64 还是 x86,选错了安装阶段可能根本跑不起来。

1.3 安装前先检查这几件事

第一,检查 VC++ 运行库。MySQL 5.5 在 Windows 下依赖微软 VC++ 运行库,通常机器上装了 VS 或常用软件就能满足。如果 MSI 装一半报缺少 msvcr*.dll,或者进程报 0xc000007b 错误,先去安装 VC++ 2008/2010 运行库再重来,不要硬着头皮重试。

第二,检查端口。Windows 机器上很容易有别的服务占着 3306。安装前先执行netstat -ano | findstr :3306,如果有输出,先把对应进程处理掉,否则 MySQL 服务即使装上也可能起不来。这一步比大多数人想象的重要,我见过太多人卡在“服务启动不了”上,最后发现根本不是 MySQL 的问题。

第三,检查路径。安装目录和数据目录都不要带中文和空格。有人图方便装在 D:\数据库\MySQL5.5,结果服务怎么都启不下来,配置文件里路径转义全是坑。建议固定在 D:\MySQL 下,路径越短越好。

第四,注意 Windows 10/11 的兼容性。老的 5.5 MSI 安装器在新系统上有时会弹“此应用无法在你的电脑上运行”。处理办法是右键安装包,属性—兼容性—勾选“以兼容模式运行 Windows 7”,顺便勾选“以管理员身份运行”,基本就能过了。

2. 图形化安装路径的完整走法

2.1 安装向导里的几个选择

双击 5.5 的 MSI,前面几步是很老的 Installer 界面。到 Setup Type 时我一般选 Custom,自定义安装路径,而不是 Typical。Typical 会把它塞到 C:\Program Files 下面,目录带空格,后面改 my.ini 和找配置文件都别扭。

在 Custom 页面,MySQL Server 那块是服务器本体,Client Programs 默认包含 mysql 命令行工具。如果你的机器上没有别的数据库图形客户端,安装完后可以单独装一个开源 DBeaver,社区版就够用,比很多老工具稳定。选好路径后继续,等进度条跑完,注意留意最后是否勾选“Configure the MySQL Server now”,默认勾选即可。

5.5 安装器在最后会启动 MySQL Instance Configuration Wizard,也就是配置向导。如果你的机器之前残留过 5.1 之类版本的 MySQL 服务,在向导开始前先确认服务列表里没有旧 MySQL,有的话先卸干净。否则新旧服务名冲突,会让你在配置向导最后一步直接报错,处理起来比重装还麻烦。

2.2 安装完成后自动弹出的配置向导

MSI 安装结束后一般会接着启动 MySQL Instance Configuration Wizard。这个向导负责把你的 MySQL 注册成 Windows 服务、设置 root 密码、选默认引擎和字符集。这一步非常关键,因为真正决定“能不能用”的不是安装包,而是这份配置。

如果你安装时手滑取消了配置向导,也别慌。MySQL 5.5 的安装目录 bin 下面有个 MySQLInstanceConfig.exe,双击可以随时重新打开。它操作的是当前 basedir 目录下的实例,要做的事和安装时一样。

配置向导每一步都有英文说明,第一次看容易懵。下面的 3.1 节我会拆开逐个讲清楚。在此之前不要手动创建 my.ini,向导会自动生成一个放在 C:\ProgramData\MySQL\MySQL Server 5.5\ 下面,手工干预反而可能覆盖不全,或者出现两份配置文件互相干扰的问题。

3. 配置 MySQL:字符集、端口与服务

3.1 配置向导逐项解析

向导第一步让你选配置类型。Detailed Configuration 和 Standard Configuration 的区别在于:Standard 只让你设端口、字符集、服务名、root 密码,适合什么默认都能接受的;建议选 Detailed Configuration,多几步但能看到关键选项,尤其是字符集和并发数的设置。

Server Type 有三个值。Developer Machine 表示这是开发机,MySQL 只用最少内存;Server Machine 表示和其他程序共同占用资源;Dedicated MySQL Server Machine 意味着这台机器专门跑 MySQL,内存可以多分配。实验机上选 Developer Machine 足够,别选 Dedicated,否则它会在低配机器上分配较多内存,反而拖慢系统。

Database Usage 里,Multifunctional Database 会同时支持 InnoDB 和 MyISAM;Transactional Database Only 只支持 InnoDB;Non-Transactional Database Only 只支持 MyISAM。教学实验经常两种引擎都涉及,我一般选 Multifunctional。如果你明确知道只用 InnoDB,选第二项会让配置更聚焦。

InnoDB Tablespace Settings 和 Concurrent Connections 两步新手通常直接默认。5.5 默认的 InnoDB 表空间文件是单个 ibdata1,路径不用改。并发数如果选 Decision Support,数据库会倾向于更少的并发;OLTP 则相反;Manual Setting 里默认给的并发数对单人学习足够了。

Networking Options 这一步要勾选 Enable TCP/IP Networking,端口保持 3306。“Add firewall exception for this port”建议勾上,否则后面用图形客户端从另一台电脑连接时,Windows 防火墙会直接拦掉。旁边有 Strict Mode 复选框,我建议新手先不勾,等建表遇到插入报错再说。严格模式打开后,任何一条不合法的 SQL 都会报错,你还没弄清规则时很容易被报错吓住。

Character Set 建议选第一项 Best Support For Multilingualism,它对应 UTF-8。选对字符集是后面中文不乱码的关键。很多老教程会推荐 Manual Selected 后手选 utf8,其实效果一样。

Windows Options 这一步,Install As Windows Service 勾上,服务名默认 MySQL;Launch the MySQL Server automatically 勾上就是开机自启。Include Bin Directory in Windows PATH 要留意:如果这台机器只装 5.5,勾上方便后面在任意 CMD 里敲 mysql;如果之后还想装 5.7 或 8.0,建议不要勾,不然 mysql 命令到底指向哪一版会成为麻烦。

最后设置 root 密码。不要设成空密码,实验机至少也要有一个你能记住的密码。下面的 Create An Anonymous Account 千万不要勾,匿名账户对刚学数据库的人来说就是一个权限大坑,出现权限相关的奇怪问题多半和它有关。

3.2 免安装 ZIP 版的手动配置

ZIP 版步骤其实不多,但每一步都要清楚。首先把压缩包解压到 D:\MySQL\mysql-5.5.62-winx64,然后在 bin 的同级目录下新建 my.ini。注意 5.5 在 Windows 下的配置文件名习惯用 my.ini,放在 basedir 根目录即可,MySQL 启动时会按默认搜索顺序找到它。

ZIP 版第一次启动前不需要像 MySQL 5.7 那样执行 mysqld --initialize,这是 5.5 很反直觉的地方。你直接注册服务并启动,mysqld 会在 data 目录不存在时自动创建系统库和系统表。你只需要先建好 my.ini 中 datadir 路径对应的目录,再用管理员 CMD 执行下面三条命令:

cd /d D:\MySQL\mysql-5.5.62-winx64\bin mysqld --install MySQL net start MySQL

第一步进入 bin 目录,第二步把 mysqld 注册成名叫 MySQL 的 Windows 服务,第三步启动服务。如果提示 Install/Remove of the Service Denied,说明当前 CMD 没有管理员权限,右键以管理员身份运行重来。如果想强制指定配置文件,--defaults-file 参数要放在整条命令最前面,比如mysqld --defaults-file=D:\MySQL\mysql-5.5.62-winx64\my.ini --install MySQL,否则这个参数可能不生效。

ZIP 版此时 root 是没有密码的,直接 mysql -uroot 能进。用下面的命令补一个密码:

mysql -uroot

然后在 mysql 提示符里执行:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的密码'); FLUSH PRIVILEGES;

也可以直接用mysqladmin -u root -p password "新密码",但前者更容易理解当前在做什么。

3.3 my.ini 关键参数说明

这里给一份常用的 5.5 my.ini 示例,手工配置时可以直接抄:

[mysql] default-character-set=utf8 [mysqld] basedir=D:/MySQL/mysql-5.5.62-winx64 datadir=D:/MySQL/mysql-5.5.62-winx64/data port=3306 character-set-server=utf8 default-storage-engine=InnoDB max_connections=100 wait_timeout=300 interactive_timeout=300 skip-name-resolve

参数含义逐个说清楚。basedir 和 datadir 必须正确对应,等号两边不要有空格,路径里用正斜杠可以避免转义问题;character-set-server 和 [mysql] 段的 default-character-set 配合,保证服务端和命令行客户端都是 utf8;default-storage-engine 建议 InnoDB,5.5 时代 MyISAM 还在用,但 InnoDB 的事务和行级锁对学习更重要。

max_connections 100 在实验环境足够。生产环境并发高才需要调大,调太大会占内存。wait_timeout 和 interactive_timeout 控制空闲连接超时,默认 8 小时,设成 300 秒适合连接池场景,防止连接池拿到被服务端断掉的连接。skip-name-resolve 让 MySQL 不做反向 DNS 解析,不写这一行时,远程 IP 连接会尝试解析主机名,DNS 慢的情况下一登录要卡好几秒。

修改 my.ini 后必须重启服务生效:net stop MySQL && net start MySQL。重启前先确认没有程序正连着,否则连接会直接断开。

4. 安装后必须做的连接验证

4.1 命令行建库建表实操

装完以后第一件事,用命令行验证基本功能。打开 CMD,输入mysql -uroot -p,回车后输入密码。如果提示 ERROR 2003 (HY000),说明服务没起来或端口不对;如果提示 Access denied,说明密码错了。2003 和 1045 这两个报错在实验报告里出现频率极高,记住它们能省去不少排查时间。

进来后先看字符集相关的变量:

SHOW VARIABLES LIKE 'character_set_%';

如果 character_set_server 是 utf8,说明 my.ini 生效了。如果还是 latin1,多半是你改的 my.ini 没被读取,或者改完没重启服务。

然后建库建表。下面的语句里故意把 age 字段设置默认值为 0,这是一个很常见的需求——建表时希望某个数字列没填值就是 0,而不是 NULL:

CREATE DATABASE IF NOT EXISTS testdb DEFAULT CHARACTER SET utf8; USE testdb; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO users(name, age) VALUES ('张三', 18); INSERT INTO users(name) VALUES ('李四'); SELECT * FROM users;

第二条 INSERT 没有给 age,查询出来就是 0,这就是 DEFAULT 0 的作用。注意 5.5 不允许一个表里有多个 TIMESTAMP 列默认当前时间,新版 5.7/8.0 放宽了,所以实验代码尽量只用一个 created_at。中文能正常插入和查询,就说明字符集、引擎、自增主键这些基础点都通了。

如果你看到终端里中文变成问号,解决办法是退出后用mysql --default-character-set=utf8 -uroot -p重连,大多数情况能好;根治方法还是 5.4 节里的服务端字符集设置。

4.2 图形客户端连接与常见连接报错

命令行虽然够用,但做实验时图形界面往往更直观。常见客户端有 Navicat、SQLyog、DBeaver,以及官方 MySQL Workbench。用 Navicat 连接 MySQL 5.5 时,连接名随便填,主机 127.0.0.1,端口 3306,用户名 root,密码填安装时设置的,然后点测试连接。能连上说明 TCP/IP 监听、用户权限、端口都正常。

如果测试连接一直提示 10061 Connect refused,一般是 MySQL 服务没监听端口。先用netstat -ano | findstr :3306看有没有 mysqld 在监听;没有就检查服务是否启动,启动失败就去看 5.1 节的日志排查。如果提示 Access denied,说明 root 密码不对或者用户表的认证方式和客户端不匹配。5.5 默认是 mysql_native_password,新版客户端基本都能兼容;真遇到不兼容,重新执行SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码')后再试。

关于客户端软件,我多说一句:请走官网渠道。数据库客户端这个领域,网上很多来路不明的所谓激活版更新包,可能带恶意脚本,实验机上没必要冒这个险。官方试用版完成这门课完全够用,或者直接用开源 DBeaver,功能不比商业软件差多少。

4.3 root 远程访问的授权与风险控制

默认情况下,root 只能在本机 localhost 登录。如果你需要在局域网里用另一台 Windows 机器连接这台数据库,就要放开 root 远程权限。5.5 的授权语法和 8.0 略有差别:8.0 里必须先 CREATE USER 再 GRANT,而 5.5 支持在 GRANT 语句里直接带 IDENTIFIED BY,一条命令就把用户建了。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION; FLUSH PRIVILEGES;

这一句的意思是:允许 root 从任意主机使用你的密码登录,并且拥有所有库所有表的全部权限。注意,这是实验环境里为了方便,生产环境千万别这么干。更安全的做法是新建专用账号,只授权某个库:

CREATE USER 'dbuser'@'%' IDENTIFIED BY '密码'; GRANT ALL ON testdb.* TO 'dbuser'@'%'; FLUSH PRIVILEGES;

授权后记得在服务器的 Windows 防火墙里放行 3306 端口,否则局域网连接一样超时。如果只在本机用,不需要做远程授权,root@localhost 一直够用。

5. 常见问题与排查经验实录

5.1 1067 服务启动失败的排查

在 Windows 上装 MySQL 5.5,遇到最多的就是 1067 错误:“Windows 不能在本地计算机启动 MySQL 服务,错误 1067:进程意外终止。”这个提示看起来吓人,其实真实原因都写在错误日志里。默认日志位置是 datadir 目录下,文件名是主机名加 .err,例如 DESKTOP-ABC.err。用记事本打开,直接翻最后一个 ERROR 行。

最常见的三类错误。第一,my.ini 路径写错,日志会报找不到 basedir/datadir,排查时检查等号路径是否存在且没有多余空格。第二,端口被其他程序占用,日志会报 Bind on TCP/IP port: Address already in use。第三,my.ini 是 UTF-8 编码且带 BOM,日志会报 unknown option 或者解析异常,解决方法是把 my.ini 另存为 ANSI 编码,或者用记事本重新建一份。

另外,如果 5.5 装在一台内存很小的机器上,并且之前选了 Dedicated MySQL Server Machine,InnoDB 初始化可能因为内存不足失败。这种时候把 innodb_buffer_pool_size 调小,例如 32M,再重启。排查顺序我建议固定成:先看 .err 日志,再检查端口,最后验证配置文件编码。按这个顺序走,九成 1067 能快速解决。

5.2 3306 端口被占用怎么办

前面说过安装前检查端口。这里给具体操作。打开管理员 CMD,执行:

netstat -ano | findstr :3306

如果输出里有 TCP 0.0.0.0:3306 之类的行,记下最后一列的 PID,比如 12345,再查这个进程是谁:

tasklist | findstr 12345

如果这个进程是多余的,直接结束掉:

taskkill /F /PID 12345

如果占 3306 的本来就是一个旧 MySQL 服务,不要 taskkill,去服务管理器停掉对应服务,防止数据文件损坏。如果 3306 被某个不想关的程序占着,那就改 MySQL 的端口,在 my.ini 的 [mysqld] 段把 port=3306 改成 3307,改完重启服务,以后连接时端口号一并改成 3307。

Windows 上“关闭端口号”这个说法其实不太准确。端口本身不是一个独立服务,你要么关掉占用它的进程,要么让目标软件换端口。我见过有人为了释放 3306 把整个防火墙关了,这是没必要的,定位到具体 PID 精准处理就行。

5.3 忘记 root 密码的应急恢复

忘了 root 密码,尤其是课程实验开始前忘了,不用重装,修改配置文件就能恢复。第一步,停 MySQL 服务,管理员 CMD 执行net stop MySQL,如果服务没在运行就跳过。第二步,在 my.ini 的 [mysqld] 段最后加一行skip-grant-tables。第三步,net start MySQL重新启动。第四步,mysql -uroot直接免密进入,因为跳过授权表后 MySQL 不再校验用户密码。第五步,执行:

USE mysql; UPDATE user SET Password=PASSWORD('新密码') WHERE User='root'; FLUSH PRIVILEGES;

注意:5.5 修改 root 密码用的字段是 Password,后面是 PASSWORD() 函数,不是直接把明文填进去。新版本 8.0 用 authentication_string 字段,别混了。修完以后,把 my.ini 里的 skip-grant-tables 删掉或注释掉,再重启一次服务,然后用新密码登录。

这里有个容易忽略的坑:skip-grant-tables 模式下,所有账户都免密并且拥有全部权限,此时任何能连到 MySQL 端口的人都能进去。所以这个模式绝不能长期开着,恢复完立刻去掉并重启。如果是在开放网络环境里操作,临时加一条 bind-address=127.0.0.1 会更稳。

5.4 中文乱码的根治方案

中文乱码几乎伴随整个 5.5 时代,而且往往是安装时字符集随手选了默认 latin1,后面建库建表就全乱。乱码的本质是字符集不一致:客户端发送的是 UTF-8,服务端以为是 latin1,存进去就是乱码;读取时又以另一种编码返回,就彻底看不明白了。

根治思路分两层。第一层,服务端设置成 utf8,在 my.ini 的 [mysqld] 下写 character-set-server=utf8,同时 [mysql] 段写 default-character-set=utf8,重启服务。第二层,所有连接都不绕过客户端字符集。命令行连接用mysql --default-character-set=utf8 -uroot -p;JDBC 连接串加 useUnicode=true&characterEncoding=utf8;图形客户端在连接属性里把编码改成 utf8。

如果表已经建好并且数据是乱的,实验数据可以直接重建:执行ALTER TABLE users CONVERT TO CHARACTER SET utf8可以把已有列转换,但如果数据在 latin1 下已经存成乱码,转了也未必能还原。最省事的做法是删表重建,插入新数据,不折腾老数据。生产环境的恢复另说,那要找备份和 binlog,普通实验别冒这个险。

还要知道一点:MySQL 5.5 对 utf8mb4 的支持不完善,表情符号或生僻字在这版里会很难办。这其实是很多人做完 5.5 实验后选择升级到 5.7/8.0 的真实原因之一。

5.5 新客户端报 SSL 连接错误怎么处理

MySQL 5.5 时代,SSL 不是默认强制使用的。你拿很新的客户端或者中间件去连老库,可能报 SSL connection error,因为新版安全策略默认要求 SSL 加密,而 5.5 默认没启用,两边谈不拢就会断。

处理方式按客户端来。如果是新版 mysql 命令行,可以加--ssl-mode=DISABLED参数;如果是 Java 的 JDBC 连接,连接串里加 useSSL=false;如果是 Navicat 这类图形工具,连接设置里去掉“使用 SSL”相关选项,直接走明文协议。实验局域网里明文传输问题不大,生产环境当然还是要配正式证书开 SSL。

如果你的应用确实要求加密连接,5.5 也可以配置 SSL,但步骤比 5.7 繁琐,需要生成证书、在 my.ini 配置 ssl-ca/ssl-cert 参数,一般实验没必要走这条路。遇到报错,先判断是服务端没开 SSL,还是客户端的 TLS 版本不支持老库自带的协议,再对症处理。

5.6 连接池超时与 wait_timeout 调整

这门课如果用 Java 写数据库连接池,比如 Apache DBCP 或 C3P0,可能会遇到一个诡异的现象:程序跑一段时间后,第一次拿连接就报 Communications link failure 或者 Connection is not available, request timed out。原因多半是 MySQL 服务端把空闲连接断掉了。

MySQL 5.5 默认 wait_timeout 是 8 小时。如果连接池里有一根连接,拿到后四五个小时都没有查询,服务端可能已经断开它,池子不知道,下一次取出来直接用就失败。解决办法有两个方向。一是调大服务端的 wait_timeout,在 my.ini 里改成 86400 甚至更大,改完重启生效;二是让连接池定期测试连接有效性,DBCP 可以设置 testWhileIdle=true 和 validationQuery=SELECT 1,这样不用改数据库参数。

常用参数整理成表,方便直接抄:

参数含义建议值
wait_timeout非交互连接空闲超时300 或更大
interactive_timeout交互式连接空闲超时300 或更大
max_connections最大连接数100 起
testWhileIdle连接池空闲时检查连接true
validationQuery连接池验证查询SELECT 1

300 秒适合大多数实验。如果你希望程序长时间挂机不掉线,直接把 wait_timeout 调到 86400。改完记得重启服务,或者用SET GLOBAL wait_timeout=86400临时修改,但重启后仍会回到 my.ini 里的值。

6. 从卸载重装到后续升级的注意事项

6.1 做到“干净卸载”的几个关键点

很多同学第一次装失败后,直接把安装目录删掉重新装,结果服务名冲突、配置文件残留,问题越来越多。MySQL on Windows 的卸载要按几个层次清:先是服务和进程,再是文件,最后看注册表。

第一步,以管理员身份打开 CMD,停服务并删除服务:

net stop MySQL sc delete MySQL

如果服务名不是 MySQL,先 net start 看一下实际名称。第二步,删除 MySQL 安装目录以及残留数据目录。5.5 的 MSI 安装版,数据文件经常不在安装目录,而在 C:\ProgramData\MySQL\MySQL Server 5.5\ 下,这个文件夹也要删。第三步,按 Win+R 输入 regedit 打开注册表,找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL,如果存在就删除。sc delete 通常已经移除服务项,但偶尔有残留,这一步是补充保险。

最后,检查 C:\Program Files (x86)\MySQL 或 C:\Program Files\MySQL 下有没有旧组件。全部清干净后重新安装,基本不会出现“MySQL 服务名已存在”的提示。

6.2 老版本实验环境的后续升级建议

5.5 的定位是教学和老项目兼容,不建议把它当长期生产库。实验做完后可以考虑往 5.7 或 8.0 走。升级前用 mysqldump 全量备份,5.5 自带的导出工具在 bin 目录下,执行:

mysqldump -uroot -p --all-databases > C:\backup\all_db_5.5.sql

导出文件是纯 SQL 文本,5.5 生成的文件拿到 5.7/8.0 里可以导入,但要注意两点。一是老库里的 utf8 在 8.0 下会涉及 utf8mb4 的变化,表情符合和生僻字存储行为不同;二是 sql_mode 不同,老代码里常见的宽松写法在新版本默认严格模式下可能报错。经验做法是导入后跑一次 mysql_upgrade,让系统表和新版本对齐,再逐一验证业务 SQL。

如果连 5.5 都只是临时用一次,更简单的做法是直接装 8.0 版本库,再导入同样的数据。但要清楚,5.7/8.0 的安装步骤和 5.5 有区别,尤其多了 --initialize-insecure 初始化步骤,没有这一步服务也起不来。这些差异后面有机会再单独写。

我个人在实际操作中的体会是,把整套流程走完,你会发现 MySQL 5.5 在 Windows 上能不能装好,不取决于点鼠标快不快,而取决于三件事:安装目录干净不干净、my.ini 里字符集和路径对不对、日志文件有没有看。我最开始被 1067 卡了两天,后来养成的习惯是遇到问题先翻 .err 日志,不看日志瞎改配置只会越改越乱。希望这篇文章能帮你省下那两天的时间。实验做通了,建议顺手把 Linux 版装法也试试,服务器环境终究和 Windows 有差异。

返回列表