日志目录迁移只需修改配置文件中log-error、slow_query_log_file等路径并重启服务,无需迁移日志表或重启实例;需确保新路径权限正确、为绝对路径、位于[mysqld]段且无bom编码。

日志目录迁移 ≠ 日志表迁移,别搞混了——MySQL 的 error log、slow log、general log 等都受 my.ini 或 my.cnf 里路径配置控制,改对位置就能生效,不需要动表空间或重启整个实例(但需重启服务)。
确认哪些日志文件需要迁移
MySQL 常见日志类型及其配置项如下,必须逐个检查是否写在旧磁盘上:
-
log-error:错误日志,必配,路径错则 MySQL 启动失败 -
slow_query_log_file:慢查询日志,默认名host_name-slow.log,若未显式指定路径,会落在datadir下 -
general_log_file:通用查询日志,同上,不指定就随datadir -
pid-file:进程 ID 文件,虽非日志,但常和日志放一起,路径错也会导致启动失败
执行 SHOW VARIABLES LIKE '%log%'; 可快速列出当前所有日志相关变量值,重点看输出中带路径的那些项。
修改配置文件前先准备新路径
假设目标磁盘已挂载为 /data/logdisk,需确保:
- MySQL 进程用户(如
mysql)对该路径有读写权限:chown mysql:mysql /data/logdisk - 路径存在且为空或仅含预期日志文件:
mkdir -p /data/logdisk/mysql - 避免使用 NFS 或远程挂载点——日志写入是同步阻塞操作,网络延迟会导致连接超时或卡死
Windows 下同理,比如新路径设为 D:/mysql/logs,要右键该目录 → 安全 → 编辑 → 添加 NETWORK SERVICE 并勾选“完全控制”。
在 my.cnf / my.ini 中批量更新路径
打开配置文件(Linux 通常在 /etc/my.cnf 或 /etc/mysql/my.cnf;Windows 在 C:\ProgramData\MySQL\MySQL Server X.X\my.ini),找到并修改以下几行(注意:不是只改 datadir):
log-error = /data/logdisk/mysql/error.log slow_query_log_file = /data/logdisk/mysql/slow.log general_log_file = /data/logdisk/mysql/general.log pid-file = /data/logdisk/mysql/mysqld.pid
关键细节:
- 路径末尾不要加斜杠,否则 MySQL 可能拼出
/data/logdisk/mysql//error.log导致写入失败 - 所有路径必须用绝对路径,相对路径会被解析为相对于
basedir,极易出错 - 如果某项原本没配置(如
general_log_file),而你又打开了general_log=ON,那就必须显式补上路径,否则日志会默认写进datadir
重启后验证是否真正生效
重启 MySQL 服务后,不能只看服务起来没,要确认日志真写到新位置:
- 立刻检查新路径下是否生成了
error.log,且内容包含最新启动时间戳 - 手动触发一条慢查询(如
SELECT SLEEP(2);),再查/data/logdisk/mysql/slow.log是否追加了记录 - 运行
SELECT @@log_error, @@slow_query_log_file;,返回值必须和配置文件一致
常见失败原因:配置文件编码为 UTF-8 BOM(Windows 记事本易产生)、路径权限遗漏、log-error 路径父目录不存在、配置项写在了 [client] 段而非 [mysqld] 段——这些都会让 MySQL 忽略设置,默默回退到默认路径。











