恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Windows下MySQL 5.7手动部署全攻略:从my.ini配置到服务启动问题排查
首页
资讯中心
/
Windows下MySQL 5.7手动部署全攻略:从my.ini配置到服务启动问题排查
Windows下MySQL 5.7手动部署全攻略:从my.ini配置到服务启动问题排查
发布时间:2026/9/18 10:36:34
说实话Windows 上安装 MySQL 5.7 这件事被网上的教程讲得玄乎其玄动不动就“超详细教程”结果一打开全是截图堆砌关键参数一笔带过。我刚入行那会儿照着教程装了三次三次都在启动服务那一步翻车最后靠翻英文论坛才搞明白是配置文件路径里的斜杠出了问题。这活儿本身不难难的是没人把原理讲清楚。这篇我就不整虚的了直接讲清楚在 Windows 环境下手动部署 MySQL 5.7 的完整逻辑从下载哪个文件、配置文件里每一行是干嘛的到服务起不来怎么排查全给你捋一遍。不管你之前是不是被各种教程坑过按我这个思路走一遍基本能一次过。这篇文章适合这些人看需要在本地 Windows 机器上跑老项目的开发、刚接触后端想自己搭环境的学生以及被公司内网老系统绑着必须用 5.7 的运维。如果你之前用过 MySQL 但从来没手动配置过这篇文章也能帮你把很多“知其然不知其所以然”的点补上。1. 动手之前先把这几件事想明白1.1 为什么都 2024 年了还在用 MySQL 5.7这个问题几乎每次聊安装都会遇到。MySQL 8.0 都出来这么多年了新项目谁还会选 5.7但现实是存量市场远比我们想象的大。我在实际接触过的团队里至少有一半的项目还跑在 5.7 上。原因集中在三点生态兼容性。很多老系统用的 ORM 框架、第三方连接池、甚至公司自研的数据库中间件都是基于 5.x 时代的协议做的。8.0 默认的caching_sha2_password认证插件会让一些旧版客户端直接连不上报2058或者Authentication plugin caching_sha2_password cannot be loaded之类的错。虽然 8.0 有办法改回mysql_native_password但对于不懂底层的人来说这已经是劝退级别的坑了。服务器资源占用。5.7 在 1 核 2G 的小机器上就能跑得比较舒服8.0 优化器更复杂内存占用明显更高。我自己测试过同样空载情况下8.0 的常驻内存比 5.7 多了差不多 30%。学习成本与团队惯性。团队里大多数人已经写了多年 5.7 的 SQL8.0 里一些语法检查和默认行为的改变比如utf8mb4成为默认字符集、窗口函数等新特性虽然从技术上说是进步但对维护老项目的人来说反而容易引入意料之外的问题。需要说明的是MySQL 5.7 官方已经在 2023 年 10 月停止更新了不再有安全补丁。如果你是在生产环境跑公网服务我建议你还是认真评估升级 8.0 或者迁移到国产数据库。但如果只是本地开发、内网老项目、学习用5.7 的轻量和稳定依然是很大的优势。这篇文章教的安装方法不会因为你以后换 8.0 就白学——两个版本的目录结构、配置思路、服务管理方式基本是相通的。1.2 MSI 安装器 vs ZIP 解压版选哪个下载 MySQL 5.7 的时候官方会给两个选择MSI 安装包和解压版 ZIP。我强烈建议你选 ZIP原因不只是“超详细教程都这么教”而是它确实更适合理解 MySQL 的运行机制。MSI 版是图形化安装向导点几下下一步就完事看起来很省心。但它有几个问题默认安装目录带空格C:\Program Files\MySQL\MySQL Server 5.7虽然绝大多数情况下没问题但某些老脚本写到路径时忘了加引号就会莫名其妙报错。MSI 会顺手装一堆你可能永远用不到的东西比如 MySQL Notifier、MySQL for Visual Studio 等等。这些东西占空间不说还有可能影响系统环境变量。出了问题很难排查。因为配置是安装向导帮你生成的你根本不知道my.ini里到底写了什么日志输出到哪了导致出了问题只能卸载重装。而 ZIP 解压版是纯绿色模式配置文件自己写服务手动注册数据目录自己指定。整个过程完全透明没有任何黑盒操作。虽然看起来步骤多一点但每做一步都知道自己在干什么后面遇到问题也有据可查。我后面讲的所有内容都基于 ZIP 解压版这条路走通了你对 MySQL 的理解会上一个台阶。1.3 安装前清理旧版本、残留服务与端口占用这是最容易忽略却最致命的一步。很多人安装 5.7 失败不是新装的出了问题而是没把旧的清理干净。先说残留服务。以前装过 MySQL 并且注册成 Windows 服务的话即使你卸载了软件服务可能还残留在系统里。打开命令行执行sc query type service state all | findstr mysql不区分大小写能看到一堆以 mysql 开头的服务名。如果直接用默认名字MySQL57注册新服务很可能提示服务已存在或者注册成功但启动时报错。遇到残留服务用管理员权限执行sc delete 服务名删掉。再说数据目录。如果之前用 ZIP 版安装过C 盘下可能残留了原来的data文件夹。新版本初始化数据目录时会往data里写系统库文件如果里面已经有内容会直接初始化失败报错信息类似于[ERROR] --initialize specified but the data directory has files in it。解决办法很简单把旧的data目录整个删掉或者像我一样把数据目录指定到一个全新路径。最后是端口占用。MySQL 默认端口 3306如果你机器上装了别的数据库比如 MariaDB或者某些软件自带 MySQL 组件比如某些 CMS 套件3306 可能已经被占了。安装前先执行netstat -ano | findstr 3306看一下如果看到 LISTENING 状态的记录说明端口被占用了。要么关掉那个程序要么后面配置时把端口改掉比如 3307。2. 下载与校验选对安装包后面少走弯路2.1 官方下载地址与版本命名规则下载 MySQL 5.7 一定要去官方 archive 页面。直接搜“MySQL 5.7 download”排在前面的很多是第三方下载站打包的东西可能捆绑了广告、修改过文件安全性根本无法保证。官方地址是https://downloads.mysql.com/archives/installer/或者https://dev.mysql.com/downloads/mysql/5.7.html选 Windows 平台即可。版本我建议选 5.7.44这是 5.7 系列的最后一个版本修复了之前所有已知 bug。下载页面里会看到两种压缩包mysql-5.7.44-winx64.zip64 位系统用的现在 99% 的机器都是这个。mysql-5.7.44-win32.zip32 位系统用的基本可以忽略了。如果你的机器是 ARM 架构比如部分 Surface 或新 Mac 上跑的 Windows 虚拟机官方没有提供 ARM 版 MySQL 5.7这时候只能装 8.0或者用 Docker 方案。这个情况不太常见但遇到了至少知道是怎么回事。选 ZIP Archive 格式而不是 MSI原因前面说过。ZIP 包一般 200 多 MB下载完成后解压到你想放的位置。我放在D:\mysql-5.7.44-winx64如果你放 C 盘建议放C:\mysql5737这种短路径不要带空格和中文避免后面的坑。2.2 用 MD5 校验文件完整性下载完成后强烈建议校验一下文件是否完整。官方页面每个文件后面都附有 MD5 校验值比如mysql-5.7.44-winx64.zip的 MD5 是多少复制下来。然后打开 PowerShell进到文件所在目录执行Get-FileHash .\mysql-5.7.44-winx64.zip -Algorithm MD5命令行界面下对比哈希值。如果一致说明文件下载完整如果不一致多半是下载过程出了问题重新下载千万别用。这一步看着麻烦但在我经历中至少有两次遇到下载文件损坏。损坏的压缩包解压时可能能解压出来但某些关键 DLL 文件是坏的安装时根本察觉不到等到初始化数据库时才报错那时候排查会绕很大一个圈子。所以宁可在最开始多花一分钟也别在后来浪费一小时。2.3 版本选型与 8.0、MariaDB 的区分另外要提一句MySQL 5.7 和 MariaDB 不是同一个东西下载时别混了。MariaDB 是 MySQL 分支出来的社区版本早期兼容性确实好但后来两者差异越来越大很多ALTER语句行为、系统表结构都不一样。如果你是想照着这篇文章里的my.ini配置一定认准纯正的 MySQL 5.7别下成 MariaDB 了。3. 配置 my.ini安装成败的关键一步3.1 为什么必须手动写配置文件MySQL 解压完直接运行mysqld不是不能启动但启动后用的是内置默认配置数据目录在当前目录下、字符集是原生的latin1、root 密码为空、不记录错误日志……这样跑起来你还得各种补救。更麻烦的是如果你直接在解压目录下运行了 mysqld 启动过一次程序会在当前目录下自动创建一个data文件夹。后面你再想用自己指定的datadir初始化又会撞上“目录非空”的报错。所以我的建议是解压完先别急着运行任何 .exe第一步就是先把my.ini写好并且把data目录规划好。MySQL 在 Windows 下加载配置文件的顺序是C:\Windows\my.ini、C:\my.ini、安装目录下的my.ini。为了方便管理和保证“只受这一个文件控制”我习惯把所有配置都写到解压目录下的my.ini里并且后面注册服务、启动服务时都用--defaults-file参数指定路径绕开系统盘的干扰。3.2 保姆级 my.ini 参数逐行解读下面这份是我实测稳定运行多年的配置你可以直接复制后按需修改。注意文件保存为 ANSI 或 UTF-8无 BOM编码都可以关键是不要用带 BOM 的 UTF-8否则某些版本读取会报错。推荐直接用 Notepad 或 VS Code 写。[client] port3306 default-character-setutf8mb4 [mysql] default-character-setutf8mb4 [mysqld] # 安装目录 basedirD:/mysql-5.7.44-winx64 # 数据目录 datadirD:/mysql-5.7.44-winx64/data # 端口 port3306 # 服务器字符集 character-set-serverutf8mb4 collation-serverutf8mb4_general_ci # 存储引擎 default-storage-engineINNODB # 本地连接跳过 DNS 反解析 skip-name-resolve # 表名存储为小写 lower_case_table_names1 # SQL 模式 sql-modeNO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # 最大连接数 max_connections1000 # InnoDB 缓冲池大小 innodb_buffer_pool_size512M # 连接超时 wait_timeout600 max_allowed_packet16M # 日志 log-errorD:/mysql-5.7.44-winx64/data/mysql.err slow_query_log1 slow_query_log_fileD:/mysql-5.7.44-winx64/data/mysql-slow.log long_query_time2 # 默认时区 default-time-zone8:00逐行说几个关键点basedir和datadir这两个路径必须用正斜杠/不要用 Windows 的\。因为\在配置解析里会被当成转义符导致路径解析直接失败。这个坑我当年踩过服务启动报错后日志里显示路径是“D:mysql-...”就是反斜杠被吃掉了。另外路径里不要有空格和中文。character-set-serverutf8mb4和collation-serverutf8mb4_general_ci这一步是彻底解决中文乱码的关键。MySQL 5.7 的默认字符集是latin1如果你不在服务端指定建表时不写CHARSET就会默认用 latin1存中文变成 ????这是无数人吐槽“MySQL 乱码”的根源。utf8mb4是真正的四字节 UTF-8能存 emoji 和生僻字utf8在 MySQL 里是utf8mb3的别名只能存三字节。排序规则我选了general_ci它比unicode_ci快且大小写不敏感ci是 case insensitive。如果你的业务对重音符号排序有要求再换unicode_ci。lower_case_table_names1让表名统一转成小写存储。Windows 文件系统本身不区分大小写如果数据库里既有User表又有user表可能出现混乱。设为 1 后建表语句里写User实际存储的表名也会变成user避免查询时大小写不一致导致表找不到。注意这个参数要在初始化之前设置否则改了不生效、还得重建数据目录。skip-name-resolve跳过客户端 IP 的反向 DNS 解析。默认情况下 MySQL 会根据客户端 IP 反查主机名来做权限匹配如果 DNS 不可用每次连接都会延迟好几秒。本地开发建议开启但在做主从复制或需要按主机名授权的场景要谨慎。sql-modeNO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESNO_ENGINE_SUBSTITUTION表示建表时用了不存在的存储引擎就直接报错而不是悄悄换成默认引擎STRICT_TRANS_TABLES表示事务表在写入数据时如果违反约束直接报错而不是截断或警告。不要照搬网上一堆老教程里复制的一长串 sql-mode特别是包含ONLY_FULL_GROUP_BY的——它会要求SELECT后面的非聚合列必须都出现在GROUP BY里。老项目如果写了很多不规范的分组 SQL加上它分分钟跑不起来。我的方案是去掉了它保底能兼容旧 SQL。innodb_buffer_pool_size512M这是 InnoDB 最重要的性能参数决定 InnoDB 缓存数据页和索引的内存大小。机器内存大可以调到 1G~2G内存小的调到 256M。如果设得太小频繁磁盘 IO跑起来卡设得太大系统内存吃紧MySQL 可能起不来。具体经验不超过物理内存的 70%留点余量给操作系统和其他程序。3.3 配置中容易踩的几个隐蔽坑文件编码问题。如果你用记事本保存my.ini默认编码是 ANSI没问题。但如果用 VS Code 等工具保存成 UTF-8 with BOMMySQL 读取时可能报错File contains Unicode characters, and this MySQL build cannot process them。解决办法用 VS Code 保存时选择 “UTF-8” 编码右下角编码那里选择 Save with Encoding - UTF-8。datadir 里已有文件。如果你之前跑过一次 mysqlddata 目录已经生成了一堆系统库文件再初始化会报错。解决办法初始化之前确认 datadir 不存在或者是空目录。端口被别的服务占用。配置里指定的端口如果已经被占服务启动会立刻失败。报错类似[ERROR] Cant start server: Bind on TCP/IP port: No such file or directory。用netstat -ano | findstr 3306查看占用情况。改了配置不生效。很多人在运行中改my.ini然后执行mysqladmin reload以为就生效了。其实port、character-set-server、innodb_buffer_pool_size这类参数必须重启服务才生效。检查有没有生效用SHOW VARIABLES LIKE character_set_server;这种命令看实际值。4. 初始化、启动服务与环境变量完整实操流程4.1 初始化数据目录为什么选 initialize-insecure写完my.ini接下来就是初始化。进入解压目录的 bin 文件夹按住 Shift 右键打开 PowerShell先验证一下 mysqld 能不能正常读取配置mysqld --defaults-fileD:/mysql-5.7.44-winx64/my.ini --initialize-insecure这里我刻意用了--initialize-insecure而不是--initialize。两者的区别在于--initialize会生成一个随机密码的 root 用户密码写在错误日志里。新手找不到日志位置或者复制密码时容易出错卡在这一步的不少。--initialize-insecure生成的 root 用户密码为空。虽然看起来不安全但它只是本地初始状态后续我们马上会登录改密码所以这点风险完全可控而且省去了一堆麻烦。初始化过程正常是没有任何输出的或是只有几行提示。执行完之后去datadir目录看看如果生成了mysql、sys、performance_schema这些文件夹说明初始化成功。同时datadir下会生成一个xxx.err错误日志文件初始化中如果出问题详细原因都在里面。如果你运气不好初始化报错了别急着搜报错原文。先打开错误日志文件看最后几行绝大多数情况下原因已经写得很明确了。我见过最多的是两类路径配置错误和 datadir 权限不足。权限不足的话右键解压目录 - 属性 - 安全 - 给 Users 组添加完全控制权限。4.2 注册 Windows 服务与设置开机自启初始化完成后就可以把 MySQL 注册成 Windows 服务了。这一步的目的不只是让你不用每次手动敲mysqld更关键的是可以让 MySQL 开机自启、异常崩溃后自动重启。在管理员权限的 PowerShell 或 CMD 里执行mysqld --install MySQL57 --defaults-fileD:/mysql-5.7.44-winx64/my.ini这里MySQL57是我给服务起的名字可以根据机器上是否有多套 MySQL 实例来自定义比如MySQL3326。--defaults-file参数等于把配置文件路径固化到服务注册表里以后启动服务时它会自动加载这个配置。看到Service successfully installed提示就说明注册成功。然后启动服务net start MySQL57正常情况屏幕上会显示“服务已经启动成功”。如果这一步报错别慌99% 的安装问题都集中在这一步后面我有单独的章节帮你排查。另外如果你的 Windows 服务列表里已经有MySQL或其他残留服务--install时会提示服务已存在。先去services.msc里把旧服务删掉或者用sc delete MySQL57删掉再说装的事。4.3 配置环境变量 PATH这一步不是必需的但强烈建议做。配置环境变量后你可以在任意目录下敲mysql -uroot -p不需要每次都 cd 到D:\mysql-5.7.44-winx64\bin。操作步骤右键“此电脑” - 属性 - 高级系统设置 - 环境变量 - 在“系统变量”里找到Path编辑新增一行D:\mysql-5.7.44-winx64\bin。注意这里用反斜杠没问题因为是 Windows 路径语法。确定保存后重新打开PowerShell新开窗口才会加载新环境变量验证一下mysql --version能输出版本号说明环境变量配置成功。4.4 登录数据库与安全初始化改密码、开远程服务启动成功后在任意终端进入 MySQLmysql -uroot -p因为初始密码是空的提示输入密码时直接回车就能进。此时第一件事就是改 root 密码ALTER USER rootlocalhost IDENTIFIED BY 你的新密码;注意 MySQL 5.7 里ALTER USER语法是可以用的。如果你习惯老写法SET PASSWORD PASSWORD(新密码)也可以但ALTER USER更标准我推荐用它。改完密码后执行FLUSH PRIVILEGES;让权限立即生效。然后重新登录确认密码没问题。关于远程访问我建议遵循最小权限原则。生产环境绝对不要直接开放 root 远程登录。正确的做法是创建一个专用账号只授权需要的库CREATE USER appuser% IDENTIFIED BY app_password; GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO appuser%; FLUSH PRIVILEGES;%表示任意主机都能连如果你只想让某个 IP 连把%改成具体 IP 更安全。另外如果用 Navicat 等图形化工具连不上先检查服务器的防火墙是否放行了 3306 端口以及my.ini里的skip-name-resolve是否影响了账号匹配。5.7 默认的认证插件是mysql_native_passwordNavicat 连起来没问题老工具连 8.0 的坑在 5.7 上不存在这也是很多人愿意留在 5.7 的原因之一。5. 安装后的检查与核心问题排查5.1 字符集验证保证从服务端到客户端全程 utf8mb4装好之后别急着建表先验证一遍字符集配置是否生效。进入 mysql 命令行或图形化工具执行SHOW VARIABLES LIKE character_set_%; SHOW VARIABLES LIKE collation_%;看关键几项character_set_server应该是utf8mb4character_set_database应该是utf8mb4collation_server应该是utf8mb4_general_ci如果character_set_server还是 latin1说明配置文件没生效。请检查你的 mysqld 服务是不是用了你写的那个my.ini比如可能系统还加载了C:\ProgramData\MySQL\MySQL Server 5.7\my.ini这种旧配置把那个文件删掉或改名重启服务再验证。另外光服务端设成 utf8mb4 还不够你用来连接数据库的客户端或程序连接串也要显式指定字符集。JDBC 连接串里加characterEncodingutf8PHP 里SET NAMES utf8mb4Navicat 连接属性里选utf8mb4这样才能保证全链路不乱码。5.2 端口与服务的状态检查启动完服务后用下面的命令确认端口监听状态netstat -ano | findstr 3306看到LISTENING状态且 PID 对应 mysqld 进程基本就说明服务正常。如果你想确认 MySQL 服务的更多信息在管理员终端执行sc qc MySQL57可以看到服务的可执行文件路径和启动参数确认它指向的是不是你的那套配置。5.3 服务启动失败问题速查表我把这些年帮人排查时遇到的高频问题整理成了表格安装时直接对着查现象常见原因排查与解决执行net start MySQL57提示服务无法启动且没有明确错误配置路径不对、数据目录未初始化查看datadir目录下的.err日志看最后 20 行确认basedir、datadir路径使用正斜杠服务启动后立即停止my.ini 中参数错误或端口被占用用 netstat -ano初始化时报data directory has files in itdatadir 目录不为空删掉 datadir 下的文件或换一个新目录重新初始化初始化时报Cannot create Windows service或Install/Remove of the Service Denied当前终端没有管理员权限退出右键“以管理员身份运行” PowerShell/CMD再执行 mysqld --install运行mysql命令提示“不是内部或外部命令”环境变量没配好检查Path变量是否包含 bin 目录重新打开终端再试客户端连接报Access denied for user rootlocalhost密码错误或 root 账号被限制确认登录 IP 和用户名如果忘记密码用后面的skip-grant-tables方法重置表名大小写导致找不到表lower_case_table_names初始化前没设置该参数必须在初始化前固定。改参数后需备份数据、删除 datadir、重新初始化再恢复数据中文写入报错或显示问号服务端或客户端字符集为 latin1服务端确认my.ini的character-set-server客户端加SET NAMES utf8mb45.4 忘记 root 密码的兜底方案这事我估计每个人都遇过。5.7 里最常用的处理套路是使用skip-grant-tables跳过权限认证。做法停止服务net stop MySQL57。编辑my.ini在[mysqld]段加一行skip-grant-tables。启动服务net start MySQL57。无密码登录mysql -uroot。执行FLUSH PRIVILEGES;让内存中的权限表生效。改密码ALTER USER rootlocalhost IDENTIFIED BY 新密码;立刻删除my.ini里的skip-grant-tables行。重启服务用新密码登录。注意这个方案开着的时候任何客户端都能跳过密码访问数据库非常危险。所以操作完必须立刻关掉重置机制。5.5 图形化客户端连接与常见报错装完 MySQL 之后大部分人第一件事就是用 Navicat、DBeaver 连接。如果连不上按顺序排查三件事服务器防火墙是否放行 3306 端口Windows 防火墙入站规则里加一条。用户是否授权了远程访问GRANT ... TO user%。连接串里有没有写对端口和字符集。如果之前用过 8.0再用 5.7可能会遇到 Navicat 提示1251 - Client does not support authentication protocol requested by server。这是因为 8.0 的默认认证插件变了但 5.7 默认还是mysql_native_password所以一般不会出这个错。真出了执行一句ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 密码;基本能解决。6. 实操中关于目录规划与服务管理的几条经验6.1 数据目录与安装目录分离我个人强烈建议把datadir独立出来比如放在D:\mysql_data而不是解压目录下的data子目录。原因有二第一解压目录是程序的安装位置升级版本时可能要整体替换如果你的数据也在解压目录里升级前还得先备份和搬移数据非常麻烦。数据目录独立后升级时只需要改basedir指向新版本datadir指向老数据目录中间不需要搬数据。MySQL 5.7 升级到 8.0 时尤其推荐这种做法。第二数据目录独立放在单独盘符便于做磁盘空间规划也不会因为 C 盘满了导致整个服务崩溃。6.2 多版本 MySQL 共存的思路如果你的机器上已经装了 MySQL 8.0或者想同时留着 8.0 和 5.7 做版本兼容测试别把它们注册成同一个服务名、用同一个端口。建议不同版本使用不同目录、不同端口3306 和 3307、不同服务名MySQL80 和 MySQL57。平时启动和停止用net start 服务名来控制互不干扰。这两个版本的连接串、工具链是通用的唯一的坑就是别让它们同时用同一个端口。6.3 服务启动方式的补充说明除了用net start MySQL57在 Windows 服务管理器services.msc里也能看到这个服务。如果想让它开机自启双击服务把启动类型改成“自动”。如果不想让它开机自启改成“手动”需要时用命令启动即可。服务一旦启动失败Windows 事件查看器eventvwr.msc的“Windows 日志 - 应用程序”里也可能有记录但信息一般不够详细。真正有价值的排查信息都在 MySQL 自己的.err日志里。这个日志在datadir目录下每次启动都会追加内容排查问题时优先看它。7. 安装完成后再用这几个命令自查一遍装好了心里还是没底把下面几条命令跑一遍输出正常就说明这套环境是健康的。-- 查看版本 SELECT VERSION(); -- 查看数据库列表 SHOW DATABASES; -- 查看关键变量 SHOW VARIABLES LIKE port; SHOW VARIABLES LIKE character_set_server; SHOW VARIABLES LIKE innodb_buffer_pool_size; -- 测试简单查询 SELECT 11 AS result; -- 测试中文读写 CREATE DATABASE IF NOT EXISTS testdb DEFAULT CHARACTER SET utf8mb4; USE testdb; CREATE TABLE t_hello (id INT, name VARCHAR(50)) DEFAULT CHARSETutf8mb4; INSERT INTO t_hello VALUES (1, 你好MySQL); SELECT * FROM t_hello;不出意外的话中文会正常显示查询无报错。如果这里乱码或者报错按第 5 节的字符集排查思路走一遍。我个人在装这套环境时最深的体会是所有安装类问题到最后几乎都归结为日志和配置两个词。不会看日志遇到问题就只能靠卸载重装碰运气配置不明白每个参数的含义出了问题也根本不知道怎么调整。所以你按照这篇文章操作时不用急着把所有参数调到最优先确保每个环节能跑通再基于业务情况调整配置就不会被所谓“超详细教程”里那些云里雾里的参数绕晕了。这一步走完后面不管是配主从复制、搞读写分离还是排查慢查询你都会发现基础扎实了做什么都快。