0

In my installation of MySQL the database files are located in ./var/lib/mysql. I wanted to move one of those databases to another drive, so I followed instructions to move one database to a different directory and copied the data files for the database to a different drive, made a symlink to that directory with the same name as the original database folder. Chowned both the directory recusively and the symlink to mysql, same as the other directories in ./var/lib/mysql.

When I restarted MySQL, everything ran fine, but the database at issue is missing (Not critical because this is a dry run.) I checked the logs and had these errors:

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

I set selinux to permissive to see if that was the problem but the errors are the same.

I confirmed that in my.cnf that symbolic-links=1 and that on the restart I had innodb_force_recovery = 1

The data folder looks like:

-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

NOTE:

I'm posting this problem on serverfault because I think the problem has to do with my understanding of symlinks and the way they are used on directories in linux file systems, or possibly permissions. I'm running a centos 7 server.

UPDATE:

Per Wilson Hauck's request the corrected directory is:

-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

This was really just a very dumb typo error.

Altimus Prime
  • 334
  • 2
  • 7
  • 20

1 Answers1

2

Your symlink is wrong.

In /var/lib/mysql, the symlink sf_master -> ./nvme/sf_master points to /var/lib/mysql/nvme/sf_master. The target of the symlink needs to be a fully-qualified path, not relative to the current directory. The leading . makes it relative.

Michael - sqlbot
  • 21,988
  • 1
  • 57
  • 81
  • 1
    I was issuing the commands from the root folder `/` so I mistakenly thought it was relative to root, not to where the symlink was. Thank you. Everything is working right now. – Altimus Prime Jul 28 '18 at 04:50
  • @AuntJemima Please post the CURRENT data folder content so we can the corrective action you applied for the link to work in your environment. – Wilson Hauck Aug 02 '19 at 22:34