在我的 MySQL 安装中,数据库文件位于./var/lib/mysql
。我想将其中一个数据库移动到另一个驱动器,所以我按照将一个数据库移动到其他目录的说明并将数据库的数据文件复制到另一个驱动器,使用与原始数据库文件夹相同的名称创建指向该目录的符号链接。以递归方式更改目录和指向 mysql 的符号链接的所有权,与 中的其他目录相同./var/lib/mysql
。
当我重新启动 MySQL 时,一切都运行正常,但有问题的数据库丢失了(这并不重要,因为这是一次试运行。)我检查了日志并发现以下错误:
2018-07-28T02:43:59.449437Z 0 [Warning] InnoDB: Ignoring tablespace `sf_master/tablename` because it could not be opened.
2018-07-28T02:43:59.449465Z 0 [ERROR] InnoDB: The error means the system cannot find the path specified.
2018-07-28T02:43:59.449474Z 0 [ERROR] InnoDB: Cannot open datafile for read-only: './sf_master/tablename.ibd' OS error: 71
我将 selinux 设置为 permissive 以查看是否是该问题,但错误仍然相同。
我确认在 my.cnf 中,symbolic-links=1
并且在重新启动时我已经innodb_force_recovery = 1
数据文件夹如下所示:
-rw-r-----. 1 mysql mysql 56 Apr 24 2017 auto.cnf
drwxr-x---. 2 mysql mysql 4096 Apr 24 2017 mysql
drwxr-x---. 2 mysql mysql 4096 Dec 6 2017 operators
lrwxrwxrwx. 1 mysql mysql 16 Jul 27 22:33 sf_master -> ./nvme/sf_master
drwxr-x---. 2 mysql mysql 8192 Apr 24 2017 sys
笔记:
我将此问题发布在 serverfault 上,因为我认为该问题与我对符号链接的理解以及它们在 linux 文件系统目录中的使用方式或可能是权限有关。我正在运行 centos 7 服务器。
更新:
根据 Wilson Hauck 的要求,更正后的目录如下:
-rw-r-----. 1 mysql mysql 56 Apr 24 2017 auto.cnf
drwxr-x---. 2 mysql mysql 4096 Apr 24 2017 mysql
drwxr-x---. 2 mysql mysql 4096 Dec 6 2017 operators
lrwxrwxrwx. 1 mysql mysql 16 Jul 27 22:33 sf_master -> /nvme/sf_master
drwxr-x---. 2 mysql mysql 8192 Apr 24 2017 sys
这实际上只是一个非常愚蠢的打字错误。
答案1
你的符号链接是错误的。
在 中/var/lib/mysql
,符号链接sf_master -> ./nvme/sf_master
指向/var/lib/mysql/nvme/sf_master
。符号链接的目标必须是完全限定路径,而不是相对于当前目录的路径。前导.
使其成为相对路径。