Признаки:
mysql -h a.b.c.d -u user -p -D db
.artisan migrate
.SQLSTATE[HY000] [2003] Can’t connect to MySQL server on ‘a.b.c.d’ (13)
Что я делаю неправильно? (Я сам отвечающий за потомство.)
Ключом к этой проблеме является (13)
, что означает «Permission Denied» (через perror
). Поскольку я могу подключиться из командной строки, разрешение должно быть в веб-приложении. Поскольку я знаю, что учетные данные в веб-приложении совпадают с учетными данными в командной строке, единственное, что осталось, - это веб-сервер.
Через strace
я обнаружил, что SELinux блокирует его. Чтобы исправить:
sudo setsebool -P httpd_can_network_connect = 1
При этом SELinux постоянно разрешает сетевые подключения вне httpd.
Чтобы увидеть, какие флаги установлены в процессах httpd
getsebool -a | grep httpd
Чтобы разрешить Apache подключаться к удаленной базе данных через SELinux
setsebool httpd_can_network_connect_db 1
Используйте параметр -P, чтобы сделать изменение постоянным. Без этой опции логическое значение сбрасывалось бы на 0 при перезагрузке.
setsebool -P httpd_can_network_connect_db 1