MySQL:安装时启动超时,以及更换数据目录
2022 年 7 月 27 日 · 2 分钟读完
两篇 MySQL 安装维护的记录,都以 Windows 上的 MySQL 5.7 为例。
安装时 Start the Server 超时
安装 MySQL 时总是卡在启动服务这一步失败,删除重装很多次都一样。
原因是计算机名是中文。安装程序生成的配置文件 my.ini(默认在 C:\ProgramData\MySQL\MySQL Server 5.7\my.ini)里,日志文件名默认用计算机名命名,比如 log-error="张三的电脑.err"。MySQL 读不了这种带中文的路径,服务就起不来。
解决:把计算机名改成英文(设置 → 系统 → 关于 → 重命名这台电脑),重启后重新安装,顺利完成。
不想改计算机名的话,也可以手动把 my.ini 里所有用到计算机名的文件名改成英文,再启动服务。
更换数据存储目录
默认数据放在 C 盘,数据多了会占满系统盘、影响速度,把它挪到 D 盘。
1. 停止 MySQL 服务
Win + R 输入 services.msc 打开服务,找到 MySQL 服务(5.7 默认叫 MySQL57,不同版本名字不同):

双击它,点「停止」:

或者用管理员身份打开命令行,执行 net stop MySQL57:

2. 拷贝数据,修改配置
C:\ProgramData 是隐藏文件夹,要先在资源管理器里勾选「显示隐藏的项目」:

- 把整个
Data文件夹拷到新位置,比如D:\MySQLData\Data; - 用文本编辑器打开
my.ini,找到datadir:

改成新路径(Windows 路径里用 / 或者 \\):
datadir=D:/MySQLData/Data
3. 启动服务
在服务里点「启动」,或者 net start MySQL57:

4. 连接测试
连接成功,数据都在:

确认没问题后,再删除 C 盘原来的 Data 文件夹。
改完服务起不来

依次检查:
1. my.ini 的文件编码。 用记事本修改保存后,可能被存成了「UTF-8 带 BOM」,MySQL 读不了开头的 BOM 字节。用记事本「另存为」,编码选 ANSI(原文选的 ASCII 是同一个意思)覆盖原文件:

2. 残留进程。 上一次启动失败可能留下了 mysqld 进程,再启动时提示服务正在启动或停止:

用管理员身份打开命令行:
tasklist | findstr mysql
taskkill /f /t /im mysqld.exe
反复执行直到查不到 mysqld 进程,再启动服务:

3. 新目录的权限。 MySQL57 服务默认以 NETWORK SERVICE 账户运行,它可能没有新目录的读写权限。右键 D:\MySQLData → 属性 → 安全 → 编辑 → 添加 NETWORK SERVICE,给「完全控制」。
4. 看错误日志。 以上都不是的话,打开数据目录下的 计算机名.err,最后几行会写清楚失败原因,比猜快得多。
延伸
- MySQL 8 默认用 UTF-8:5.7 的默认字符集是 latin1,中文要额外配置;建库时直接指定
utf8mb4。中文乱码的问题见 上位机写数据库中文乱码。 - 装在 D 盘不等于数据在 D 盘:安装时选的是程序目录,数据目录是另一个选项(
ProgramData下)。安装时就在「Data Directory」里选好位置,省去后面的搬迁。 - 定期备份:
mysqldump -u root -p --databases mydb > D:\backup\mydb.sql,配合任务计划程序每天执行一次。工控现场的硬盘坏了,数据就全没了。 - 按表名查询和清理旧数据:见 MySQL:information_schema 与特殊列名。
原文首发于 blog.csdn.net