🌲 典型 MySQL 8 数据目录结构(tree)

假设 MySQL 安装在 /usr,数据目录为 /var/lib/mysql(这是大多数 Linux 发行版默认路径):

/var/lib/mysql/
├── auto.cnf                      # 存储服务器 UUID,用于复制标识
├── ca.pem                        # CA 证书(SSL)
├── ca-key.pem                    # CA 私钥(SSL)
├── client-cert.pem               # 客户端 SSL 证书
├── client-key.pem                # 客户端 SSL 密钥
├── ibdata1                       # 系统共享表空间(InnoDB)
├── ib_logfile0                   # InnoDB 重做日志文件(Redo Log)
├── ib_logfile1                   # InnoDB 重做日志文件(Redo Log)
├── ibtmp1                        # InnoDB 临时表空间
├── mysql/                        # 系统数据库(存储用户、权限、元数据等)
│   ├── ...
├── performance_schema/           # 性能监控数据库(内存表,启动时重建)
├── sys/                          # 系统视图(基于 performance_schema 和 information_schema)
├── #innodb_temp/                 # InnoDB 临时文件目录(MySQL 8.0+)
├── undo_001, undo_002...         # Undo 表空间文件(如果启用了独立 undo 表空间)
├── your_db1/                     # 用户自定义数据库目录
│   ├── db.opt                    # 数据库选项(如字符集)
│   ├── table1.ibd                # InnoDB 独立表空间文件(若启用了 innodb_file_per_table)
│   └── table2.frm (已废弃)       # MySQL 8 中 .frm 文件不再使用(元数据存于数据字典)
├── binlog.000001                 # 二进制日志(若启用)
├── binlog.index                  # 二进制日志索引文件
├── mysql-bin.index               # 可能存在的旧命名
├── relay-log.*                   # 中继日志(若为从库)
├── mysql.sock                    # Unix 域套接字(用于本地连接)
├── mysql.pid                     # MySQL 进程 ID 文件
├── '#ib_16384_0.dblwr'           # Doublewrite buffer 文件(MySQL 8.0.20+)
├── '#innodb_redo/'               # Redo 日志新目录(MySQL 8.0.30+,若启用 redo log archive 或新格式)
└── ...

注:部分文件名可能因配置不同而变化(如 binlog 前缀、undo 表空间数量等)。


🔍 各文件/目录详解

文件/目录 作用 是否可安全删除? 删除前需做什么 删除后果
auto.cnf 存储 server_uuid,用于主从复制唯一标识 ❌ 不建议删除 停止 MySQL 若删除,重启时会生成新 UUID,导致主从复制中断(从库认为是新主)
ibdata1 InnoDB 系统表空间(含数据字典、undo log(若未独立)、双写缓冲等) ❌ 绝对不可删 数据库无法启动,所有 InnoDB 表丢失
ib_logfile* InnoDB 重做日志(崩溃恢复用) ❌ 不可删(除非干净关闭后重建) 必须先干净关闭 MySQL (mysqladmin shutdown) 强制删除可能导致崩溃恢复失败,数据损坏
ibtmp1 InnoDB 临时表空间(存储排序、临时表等) ✅ 可删(但需停机) 停止 MySQL 重启时自动重建;运行时删除会导致临时操作失败
mysql/ 系统数据库(用户、权限、存储过程等) ❌ 绝对不可删 无法登录,权限系统崩溃,实例基本不可用
performance_schema/ 性能监控表(内存中,磁盘仅占位) ✅ 可删(但无意义) 停止 MySQL 重启自动重建,不影响数据
sys/ 系统视图(SQL 脚本生成) ✅ 可删 可通过 mysql_upgrade 或重新安装 sys schema 恢复
#innodb_temp/ InnoDB 临时文件目录(MySQL 8.0+) ✅ 可删(停机) 停止 MySQL 重启自动重建
undo_*. 独立 undo 表空间(若配置 innodb_undo_tablespaces > 0 ❌ 不可删 事务回滚失败,实例无法启动
your_db1/ 用户数据库目录 ⚠️ 可删(但等于删除整个数据库) 备份!确认无用 对应数据库永久丢失
.ibd InnoDB 独立表空间(每表一个) ⚠️ 可删(但等于删表) 备份!或先 DROP TABLE 表数据永久丢失,且可能破坏数据字典一致性(必须通过 SQL 删除)
binlog.* 二进制日志(用于复制、PITR) ✅ 可删(但影响备份/复制) 使用 PURGE BINARY LOGS 命令 手动删除可能导致复制断开、无法时间点恢复
binlog.index 二进制日志索引 ❌ 不要手动删 MySQL 启动时可能报错,无法识别 binlog 文件
relay-log.* 中继日志(从库用) ✅ 可删(但需停复制) STOP SLAVE; RESET SLAVE; 从库复制中断,需重新配置
mysql.sock 本地连接套接字 ✅ 可删(运行时会重建) 本地 socket 连接暂时失败,但 TCP 仍可用
mysql.pid 进程 ID 文件 ✅ 可删 无影响,重启时重建
ca.pem / client-*.pem SSL 证书/密钥 ✅ 可删(若未启用 SSL) 确认未使用 SSL 连接 若启用了 SSL,连接会失败
#ib_*.dblwr Doublewrite buffer 文件(MySQL 8.0.20+) ❌ 不可删 可能导致崩溃恢复失败

🛑 重要原则

  1. 不要直接删除任何 InnoDB 相关文件(ibdata1, ib_logfile, .ibd, undo_*, #innodb_temp)
    → 必须通过 SQL 命令(如 DROP DATABASE, DROP TABLE)或使用 innodb_force_recovery 模式谨慎处理。

  2. 日志文件(binlog, relay log)应通过 SQL 命令管理
    → 使用 PURGE BINARY LOGS TO 'xxx'; 而非 rm

  3. 删除前务必:

    • 停止 MySQL 服务(systemctl stop mysqld
    • 备份整个数据目录(cp -r /var/lib/mysql /backup/
    • 确认文件用途(不确定就别删!)
  4. MySQL 8 的重大变化:

    • 无 .frm 文件:表结构存储在 数据字典(InnoDB 表) 中,位于 mysql.ibd 内。
    • 原子 DDL:依赖于 undo log 和 redo log 的完整性。
    • 默认启用 innodb_file_per_table:每个表有独立 .ibd 文件。

✅ 安全可删除的文件(通常)

  • ibtmp1(停机后)
  • sys/ 目录(可重建)
  • performance_schema/(可重建)
  • 旧的 binlog 文件(通过 PURGE 命令)
  • SSL 证书(若未使用)
  • mysql.sockmysql.pid(临时文件)

🚫 绝对不要删除的文件

  • ibdata1
  • ib_logfile*
  • mysql/ 目录
  • 任何 .ibd 文件(除非你已 DROP TABLE)
  • auto.cnf(除非你接受复制断裂)

💡 建议操作流程(如需清理)

# 1. 停止 MySQL
sudo systemctl stop mysqld

# 2. 备份整个数据目录
sudo cp -r /var/lib/mysql /backup/mysql_$(date +%F)

# 3. 仅删除明确知道用途且可重建的文件(如 ibtmp1)
sudo rm /var/lib/mysql/ibtmp1

# 4. 启动 MySQL
sudo systemctl start mysqld

如有特定场景(如迁移、瘦身、修复),建议使用官方工具:

  • mysqlpump / mysqldump 备份
  • ALTER TABLE ... DISCARD/IMPORT TABLESPACE 管理 .ibd
  • RESET MASTER / PURGE BINARY LOGS 管理 binlog