以下覆盖 MySQL 所有核心底层文件(按「功能分类」),包含文件格式、存储内容、关联机制、修改规则、异常影响等,兼顾 InnoDB(默认引擎)和 MyISAM,同时补充系统 / 辅助文件说明:
一、核心配置文件(文本格式,可手动修改)
1. 主配置文件:my.cnf/my.ini
- 路径 :
- Linux:
/etc/my.cnf、/etc/mysql/my.cnf、~/.my.cnf(用户级); - Windows:
C:\ProgramData\MySQL\MySQL Server X.X\my.ini、C:\Program Files\MySQL\MySQL Server X.X\my.ini;
- Linux:
- 格式 :INI 格式(
[组名] + 参数=值),支持注释(#/;); - 核心作用:全局参数配置,控制 MySQL 服务的启动行为、内存分配、存储引擎、日志规则、网络连接等所有核心行为;
- 细分组说明 :
[mysqld]:服务端核心配置(端口、数据目录、缓冲池、日志等);[mysql]:客户端默认配置(字符集、连接超时);[mysqld_safe]:mysqld_safe 守护进程配置(错误日志路径);[client]:所有客户端工具(mysql、mysqldump)通用配置;
- 修改规则 :✅ 可手动编辑(需保存后重启 / 重载生效);❗ 注意参数格式(如数值单位:
1G/1024M,无单位默认字节),错误参数会导致服务启动失败; - 典型异常 :若配置
innodb_log_file_size后直接修改 ib_logfile 文件大小,会触发 InnoDB 校验失败,服务无法启动。
2. 配置辅助文件:my.cnf.fallback/my-default.cnf
- 路径:与主配置文件同目录(部分系统);
- 作用:默认配置模板,仅作为参考,不生效(需复制为 my.cnf 后修改);
- 修改规则:无实际作用,无需修改。
二、数据存储核心文件(二进制 / 结构化,禁止手动修改)
1. InnoDB 系统表空间文件:ibdata1、ibdata2...
- 路径 :
datadir目录下(默认/var/lib/mysql/); - 格式:二进制(页式存储,默认页大小 16KB);
- 核心存储内容 :
- 数据字典(表结构、列信息、索引元数据);
- Undo 日志(事务回滚、MVCC 多版本控制核心);
- 未开启
innodb_file_per_table时的所有表数据 / 索引; - 临时表空间(5.7 前)、双写缓冲区(Double Write Buffer);
- 关键特性:「自增不收缩」------ 即使删除数据,文件大小也不会自动减小(需通过 mysqldump 全量备份 + 重建库表释放空间);
- 修改规则 :❌ 绝对禁止手动编辑 / 删除 / 重命名;❗ 仅可通过配置
innodb_data_file_path调整初始大小 / 新增文件(需服务停止且无数据写入); - 典型异常:手动删除 ibdata1 会导致所有 InnoDB 表无法访问,提示「Table doesn't exist in engine」。
2. InnoDB 独立表空间文件:表名.ibd
- 路径 :对应数据库目录下(如
test库的表t1→/var/lib/mysql/test/t1.ibd); - 格式:二进制(与 ibdata1 页格式一致);
- 核心存储内容 :开启
innodb_file_per_table=1(5.6+ 默认开启)后,单表的所有数据、索引、自适应哈希索引元数据; - 关联文件 :
.frm/.ibd_metadata(表结构 / 元数据关联); - 修改规则 :❌ 禁止手动编辑;✅ 可通过
ALTER TABLE ... DISCARD/IMPORT TABLESPACE迁移(需满足:表结构一致、无锁、关闭外键检查); - 典型场景:跨实例迁移大表时,可通过导出表结构 → DISCARD 表空间 → 复制 .ibd 文件 → IMPORT 表空间,避免全量数据导出。
3. InnoDB 重做日志(Redo Log):ib_logfile0、ib_logfile1
- 路径 :
datadir目录下; - 格式:二进制(循环写,固定大小);
- 核心作用:保证事务持久性(ACID 的 D)------ 事务提交时先写 Redo Log,再刷盘数据,崩溃后通过 Redo Log 恢复未刷盘的数据;
- 关键参数 :
innodb_log_file_size:单个日志文件大小(建议 1-4G,总和不超过缓冲池 50%);innodb_log_files_in_group:日志文件数量(默认 2,循环使用);
- 修改规则:❌ 禁止手动修改 / 删除;✅ 调整大小需先停止服务 → 删除旧文件 → 修改配置 → 重启服务(自动重建);
- 典型异常:日志文件大小 / 数量与配置不一致,会触发 InnoDB 启动报错:「InnoDB: Error: log file ./ib_logfile0 is of different size」。
4. InnoDB 临时表空间文件:ibtmp1
- 路径 :
datadir目录下; - 格式:二进制;
- 核心作用 :存储 InnoDB 临时表数据(如
CREATE TEMPORARY TABLE、排序 / 分组产生的临时结果); - 关键参数 :
innodb_temp_data_file_path:配置临时表空间大小(默认 12M,自动扩容); - 修改规则:❌ 禁止手动删除;✅ 可通过配置调整初始大小,重启服务后重建(需先停止服务,删除旧文件);
- 典型异常 :临时表空间满会导致
ERROR 1114 (HY000): The table '#sql-xxxx_xxx' is full。
5. MyISAM 表文件(三类文件)
(1)表结构文件:表名.frm
- 路径:对应数据库目录下;
- 格式:二进制(存储表结构定义,与存储引擎无关 ------InnoDB 表也有 .frm 文件);
- 存储内容:字段名、字段类型、长度、约束(主键 / 外键)、字符集、索引定义;
- 修改规则 :❌ 禁止手动编辑;✅ 可通过
ALTER TABLE自动更新,或CREATE TABLE生成; - 典型异常 :手动修改 .frm 会导致
ERROR 1033 (HY000): Incorrect information in file: './test/t1.frm'。
(2)数据文件:表名.MYD(MYData)
- 路径:对应数据库目录下;
- 格式:二进制(行式存储,无事务支持);
- 存储内容:MyISAM 表的所有行数据;
- 修改规则 :❌ 禁止手动编辑 / 修改;✅ 仅可通过
INSERT/UPDATE/DELETE操作,或myisamchk工具修复; - 典型特性:支持「延迟更新」------ 数据修改先写缓存,定时刷盘(易丢数据)。
(3)索引文件:表名.MYI(MYIndex)
- 路径:对应数据库目录下;
- 格式:二进制(B+ 树结构);
- 存储内容:MyISAM 表的所有索引(主键 / 二级索引);
- 修改规则 :❌ 禁止手动编辑;✅ 可通过
ALTER TABLE ADD INDEX自动更新,或myisamchk --recover修复; - 典型异常:MYI 文件损坏会导致查询提示「Can't find index for table xxx」。
6. 系统数据库文件:mysql 库目录
- 路径 :
datadir/mysql/; - 核心文件 :
user.frm/user.MYD/user.MYI:用户权限表(用户名、密码哈希、主机、权限);tables_priv.frm/tables_priv.MYD:表级权限表;db.frm/db.MYD:数据库级权限表;innodb_table_stats.ibd:InnoDB 表统计信息;
- 存储内容:MySQL 核心系统数据(权限、字符集、存储引擎元数据);
- 修改规则 :❌ 禁止手动编辑 MYD/MYI/ibd 文件;✅ 仅可通过
CREATE USER/GRANT/SET PASSWORD等命令修改; - 典型异常 :直接
UPDATE mysql.user修改密码会导致哈希校验失败,用户无法登录。
三、日志文件(文本 / 二进制,部分可配置,禁止手动编辑内容)
1. 二进制日志(Binlog):mysql-bin.000001、mysql-bin.index
(1)日志文件:mysql-bin.000001、mysql-bin.000002...
- 路径 :
datadir目录下(可通过log_bin指定路径); - 格式:二进制(支持三种格式:STATEMENT/ROW/MIXED);
- 核心作用:记录所有数据修改操作(INSERT/UPDATE/DELETE/ALTER),用于主从复制、数据恢复;
- 关键参数 :
log_bin:开启二进制日志(默认关闭);binlog_format:日志格式(ROW 格式最安全,适合主从);expire_logs_days:自动清理过期日志(默认 0,不清理);
- 修改规则 :❌ 禁止手动编辑 / 修改内容;✅ 可通过
PURGE BINARY LOGS清理指定日志,或配置自动过期; - 典型场景 :误删数据时,可通过
mysqlbinlog解析 binlog,恢复到指定时间点。
(2)索引文件:mysql-bin.index
- 路径:与 binlog 同目录;
- 格式:文本(每行记录一个 binlog 文件路径);
- 作用:记录所有有效 binlog 文件列表,MySQL 读取该文件识别可用的 binlog;
- 修改规则 :❌ 禁止手动编辑(会导致主从同步异常);✅ 由 MySQL 自动维护,仅可通过
PURGE命令间接修改。
2. 错误日志(Error Log):hostname.err/mysqld.log
- 路径 :
- Linux:
/var/log/mysqld.log或datadir/hostname.err; - Windows:
datadir/mysqld.err;
- Linux:
- 格式:文本;
- 核心作用:记录 MySQL 启动 / 停止 / 运行过程中的所有错误、警告、信息(如连接失败、索引损坏、配置错误);
- 关键参数 :
log_error:指定错误日志路径;log_error_verbosity:日志详细级别(1 = 错误,2 = 错误 + 警告,3 = 所有);
- 修改规则:✅ 可手动删除 / 清空(不影响服务运行,会自动重建);✅ 可通过配置修改路径 / 级别;
- 典型用途:服务启动失败时,优先查看错误日志定位原因(如端口被占用、配置参数错误)。
3. 慢查询日志(Slow Query Log):slow.log
- 路径 :
datadir/slow.log(可通过slow_query_log_file指定); - 格式:文本;
- 核心作用 :记录执行时间超过
long_query_time的 SQL 语句(默认 10 秒),用于性能优化; - 关键参数 :
slow_query_log:开启慢查询日志(默认关闭);long_query_time:慢查询阈值(最小可设 0.001 秒);log_queries_not_using_indexes:记录未使用索引的查询(即使执行时间短);
- 修改规则 :✅ 可手动删除 / 清空(自动重建);✅ 可通过
mysqldumpslow工具分析日志; - 典型场景:通过慢查询日志找到耗时 SQL,优化索引或语句结构。
4. 通用查询日志(General Query Log):general.log
- 路径 :
datadir/general.log(可通过general_log_file指定); - 格式:文本;
- 核心作用:记录所有客户端连接、执行的 SQL 语句(包括查询 / 修改),用于审计 / 调试;
- 关键参数 :
general_log:开启通用日志(默认关闭,开启后性能损耗大);
- 修改规则:✅ 可手动删除 / 清空;❗ 生产环境禁止长期开启(日志量极大,占用磁盘);
5. 中继日志(Relay Log):mysql-relay-bin.000001、relay-log.index
- 路径 :主从复制的从库
datadir目录下; - 格式:与 binlog 一致(二进制);
- 核心作用:从库复制主库的 binlog 后,先写入中继日志,再由 SQL 线程执行;
- 关联进程:IO 线程(读取主库 binlog → 写入中继日志)、SQL 线程(解析中继日志 → 执行);
- 修改规则 :❌ 禁止手动编辑 / 删除;✅ 可通过
CHANGE MASTER TO配置中继日志路径,或PURGE RELAY LOGS清理; - 典型异常:中继日志损坏会导致从库复制中断,提示「Relay log read failure」。
四、临时 / 辅助文件(自动生成,可配置路径)
1. 临时文件:tmpdir 目录下的临时文件
- 路径 :默认
/tmp(Linux)或C:\Windows\Temp(Windows),可通过tmpdir配置; - 格式:二进制 / 文本(按需生成);
- 核心作用 :
- 执行
ORDER BY/GROUP BY时的排序临时文件; - 临时表(
CREATE TEMPORARY TABLE)的存储文件; LOAD DATA INFILE的临时缓存;
- 执行
- 修改规则 :✅ 可通过
tmpdir配置多个路径(用:/;分隔),分散 IO 压力;❌ 禁止手动删除运行中的临时文件(会导致 SQL 执行失败); - 典型异常 :
/tmp目录磁盘满会导致「No space left on device」,查询 / 导入失败。
2. 套接字文件:mysql.sock(Linux 独有)
- 路径 :默认
/var/lib/mysql/mysql.sock,可通过socket配置; - 格式:UNIX 域套接字文件(无实际内容,用于进程间通信);
- 核心作用:本地客户端(如 mysql 命令行)与 mysqld 服务进程的通信通道(比 TCP/IP 更快);
- 修改规则 :✅ 可通过
socket参数修改路径;❌ 禁止手动删除(删除后本地客户端无法连接,需重启服务重建); - 典型问题:客户端提示「Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'」,需检查文件是否存在 / 权限。
3. PID 文件:mysqld.pid
- 路径 :默认
/var/run/mysqld/mysqld.pid(Linux),可通过pid-file配置; - 格式:文本(仅一行,存储 mysqld 进程的 PID 号);
- 核心作用:防止重复启动 mysqld 服务,系统工具(如 systemctl)通过该文件识别进程是否运行;
- 修改规则 :✅ 可通过
pid-file修改路径;❌ 禁止手动编辑(会导致服务启停异常); - 典型场景:强制杀死 mysqld 进程后,PID 文件未删除,重启时提示「PID file exists」,需手动删除。
4. 字符集文件:charsets/ 目录
- 路径 :
/usr/share/mysql/charsets/(Linux),包含Index.xml、utf8.xml等; - 格式:XML / 二进制;
- 核心作用:存储字符集 / 排序规则的定义(如 utf8mb4、gbk 的编码映射);
- 修改规则:❌ 禁止修改(会导致字符集转换异常,乱码);
五、备份 / 恢复相关文件(手动生成,可修改)
1. 备份文件:.sql/.sql.gz
- 格式:文本(SQL 语句)或压缩包;
- 生成方式 :
mysqldump命令导出; - 修改规则:✅ 可手动编辑(如修改表名、删除部分 SQL 语句),恢复前需检查语法;
2. 表空间备份文件:.ibd.backup
- 格式:二进制(与 .ibd 一致);
- 生成方式 :
ALTER TABLE ... BACKUP TABLESPACE; - 修改规则:❌ 禁止手动编辑,仅可用于恢复 .ibd 文件;