Php mysql local socket

Php mysql local socket

Поведение этих функций зависит от установок в php.ini .

Параметры конфигурации MySQLi

Имя По умолчанию Место изменения Список изменений
mysqli.allow_local_infile «0» PHP_INI_SYSTEM До PHP 7.2.16 и 7.3.3 значением по умолчанию было «1».
mysqli.local_infile_directory PHP_INI_SYSTEM Доступно, начиная с PHP 8.1.0.
mysqli.allow_persistent «1» PHP_INI_SYSTEM
mysqli.max_persistent «-1» PHP_INI_SYSTEM
mysqli.max_links «-1» PHP_INI_SYSTEM
mysqli.default_port «3306» PHP_INI_ALL
mysqli.default_socket NULL PHP_INI_ALL
mysqli.default_host NULL PHP_INI_ALL
mysqli.default_user NULL PHP_INI_ALL
mysqli.default_pw NULL PHP_INI_ALL
mysqli.reconnect «0» PHP_INI_SYSTEM Удалено, начиная с PHP 8.2.0
mysqli.rollback_on_cached_plink «0» PHP_INI_SYSTEM

Прочие детали и определения констант PHP_INI_* смотрите в разделе конфигурационные изменения.

Краткое разъяснение конфигурационных директив.

Разрешает доступ к локальным файлам, с точки зрения PHP, с помощью инструкций LOAD DATA.

Позволяет ограничить загрузку LOAD DATA файлами, расположенными в указанном каталоге.

Включает возможность создавать постоянные соединения с помощью mysqli_connect() .

Максимально возможное количество постоянных соединений. Для неограниченного количества установите в 0.

Максимальное количество соединений MySQL на процесс.

TCP-порт, используемый по умолчанию для соединения с сервером баз данных, если другое значение явно не указано. Если значение по умолчанию не указано, оно будет получено из переменной среды окружения MYSQL_TCP_PORT , директивы mysql-tcp в файле /etc/services или константы MYSQL_PORT , которая задаётся во время компиляции, в указанном порядке. Win32 использует только константу MYSQL_PORT .

Имя сокета по умолчанию, которое используется для соединения с локальной базой данных, если имя сокета не было указано явно.

Имя сервера, которое используется, если имя не было указано явно.

Имя пользователя, используемое по умолчанию, если имя не было указано явно.

Пароль, используемый по умолчанию для подключения к БД, если пароль не был явно указан.

Автоматически восстанавливать соединение при его потере.

Замечание: Эта настройка игнорируется драйвером «mysqlnd» и была удалена в PHP 8.2.0.

Если этот параметр включён, закрытие постоянного соединения откатит любые ожидающие транзакции этого соединения, прежде чем оно будет возвращено в пул постоянных соединений. В противном случае ожидающие соединения будут откатываться только тогда, когда соединение будет повторно использовано или когда оно будет фактически закрыто.

Пользователи не могут устанавливать MYSQL_OPT_READ_TIMEOUT с помощью API-вызовов или установки конфигурационных значений во время работы скрипта. Учтите, что если бы это было возможно, то libmysqlclient и потоки по-разному обрабатывали бы значение MYSQL_OPT_READ_TIMEOUT .

Источник

Php mysql local socket

Сервер MySQL поддерживает различные способы передачи данных. Соединения могут использовать протоколы TCP/IP, сокеты Unix-доменов или именованные пайпы Windows.

Имя хоста localhost имеет особое значение. Оно используется только в сокетах Unix доменов. Чтобы открыть TCP/IP-соединение с локальным хостом, необходимо использовать 127.0.0.1 вместо имени хоста localhost .

Читайте также:  Java транзакции уровень изоляции

Пример #1 Специальное назначение localhost

$mysqli = new mysqli ( «localhost» , «user» , «password» , «database» );

echo $mysqli -> host_info . «\n» ;

$mysqli = new mysqli ( «127.0.0.1» , «user» , «password» , «database» , 3306 );

echo $mysqli -> host_info . «\n» ;

Результат выполнения данного примера:

Localhost via UNIX socket 127.0.0.1 via TCP/IP

Умолчания для параметров соединений

В зависимости от функции, осуществляющей подключение, какие-то параметры можно не задавать. Если параметр не задан, модуль попытается использовать значение по умолчанию для этого параметра, которое задано в конфигурационном файле PHP.

Пример #2 Задание значений по умолчанию

mysqli.default_host=192.168.2.27 mysqli.default_user=root mysqli.default_pw="" mysqli.default_port=3306 mysqli.default_socket=/tmp/mysql.sock

Далее, чтобы установить соединение, функция передаёт параметры в клиентскую библиотеку, которой пользуется модуль. Если библиотека обнаружит пустые или отсутствующие параметры, она может подставить вместо них свои встроенные значения по умолчанию.

Встроенные библиотечные значения по умолчанию для параметров соединения

Если имя хоста не задано или передана пустая строка, клиентская библиотека использует для подключения к Unix-сокету хоста localhost . Если сокет не задан или передана пустая строка, и при этом запрошено подключение к Unix-сокету, библиотека попытается подключиться к сокету /tmp/mysql.sock .

В Windows-системах, если в качестве имени хоста передаётся . , библиотека попытается открыть соединение на основе именованного пайпа. В этом случае имя сокета будет воспринято как имя пайпа. Если имя сокета не задано, то будет использовано значение \\.\pipe\MySQL .

Если соединение не использует ни сокет Unix-домена, ни именованный пайп Windows, и при этом не задан порт для подключения, библиотека использует номер порта 3306 .

В драйвере mysqlnd и клиентской библиотеке MySQL (libmysqlclient) заложена та же логика определения умолчаний.

Настройки соединения позволяют, например, задать какие-то команды, которые нужно выполнить сразу после подключения, или отдать распоряжение использовать определённый набор символов. Настройки должны быть заданы до подключения к серверу.

Когда требуется задать настройки соединения, операция подключения выполняется в три этапа: функцией mysqli_init() или mysqli::__construct() создаётся дескриптор подключения, затем подключение настраивается с помощью функции mysqli::options() , и наконец устанавливается сетевое соединение с сервером посредством функции mysqli::real_connect() .

Объединение подключений в пул

Модуль mysqli поддерживает постоянные соединения с базой данных, которые представляют из себя специальный вид объединяемых соединений. По умолчанию каждое открытое скриптом соединение закрывается либо самим скриптом в ходе выполнения, либо автоматически по завершении работы скрипта. Постоянные соединения отличаются тем, что не закрываются, а помещаются в пул для повторного использования в дальнейшем. Если требуется подключиться к тому же серверу и базе данных, с тем же именем пользователя, паролем, сокетом и портом, то вместо создания нового подключения из пула извлекается уже существующее. Повторное использование подключений позволяет избежать накладных расходов на создание новых соединений.

Читайте также:  Code blocks and java

Каждый PHP-процесс использует свой пул подключений mysqli. В зависимости от конфигурации веб-сервера, PHP-процесс может обслуживать один или несколько запросов. Соответственно, соединение из пула могут последовательно использовать несколько скриптов.

Новое подключение создаётся, только если в пуле не найдётся свободного подключения с теми же данными хоста, имени пользователя, пароля, сокета, порта и базы данных по умолчанию. Механизм постоянных соединений можно включать и выключать PHP директивой mysqli.allow_persistent. Максимальное количество соединений, которые может открыть скрипт, ограничено значением mysqli.max_links. Максимальное количество соединений, которые может открыть один PHP-процесс, ограничено значением mysqli.max_persistent. Следует заметить, что веб-сервер может порождать множество PHP процессов.

Главный недостаток постоянных подключений заключается в том, что перед повторным использованием их состояние не сбрасывается к изначальному. Например, открытые и незавершённые транзакции не будут автоматически откатываться. Также, если во время нахождения соединения в пуле для процесса изменились какие-либо разрешения или уровни доступа, этот факт никак не отразится на подключении при его извлечении из пула. Такое поведение может привести к нежелательным результатам. Хотя, с другой стороны, название постоянный можно рассматривать, как обещание, что подключение и правда останется в том состоянии, в котором оно было помещено в пул.

Модуль mysqli поддерживает обе интерпретации термина постоянное соединение: состояние соединения может сохраняться, а может и сбрасываться в изначальное. По умолчанию при извлечении из пула, соединение сбрасывается. mysqli делает это неявным вызовом функции mysqli::change_user() каждый раз, когда подключение используется повторно. С точки зрения пользователя подключение выглядит, как только что созданное.

Однако, вызов функции mysqli::change_user() довольно дорогостоящая операция. Для улучшения быстродействия можно перекомпилировать модуль с установленным флагом MYSQLI_NO_CHANGE_USER_ON_PCONNECT .

Выбор между безопасным поведением подключений и наилучшим быстродействием остаётся за пользователем. Здесь нельзя дать однозначного совета. Для простоты использования, по умолчанию включён безопасный режим с очисткой соединений.

Источник

Почему не получается подключиться к MySQL через сокет?

Здравствуйте. На Debian Jessie установил Nginx + PHP7-FPM + MariaDB 10. Пытаюсь выполнить тестовый скриптик:

 printf("Версия сервера MySQL: %s\n", $mysqli->server_info); $mysqli->close(); ?>
$mysqli = new mysqli(":/var/run/mysqld/mysqld.sock", "root", "password");
$mysqli = new mysqli("localhost:/var/run/mysqld/mysqld.sock", "root", "password");
$mysqli = new mysqli("localhost", "root", "password");

Подскажите, пожалуйста, каким образом заставить PHP обращаться к БД через сокет? Что-то не могу сообразить, в чём дело.

P.S. Сам файл сокета на месте:

# php-fpm7.0 —info | grep .default_socket
mysqli.default_socket => no value => no value
pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock

zoonman

У вас по факту сокет-файл находится в /run/mysqld/mysqld.sock, а вы присоедняетесь к /var/run/mysqld/mysqld.sock

Плюс читаем документацию, а там сокет идет последним параметром.
Часть первая, удостоверьтесь, что сокет файл в нужном месте. Подключитесь к MySQL и посмотрите, что у вас тут:
show variables like ‘socket’
У меня там /opt/local/var/run/mariadb-10.0/mysqld.sock.

Читайте также:  Подавлять все ошибки php

Значит мне нужно исправить php.ini

; я ленивый, поэтому настраиваю все варианты подключений [MySQL] mysql.default_socket = /opt/local/var/run/mariadb-10.0/mysqld.sock [MySQLi] mysqli.default_socket = /opt/local/var/run/mariadb-10.0/mysqld.sock [Pdo_mysql] pdo_mysql.default_socket=/opt/local/var/run/mariadb-10.0/mysqld.sock

После этого ваши скрипты должны подключаться через сокет.

// здесь должно быть соединение через сокет $mysqli = new mysqli("localhost", "root", "password"); // можно принудительно указать путь к сокету // я очень не рекомендую так делать, // т.к. возможны проблемы с развертыванием ваших скриптов в других окружениях $mysqli = new mysqli("localhost", "root", "password", "db", 0, "/opt/local/var/run/mariadb-10.0/mysqld.sock");

Источник

Php mysql local socket

The behaviour of these functions is affected by settings in php.ini .

MySQL Configuration Options

Name Default Changeable Changelog
mysql.allow_local_infile «1» PHP_INI_SYSTEM
mysql.allow_persistent «1» PHP_INI_SYSTEM
mysql.max_persistent «-1» PHP_INI_SYSTEM
mysql.max_links «-1» PHP_INI_SYSTEM
mysql.trace_mode «0» PHP_INI_ALL
mysql.default_port NULL PHP_INI_ALL
mysql.default_socket NULL PHP_INI_ALL
mysql.default_host NULL PHP_INI_ALL
mysql.default_user NULL PHP_INI_ALL
mysql.default_password NULL PHP_INI_ALL
mysql.connect_timeout «60» PHP_INI_ALL

For further details and definitions of the PHP_INI_* modes, see the Where a configuration setting may be set.

Here’s a short explanation of the configuration directives.

Allow accessing, from PHP’s perspective, local files with LOAD DATA statements

Whether to allow persistent connections to MySQL.

The maximum number of persistent MySQL connections per process.

The maximum number of MySQL connections per process, including persistent connections.

Trace mode. When mysql.trace_mode is enabled, warnings for table/index scans, non free result sets, and SQL-Errors will be displayed. (Introduced in PHP 4.3.0)

The default TCP port number to use when connecting to the database server if no other port is specified. If no default is specified, the port will be obtained from the MYSQL_TCP_PORT environment variable, the mysql-tcp entry in /etc/services or the compile-time MYSQL_PORT constant, in that order. Win32 will only use the MYSQL_PORT constant.

The default socket name to use when connecting to a local database server if no other socket name is specified.

The default server host to use when connecting to the database server if no other host is specified. Doesn’t apply in SQL safe mode.

The default user name to use when connecting to the database server if no other name is specified. Doesn’t apply in SQL safe mode.

The default password to use when connecting to the database server if no other password is specified. Doesn’t apply in SQL safe mode.

Connect timeout in seconds. On Linux this timeout is also used for waiting for the first answer from the server.

User Contributed Notes

Источник

Оцените статью