Подключение к Mysql через Named Pipe (Windows)

Подключение через именованный pipe функцией mysql_connect в Windows висит давним багом в трекере PHP При этом есть отзывы, что периодически (в частности, в версиях PHP 5.3…) данная функциональность отваливается. Немного информации о подключении через Named Pipe (ИМХО, перевод “именованный пайп” менее лаконичен, а “именованный канал” может ввести в заблуждение) под катом.

В Windows реализованы так называемые Именованные каналы (Named Pipe) - во многом похожие на socket-ы UNIX-систем. Обращаться к ним можно по специальному пути вида
\\.\pipe\yourpipename

Для включения в MySQL возможности работы через именованный пайп добавляем в секцию [mysqld] файла my.ini (В Denwer располагается в Z:\usr\local\mysql-5.5\my.ini):
port=3306
# закомментировать, если подключения по сети не требуются.
skip-networking
enable-named-pipe

Не забываем перезапустить MySQL для применения изменений.

Для обращения к pipe используем стандартный механизм Windows:

On Windows, to use named pipes, you should use “.” (dot) as host, which will in turn use the default named pipe name \\.\pipe\MySQL (if you use the name in your code you should escape the slashes, if you use double quotes “\\\\.\\pipe\\MySQL”.

Ещё одна особенность связана с использованием open_basedir restriction.

- Named pipe will fail when open_basedir is in effect

Что ещё интереснее - подключение через PIPE не обязательно гарантирует выигрыш в скорости:

(Named pipes are slower than TCP/IP in many Windows configurations.)

Подключение PHPMyadmin к MySQL через Named Pipe

Учитывая всё вышесказанное, а также особенности экранирования бэкслеша в PHP, прописываем в конфиг phpmyadmin:
$cfg['Servers'][$i]['host'] = '.';
$cfg['Servers'][$i]['connect_type'] = 'socket';
$cfg['Servers'][$i]['socket'] = '\\\\.\\pipe\\yourpipename';

Ссылки:
https://bugs.php.net/bug.php?id=48082 - собственно баг в PHP
http://dev.mysql.com/doc/refman/5.0/en/connecting.html - подключение к MySQL

On Windows, you can force a MySQL client to use a named-pipe connection by specifying the –pipe or –protocol=PIPE option, or by specifying . (period) as the host name. If named-pipe connections are not enabled, an error occurs. Use the –socket option to specify the name of the pipe if you do not want to use the default pipe name.

Метки:

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

Добавить комментарий