在我安装的 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
这实际上只是一个非常愚蠢的拼写错误。
您的符号链接错误。
在
/var/lib/mysql
中,符号链接sf_master -> ./nvme/sf_master
指向/var/lib/mysql/nvme/sf_master
. 符号链接的目标需要是完全限定的路径,而不是相对于当前目录。领先.
使其相对。