В моей установке 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 разрешающую способность, чтобы увидеть, была ли это проблема, но ошибки остались прежними.
Я подтвердил, что в 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.
ОБНОВИТЬ:
По запросу Уилсона Хаука исправленный каталог:
-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
. Целью символической ссылки должен быть полный путь, а не относительно текущего каталога. Ведущий .
делает его относительным.