Назад | Перейти на главную страницу

Заставить php mysqli_connect () использовать TCP

Предыстория: я перехожу на php-fpm с помощью chroot. Раньше я использовал сокет для подключения к mysql. Однако доставить сокет mysql на все хосты - довольно трудная задача. Либо мне нужно смонтировать -o bind, либо жестко привязать сокет к каждому виртуальному хосту. Мне не нравится использовать mount, потому что это загрязняет команду mount большим количеством записей. С другой стороны, жесткая ссылка должна выполняться каждый раз после запуска сервера mysql. Если сервер перезагружается - жесткая ссылка недействительна, поэтому мне придется ее создать заново. С systemd все становится еще сложнее. Я не хочу дойти до этого, если мне действительно не нужно.

Поэтому я хочу подключиться через TCP, но некоторые веб-сайты используют расширение mysqli. Нет четкого способа указать протокол. Если я установил параметр хоста в «localhost», даже если сокет имеет значение null, он все равно пытается подключиться через сокет, что приводит к ошибке. Если я установлю хост на 127.0.0.1, мне будет отказано в доступе. Думаю, гранты я делал вот так:

GRANT .... on database.* to user@localhost identified by '....pass';

Поэтому, если я хочу подключиться к 127.0.0.1, мне нужно сделать

GRANT .... on database.* to user@'127.0.0.1' identified by '....pass';

также. Я как бы хочу иметь только одну запись для каждого пользователя для localhost - это упрощает экспорт пользователей.

Я пробовал установить:

[client]
protocol=tcp

Также:

[mysqld]
skip-name-resolve = 1  # and also tried 0

... безуспешно

Вопрос: Как заставить mysqli_connect использовать TCP вместо сокета и по-прежнему иметь только один хост предоставления для каждого пользователя для localhost.

Информация об ОС: ОС: Centos 7.7 DB: MariaDb 5.5 PHP версии 5.6.40 и 7.3.10 (в зависимости от того, какой vhost)