最近在使用 MySQL 数据库时,我遇到了一个很烦人的问题:我找不到 data 文件!
$ sudo find / -name "*.frm"
/usr/local/mysql/data/db1/table1.frm
/usr/local/mysql/data/db1/table2.frm
/usr/local/mysql/data/db2/table3.frm
...
根据上面的命令,我可以找到所有的 .frm 文件,但是找不到对应的 .ibd 文件。
这个问题一般有两种可能:
- 文件被误删
- 数据存储在了其他地方
我首先检查了 Trash 中的文件,发现没有被误删的文件。
$ sudo ls -la ~/.Trash/
total 0
接着,我查看了 MySQL 的配置文件 my.cnf,发现数据存储目录被指定为 /usr/local/mysql-8.0.22-macos10.15-x86_64/data,而不是 /usr/local/mysql/data。
$ cat /etc/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql-8.0.22-macos10.15-x86_64/data
...
最终,我在 /usr/local/mysql-8.0.22-macos10.15-x86_64/data 中找到了所有的 .ibd 文件。
总结一下,当你无法找到 MySQL 数据库中的 data 文件时,可以先查看 Trash 中有没有误删的文件,然后检查 my.cnf 中的 datadir 配置是否正确。