简介:这是一份面向开发者、数据库初学者与运维测试人员的 MySQL 8.0 免安装压缩包,主要解决本机快速部署、环境复用以及临时项目联调时反复安装配置的问题,可用于 SQL 练习、版本验证、轻量测试库搭建和多环境切换等场景,也适合需要便携数据库环境的读者。压缩包共 420 个文件,整体约 186.28MB,囊括 exe、dll、xml、sql、ini、bat 等可执行组件、配置脚本与示例文件,也包含 sdi、ibd、ibdata1、undo 及日志文件等实例元数据和 InnoDB 存储结构相关资料,目录层次较完整。已有 594 人学习下载,具备一定的使用参考价值。资源保留服务端程序、客户端工具、启动脚本、my.ini 配置入口与说明文件,解压后即可获得一套独立运行的 MySQL 8.0 环境,便于读者围绕数据库连接、脚本执行、参数调整、字符集配置和项目适配进行自主验证与学习。
1. 为什么我还在用 mysql8.0 免安装包:一台不敢乱动的机器
上个月给一台内部测试机配环境,机器上压着两个跑了三年的老系统,谁都不敢碰。装 MySQL 安装版要走 Installer、写注册表、改系统服务,万一跟机器上已有的东西打架,回滚都麻烦。最后我选的还是 mysql8.0 免安装包,也就是官方那个 ZIP Archive,解压、写配置文件、初始化、注册服务,全流程不到二十分钟,卸载时把服务删掉、目录一删就干净了。
这就是 mysql 免安装 版本最实在的价值:它对系统是“无痕”的,所有东西都在一个目录里,mysql数据库 的数据文件、日志、配置你都能一眼看到。但免安装也意味着没有向导帮你兜底,版本选错、my.ini 少一行、初始化参数写反,都会在启动那一步翻车,而且报错还藏在 error log 里。这篇记录写给我自己,也写给第一次给 mysql8 做免安装部署的人。
2. 解压与目录规划:mysql-8.0 免安装包解压后到底有什么
2.1 选包:ZIP Archive 和那几个容易看错的包名
先把包的类别分清楚。官方下载页面上,同一个 8.0 版本会挂出好几行:MySQL Installer、ZIP Archive、ZIP Archive Debug Binaries & Test Suite、还有 Source Code。免安装要的是ZIP Archive那一行,Windows 平台选 64 位;Linux 平台对应的是通用二进制包 tar.xz,不是源码包。
包名通常长这样,8.0.4x 里的 x 按你实际下载到的小版本替换:
mysql-8.0.4x-winx64.zipDebug 包不要下。它带调试符号,体积差不多翻倍,跑起来还慢,除非你要拿 mysqld 做崩溃分析,否则纯属给自己找事。Source Code 更不用碰,那是编译用的,编译完还得自己处理依赖,跟“免安装”三个字没关系。
小版本怎么挑?我的习惯是取 8.0 系列里当前最新的补丁版本。8.0 是个长期维护的大版本,小版本之间配置写法基本一致,但认证插件、参数弃用这些细节在 8.0.2x 到 8.0.4x 之间有变化,越新的小版本资料越对得上。别去下 5.7 的包再套 8.0 的配置文件,这是新手最常见的错配:5.7 允许lower_case_table_names在启动时随便改,8.0 从初始化那一刻就锁死了,两边的 my.ini 不能通用。
还有一点要提前知道:8.0 默认认证插件是caching_sha2_password,5.7 是mysql_native_password。如果你这台库要给一些老客户端、老驱动连,第一次就规划好认证方式,别等上线了再改,改起来要动账号密码。
2.2 解压路径:为什么我把 mysql 放在 D 盘根目录下
解压这个动作本身没技术含量,位置选错才是麻烦的开始。三条硬规矩,我每次部署都照做:
第一,路径里不要有空格。C:\Program Files\这种带空格的路径,在某些命令行拼接场景下会把参数截断,服务注册时特别容易出问题。
第二,路径里不要有中文。my.ini 里basedir和datadir写中文路径,mysqld 读配置时的编码处理不一定如你所愿,报错信息还特别难懂。
第三,不要放在系统盘的用户目录下面。C:\Users\xxx\这种路径受 UAC 和用户权限影响,注册成服务后服务是以系统账户跑的,可能读写不到你的用户目录。
我一般这样规划,basedir 和 datadir 分开放:
| 用途 | 路径示例 | 说明 |
|---|---|---|
| 程序目录 basedir | D:/mysql/mysql-8.0.4x-winx64 | 解压出来的原始目录,升级时整个替换 |
| 数据目录 datadir | D:/mysql/data | 独立出来,升级时不动 |
| 日志目录 | D:/mysql/logs | error log、slow log 放这里 |
| 临时目录 tmpdir | D:/mysql/tmp | 大排序、大查询临时文件 |
把 data 从 basedir 里拆出来是免安装版最值得做的一件事。MySQL 小版本升级,通常只需要下载新的 zip 解压到新目录、改一下 basedir 指向、重启服务,data 目录原地不动,数据一行不丢。如果 data 还在 basedir 里面,升级就得整个目录替换,风险立刻上一个量级。
data 和 logs、tmp 这几个目录,Windows 下手动建好就行,注意空目录不能被 git 之类的工具吞掉,建完确认一下确实存在。
Linux 上的思路一样,只是目录约定不同,对照着看:
| 项目 | Windows ZIP | Linux 通用二进制 |
|---|---|---|
| 程序目录 | D:/mysql/mysql-8.0.4x-winx64 | /usr/local/mysql |
| 数据目录 | D:/mysql/data | /data/mysql/data |
| 配置文件 | basedir 下my.ini | /etc/my.cnf |
| 服务方式 | mysqld --install注册 Windows 服务 | systemd unit 或 mysqld_safe |
| 运行账户 | 系统服务账户 | 独立的 mysql 用户,chown -R mysql:mysql |
Linux 那边多一步权限处理,解压完目录属主还是 root,必须chown -R mysql:mysql /usr/local/mysql /data/mysql,否则初始化时 mysqld 写不进 datadir,报错信息里只会说“Permission denied”,不会告诉你具体缺哪个权限。glibc 版本也要留意,8.0 的通用二进制包对 glibc 有最低要求,很老的发行版可能跑不起来,这种机器就老老实实走源码编译或者换包。
2.3 先别初始化:用 mysqld -V 确认运行库齐全
解压完,先别急着敲初始化命令,做一次最小验证。把 bin 目录加进 PATH,这一步是为了后面所有命令都不用写全路径:
:: 临时生效,只在当前窗口有效,适合先试 set PATH=D:\mysql\mysql-8.0.4x-winx64\bin;%PATH% :: 永久生效,需要重开命令行窗口 setx PATH "%PATH%;D:\mysql\mysql-8.0.4x-winx64\bin"逻辑说明:set只影响当前 cmd 会话,关掉就没了,适合验证阶段用;setx写进用户环境变量,永久生效,但它有两个坑——第一,%PATH%在setx执行时会被展开成当时的完整路径,如果 PATH 特别长,可能超过 1024 字符被截断;第二,它对已经打开的窗口无效。所以我一般先用set验证,确认没问题再改系统环境变量对话框,或者用setx之后立刻检查一遍。
PATH 加好之后,跑一句:
mysqld -V正常输出类似mysqld Ver 8.0.4x for Win64 on x86_64。这一句能跑通,说明三件事都正常:bin 目录进的没错、VC++ 运行库齐全、可执行文件没被杀毒软件截断。如果这里就报“找不到 VCRUNTIME140_1.dll”,别往下走了,先装微软的 VC++ 运行库,8.0 是 VS2015 之后工具链编译的,免安装包里不带这个运行库。这个问题后面第 5 章还会细说,它是免安装部署里出现频率最高的翻车点。
3. my.ini 配置与初始化:mysql8 免安装的第一份配置文件
3.1 my.ini 放在哪:位置、文件名、编码三件事
免安装版没有任何默认配置文件,必须自己写。名字就叫my.ini,Windows 下放在 basedir 根目录;Linux 下是my.cnf,一般放/etc/my.cnf。文件名和后缀都不能错,my.ini.txt、my.conf、my.ini.bak一律不认。
位置这块有个容易被忽略的点:mysqld找配置文件的顺序是,命令行--defaults-file指定优先,没指定就去默认路径搜。Windows 上的默认搜索路径包括C:\my.ini、C:\Windows\my.ini、basedir 下的my.ini等。所以哪怕你把文件放对了,只要注册服务时没显式指定,也可能读到别处的老配置——这点在 4.1 节会展开讲。
编码问题值得单独说一句。用记事本另存为 UTF-8 时,默认会带 BOM 头,mysqld 读到文件第一行就懵了,报的错跟配置内容毫无关系,查起来极其费劲。我一般用 VS Code 保存,右下角确认编码是UTF-8而不是UTF-8 with BOM;实在只有记事本,就选 ANSI。
3.2 一份能直接抄的 my.ini 模板
下面这份是我用了很多次的模板,删掉了跟具体机器绑定的部分,剩下的都能直接用:
[mysqld] # 程序目录,指向解压出来的 mysql-8.0.4x-winx64 basedir=D:/mysql/mysql-8.0.4x-winx64 # 数据目录,必须独立于 basedir,且初始化前为空 datadir=D:/mysql/data # 监听端口,默认 3306,同机多实例时改成 3307 之类 port=3306 # 8.0 服务端默认字符集,强烈建议显式写 character-set-server=utf8mb4 collation-server=utf8mb4_0900_ai_ci # 认证插件,需要兼容老客户端时改成 mysql_native_password default_authentication_plugin=caching_sha2_password # 表名大小写策略,Windows 下一般设 1,初始化后不可修改 lower_case_table_names=1 # 最大连接数,按机器内存和业务量调,默认 151 偏小 max_connections=500 # 错误日志,所在目录必须提前建好,mysqld 不会自动创建 log-error=D:/mysql/logs/error.log # 慢查询日志,排查性能问题必备 slow_query_log=1 slow_query_log_file=D:/mysql/logs/slow.log long_query_time=2 [client] port=3306 default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4参数挨个解释,重点说几个真会出事的。
basedir和datadir统一用正斜杠/。Windows 下习惯写反斜杠,但 ini 文件里单反斜杠会被当成转义符,D:\mysql\data里的\m、\d都可能被误解。要么全用正斜杠,要么写双反斜杠D:\\mysql\\data,前者更清爽。
lower_case_table_names=1表示表名存小写、比较不区分大小写,跟 Windows 文件系统行为一致。这个参数在 8.0 里只能在初始化那一刻定下来,初始化完成后再改,mysqld 直接拒绝启动。如果这台库以后可能迁到 Linux,就得提前想好:Linux 上这个参数默认是 0,两边不一致会导致迁移后SELECT * FROM User和select * from user的行为完全不同。我一般 Windows 下保持 1,迁移时统一在目标端重新建表结构,不做物理文件拷贝。
default_authentication_plugin这个参数在 8.0 后期版本已经被标记为弃用,新的写法是authentication_policy,但它到 8.0.4x 都还能正常生效,只会打一条警告。如果你手上的客户里有 5.x 时代的驱动,改这个参数是最省事的兼容方案,比逼着业务方全量升级驱动现实得多。
log-error指定的目录必须先存在。这是新手最容易踩的一脚:datadir 不存在 mysqld 会自动创建,log-error 的父目录不存在就直接启动失败,而且失败的提示非常隐蔽,因为错误本来该写进那个日志文件里,结果文件都建不出来。
3.3 初始化 datadir:--initialize 和 --initialize-insecure 怎么选
配置写好,开始第一次初始化。这一步会把 datadir 从空目录变成一套完整的系统表空间,做错了只能删库重来,所以命令要看清楚:
:: 方式一:生成随机 root 密码,输出在控制台,推荐 mysqld --defaults-file=D:\mysql\my.ini --initialize --console :: 方式二:root 空密码,只适合本机临时库 mysqld --defaults-file=D:\mysql\my.ini --initialize-insecure --console两个参数的区别就一句话:--initialize给 root 生成一串随机临时密码,首次登录必须改;--initialize-insecure把 root 密码设成空,登录时直接回车,省事但危险。我默认用第一种,临时密码在输出里长这样:
[Note] A temporary password is generated for root@localhost: kq3Rt!9xLm2p这串东西只在控制台出现这一次,没记下来就得走第 5 章的密码找回流程。--console的作用是把日志打到当前窗口,不加这个参数,输出会按log-error的配置写进文件,很多人敲完命令看到窗口一片空白以为成功了,其实密码已经写进 error log 里了。
初始化过程中还要盯几个点。如果 datadir 里已经有文件,哪怕是隐藏的.gitkeep,初始化会直接失败并提示目录非空,所以初始化前最好dir /a看一眼。初始化耗时跟机器性能有关,一般十几秒到一分钟,期间别 Ctrl+C 打断,中途中断的 datadir 是不完整的,只能清空重来。
命令跑完没报错,datadir 里应该出现这些内容:ibdata1、ib_logfile系列、mysql、sys、performance_schema几个系统库目录、mysql.ibd。看到它们,说明系统表空间建好了,接下来就是让 mysqld 跑起来。
4. 注册服务与首次登录:把 mysqld 变成开机自启
4.1 注册 Windows 服务:--defaults-file 的位置决定生死
免安装版最方便的用法是把 mysqld 注册成 Windows 服务,开机自启、后台运行,不用每次开个黑窗口挂着。命令只有一行:
:: 注册服务,服务名叫 MySQL80,可以自定义 mysqld --install MySQL80 --defaults-file=D:\mysql\my.ini :: 启动 / 停止 / 删除 net start MySQL80 net stop MySQL80 mysqld --remove MySQL80这行命令的坑全在--defaults-file上。注册服务时,这个参数会连同路径一起被写进服务的启动参数里;如果注册时压根没写这个参数,服务启动时 mysqld 就会走默认搜索路径去找 my.ini,很可能读到C:\下某个陈年旧文件,或者干脆找不到,用一套内置默认值跑起来。表现出来就是:明明 my.ini 里写了端口 3307、字符集 utf8mb4,连上去一查全是 3306 和 latin1。
还有一种情况是写了但写法不对。路径里有空格一定要用引号包住;路径必须是绝对路径,写成相对路径注册进去,服务启动时的工作目录不确定,等于没写。我见过最隐蔽的一次是--defaults-file写在了--install前面,mysqld 把它当成自己的选项解析了,服务注册是成功的,但启动参数里没带上,排查了半天。
服务注册完先别急着net start,先手动前台跑一次,把问题暴露在眼前:
:: 前台启动,日志直接打屏,Ctrl+C 退出 mysqld --defaults-file=D:\mysql\my.ini --console这条命令能正常停在那里不退出,说明配置、权限、数据目录全都对,这时候再 Ctrl+C 掉,用net start起服务,几乎不会失败。反过来,如果net start报“服务无法启动,发生系统错误 1067”,前台模式跑一遍,错误信息立刻就有了,比翻事件查看器快得多。这个习惯我保持了几年,屡试不爽。
4.2 首次登录与改密码:8.0 的 ALTER USER 和 5.7 不一样
服务起来之后,用初始化时那串临时密码登录:
mysql -uroot -p -h127.0.0.1 -P3306这里建议显式写-h127.0.0.1和-P。不写主机名时,Windows 客户端可能走命名管道或者别的连接方式,报出来的错跟密码错、权限错混在一起,很难分辨。
登录进去第一件事就是改密码,8.0 下临时密码不改的话,除了ALTER USER之外啥也干不了:
-- 8.0 改密码的标准写法 ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStr0ng@Pass'; -- 查看当前认证插件和账号状态 SELECT user, host, plugin FROM mysql.user; -- 刷新权限,改完账号相关一定要执行 FLUSH PRIVILEGES;注意 8.0 里已经没有SET PASSWORD = PASSWORD('xxx')这种写法了,PASSWORD()函数在 8.0 里被移除。网上大量 5.7 时代的教程还在用,照抄必然报语法错误。同理,GRANT ... IDENTIFIED BY这种“建用户顺便授权”的写法在 8.0 也被砍了,必须先CREATE USER再GRANT:
-- 先建用户 CREATE USER 'app_user'@'%' IDENTIFIED BY 'App@Pass2024'; -- 再授权,只给业务库的必要权限 GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'%'; -- 需要建表权限时再单独加 GRANT CREATE, ALTER, INDEX ON app_db.* TO 'app_user'@'%'; FLUSH PRIVILEGES;权限按需给,不要图省事直接GRANT ALL ON *.* TO 'app_user'@'%'。免安装版经常被拿来做开发库和测试库,一个全权限账号在局域网里裸奔,出事的概率比想象中高。
4.3 开放远程连接:三处要同时改,少一处都连不上
默认装完只能本机连,要让局域网里其他机器连进来,三处缺一不可。
第一处是 my.ini 里的监听地址。8.0 的bind-address默认值通常是*,也就是监听所有网卡,但有些发行版和打包方式会改成127.0.0.1。保险起见显式写一行:
[mysqld] bind-address=0.0.0.0第二处是账号的 host 部分。'app_user'@'localhost'只允许本机,远程必须用'app_user'@'%'或者更精确的网段,比如'app_user'@'192.168.1.%'。
第三处是系统防火墙。Windows 防火墙默认拦入站 3306,加一条规则:
:: 允许 3306 入站,仅内网使用 netsh advfirewall firewall add rule name="MySQL 3306" dir=in action=allow protocol=TCP localport=3306三处改完,net stop MySQL80 && net start MySQL80重启服务,从另一台机器上用mysql -h<服务器IP> -uapp_user -p试一下。如果还连不上,先在本机netstat -ano | findstr 3306看端口是不是真的监听在0.0.0.0,再看防火墙规则有没有生效,顺着这条链路查,比瞎猜快。
最后顺手处理一下服务账户。Windows 服务默认以 LocalSystem 跑,权限足够读写 datadir,一般不用改。如果 datadir 放在网络盘或者特殊权限的目录下,可能要给服务换成有权限的账户,这一步在“服务”管理器里改,改完记得重启服务验证一次。
5. mysql8 免安装排查:五个真实翻车现场与救法
5.1 初始化阶段的两个坑
现象:敲mysqld --initialize,命令行立刻返回,没有输出,datadir 里空空如也。
原因:没加--console,日志按log-error配置写进了文件;而log-error的父目录如果不存在,mysqld 建不出日志文件,两边都没留下任何痕迹。看起来像是“什么也没发生”,实际是失败得悄无声息。
解决:命令加上--console重跑,同时确认log-error指向的目录已经手动建好。如果是 datadir 里已经有残留文件导致失败,先把 datadir 清空(确认里面没有有用数据),再重新初始化。我一般养成习惯:初始化前先dir /a看一眼 datadir,空的才动手。
现象:初始化报错,提示lower_case_table_names的值跟已有数据不一致,或者服务起来之后一改这个参数就启动失败。
原因:8.0 把lower_case_table_names的取值固化在数据字典里了,初始化时是什么值,以后就得是什么值。很多人是先在 my.ini 里漏写了这一行,按默认值初始化完,发现表名大小写不符合预期,再回头加上去,服务直接起不来。
解决:只能在初始化之前把值定好。已经初始化完又想改,唯一的办法是备份数据、清空 datadir、改 my.ini、重新初始化、再导数据回来。这就是我说的免安装版的“后悔药”很少——很多参数只在初始化那一瞬间生效。所以 my.ini 写完,宁可多花五分钟逐行核对,也别急着敲初始化命令。
5.2 服务启动阶段的坑
现象:命令行执行mysqld弹窗报“无法启动此程序,因为计算机中丢失 VCRUNTIME140_1.dll”。
原因:8.0 的 Windows 包是用较新的 VS 工具链编译的,依赖 VC++ 运行库,而免安装压缩包里只管 MySQL 自己的文件,运行库得系统里本来就有。干净的服务器上大概率没有。
解决:装微软官方的 VC++ 运行库合集(x64 版本),装完不用重启,直接再跑一次mysqld -V验证。这一步特别容易被误判成“包损坏了”,然后反复重新下载解压,浪费大量时间。记住这个判断顺序:先看 dll 报错,再怀疑文件完整性。
现象:net start MySQL80报“发生系统错误 1067,进程意外终止”,事件查看器里信息很少。
原因:服务启动失败的原因太多了——my.ini 路径没带、端口被占、datadir 权限不足、日志目录不存在,任何一种都会表现成 1067。
解决:不要硬刚服务,改用前台模式mysqld --defaults-file=D:\mysql\my.ini --console,真实报错会立刻打屏。我遇得最多的是端口占用,用netstat -ano | findstr 3306找到占用进程,要么换端口,要么把冲突进程停掉。如果是服务注册时没带--defaults-file,先mysqld --remove MySQL80删掉服务,再按 4.1 节的写法重新注册。
5.3 连接与密码相关的坑
现象:root 临时密码没记下来,或者密码输错几次后彻底进不去了。
原因:--initialize生成的密码只输出一次,没存下来就是没有;改密码之前又做不了任何操作,形成死锁。
解决:走跳过权限表的流程。先停服务,用--skip-grant-tables --skip-networking前台启动,这条路径只允许本机连、不校验密码,进去之后:
-- 跳过权限表模式下必须先刷新,否则 ALTER USER 不生效 FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStr0ng@Pass';改完 Ctrl+C 停掉,正常启动服务,用新密码登录。8.0 里--skip-grant-tables会自动带上--skip-networking,所以远程连不进去是正常的,别以为又出了别的问题。
现象:本地用命令行能连,业务程序连上来报Client does not support authentication protocol requested by server,或者错误码 1251。
原因:账号用的是 8.0 默认的caching_sha2_password插件,而客户端的驱动或客户端版本太老,不认这个插件。
解决:两条路,一是升级驱动,这是根治;二是把账号改成兼容插件:
ALTER USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'App@Pass2024'; FLUSH PRIVILEGES;改完客户端立刻能连。代价是失去了 SHA256 那套更安全的认证机制,所以只在确实没法升级驱动的存量系统上用,新项目一律走默认插件。
5.4 想推倒重来时的清理清单
免安装版的好处是删得干净,但删之前得知道删什么,不然会留下半截服务或者残留文件,下次重装接着踩坑。顺序是:先net stop MySQL80,再mysqld --remove MySQL80删服务,然后确认“服务”列表里已经没有 MySQL80 这一项。接着把 basedir、datadir、logs 三个目录整个删掉,最后检查环境变量 PATH 里那截 bin 路径要不要清。
最容易漏的是服务没删干净就删目录。目录一删,服务还在,下次net start报的错会非常莫名其妙,而且mysqld --remove这时候已经找不到可执行文件了,只能去注册表里手工清。所以顺序不能反:先删服务,后删目录。
6. 装完怎么验证:三条命令确认 mysql8 免安装环境真的能跑
装完不算完,能跑才算。我做免安装部署,收尾固定跑三步验证,每步都有明确的期望结果,任何一步对不上就回去查对应环节。
第一步,查服务端身份和关键路径是否跟 my.ini 一致:
SELECT VERSION(), @@basedir, @@datadir, @@port, @@character_set_server, @@lower_case_table_names;期望结果是版本号是 8.0.4x、basedir和datadir正是你配置的那两个路径、端口和字符集都对得上。这一条能同时验证配置有没有生效、服务读的是不是正确的 my.ini,比看日志快。
第二步,完整走一遍建库建表写入读出的链路:
CREATE DATABASE verify_db CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; USE verify_db; CREATE TABLE t_check (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(64), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP); INSERT INTO t_check (name) VALUES ('安装验证'); SELECT * FROM t_check;这一步验证的是权限、字符集、存储引擎三样东西。如果中文插进去变成问号,说明客户端和服务端字符集有一端没配好;如果建表报错,多半是权限给窄了。
第三步也是最关键的一步,重启服务再查一次数据还在不在:
net stop MySQL80 net start MySQL80起来之后重新执行SELECT COUNT(*) FROM verify_db.t_check;,返回 1 就说明数据真正落到了 datadir 里,不是内存里的临时状态。这一步专门用来抓“datadir 配错位置”这种隐蔽问题——有些机器上服务能起、能写,但数据写到了默认目录而不是你 my.ini 里指定的目录,重启或者换机器就全丢了。
| 验证项 | 命令 | 期望结果 |
|---|---|---|
| 版本与路径 | SELECT @@basedir, @@datadir | 与 my.ini 配置完全一致 |
| 字符集 | SELECT @@character_set_server | utf8mb4 |
| 写入链路 | INSERT 后 SELECT | 中文正常显示 |
| 持久化 | 重启服务后 COUNT | 数据仍在 |
| 远程连通 | 另一台机器mysql -h<IP> | 能登录并查询 |
从那以后我每次做完免安装部署,都强制自己把这三步走一遍,尤其是重启那一步,一次都不省。免安装版所有东西都摊在明面上,好处是透明,坏处也是透明——它不替你兜任何底,配置里每一行写错都会在某个时刻原样还给你。这套流程照着走,八成的坑在初始化之前就能避开。希望帮到你。
本文还有配套的精品资源,点击获取