В моей установке 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
. Целью символической ссылки должен быть полный путь, а не относительно текущего каталога. Ведущий .
делает его относительным.