Если вы включили SELinux, mysql не будет записывать в каталог, если он не имеет надлежащего контекста. Первый тип getenforce из командной строки. Если он возвращает «Enforcing», SELinux включен, и вы должны применить конкретный контекст SELinux к каталогу, который вы пытаетесь прочитать/записать. Это добавление к правильному разрешению. Перейдите в каталог и введите «ls -Z», и вы увидите SELinux conetext. Посмотрите на контекст object_r. Если это не mysqld_db_t, то ваш процесс не сможет читать/записывать в каталог независимо от разрешений.
Убедитесь, что команда 'semanage' установлена так, что вы можете установить контекст. Чтобы увидеть, как выглядит контекст файла SELinux для mysql, введите в командной строке следующую команду:
semanage fcontext -l | grep mysql
Вы увидите довольно много строк, но посмотрите конкретно на/var/lib/mysql, на которые может писать mysql. Fcontext для этого каталога - mysqld_db_t. Это то, что вам нужно применить к каталогу, который вы хотите, чтобы ваш процесс читал и писал. Вы делаете это следующим образом:
semanage fcontext -a -t mysqld_db_t '/somedir(/.*)?'
Не забудьте одинарные кавычки вокруг каталога. Затем вы хотите убедиться, что fcontext применяется рекурсивно к этому каталогу. Введите следующее:
restorecon -RFvv/somedir
Это гарантирует, что все существующие файлы и подкаталоги имеют надлежащий fcontext. Mysql может читать и писать, предполагая, что разрешения правильные. В первый раз, когда я это сделал, я споткнулся, потому что у меня была настройка моего каталога, чтобы кто-нибудь мог читать, но не писать. Поэтому я смог использовать команду mysql 'infile', но не 'outfile'. Убедитесь, что пользователь mysql может писать в каталог.
Если вы не заботитесь о SELinux, вы можете отключить его и избежать всего, что я изложил выше. Мне нравится дополнительный уровень безопасности, поэтому я работаю с ним.
Вопрос об обновлении с использованием ОС –
@DavidJashi это сделано :) –