Метод подключения к базе данных mysql для phpmyadmin сокет unix или tcp
The MySQL server supports the use of different transport layers for connections. Connections use TCP/IP, Unix domain sockets or Windows named pipes.
The hostname localhost has a special meaning. It is bound to the use of Unix domain sockets. To open a TCP/IP connection to the localhost, 127.0.0.1 must be used instead of the hostname 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" ;
The above example will output:
Connection parameter defaults
Depending on the connection function used, assorted parameters can be omitted. If a parameter is not provided, then the extension attempts to use the default values that are set in the PHP configuration file.
The resulting parameter values are then passed to the client library that is used by the extension. If the client library detects empty or unset parameters, then it may default to the library built-in values.
Built-in connection library defaults
If the host value is unset or empty, then the client library will default to a Unix socket connection on localhost . If socket is unset or empty, and a Unix socket connection is requested, then a connection to the default socket on /tmp/mysql.sock is attempted.
On Windows systems, the host name . is interpreted by the client library as an attempt to open a Windows named pipe based connection. In this case the socket parameter is interpreted as the pipe name. If not given or empty, then the socket (pipe name) defaults to \\.\pipe\MySQL .
If neither a Unix domain socket based not a Windows named pipe based connection is to be established and the port parameter value is unset, the library will default to port 3306 .
The mysqlnd library and the MySQL Client Library (libmysqlclient) implement the same logic for determining defaults.
Connection options are available to, for example, set init commands which are executed upon connect, or for requesting use of a certain charset. Connection options must be set before a network connection is established.
For setting a connection option, the connect operation has to be performed in three steps: creating a connection handle with mysqli_init() or mysqli::__construct() , setting the requested options using mysqli::options() , and establishing the network connection with mysqli::real_connect() .
The mysqli extension supports persistent database connections, which are a special kind of pooled connections. By default, every database connection opened by a script is either explicitly closed by the user during runtime or released automatically at the end of the script. A persistent connection is not. Instead it is put into a pool for later reuse, if a connection to the same server using the same username, password, socket, port and default database is opened. Reuse saves connection overhead.
Every PHP process is using its own mysqli connection pool. Depending on the web server deployment model, a PHP process may serve one or multiple requests. Therefore, a pooled connection may be used by one or more scripts subsequently.
If an unused persistent connection for a given combination of host, username, password, socket, port and default database cannot be found in the connection pool, then mysqli opens a new connection. The use of persistent connections can be enabled and disabled using the PHP directive mysqli.allow_persistent. The total number of connections opened by a script can be limited with mysqli.max_links. The maximum number of persistent connections per PHP process can be restricted with mysqli.max_persistent. Please note that the web server may spawn many PHP processes.
A common complain about persistent connections is that their state is not reset before reuse. For example, open and unfinished transactions are not automatically rolled back. But also, authorization changes which happened in the time between putting the connection into the pool and reusing it are not reflected. This may be seen as an unwanted side-effect. On the contrary, the name persistent may be understood as a promise that the state is persisted.
The mysqli extension supports both interpretations of a persistent connection: state persisted, and state reset before reuse. The default is reset. Before a persistent connection is reused, the mysqli extension implicitly calls mysqli::change_user() to reset the state. The persistent connection appears to the user as if it was just opened. No artifacts from previous usages are visible.
The mysqli::change_user() call is an expensive operation. For best performance, users may want to recompile the extension with the compile flag MYSQLI_NO_CHANGE_USER_ON_PCONNECT being set.
It is left to the user to choose between safe behavior and best performance. Both are valid optimization goals. For ease of use, the safe behavior has been made the default at the expense of maximum performance.
Материал статьи предназначен для начинающих, профессионалы Хабра в большинстве не нуждаются в изложении этого вопроса. Тем не менее, те, кто делает первые шаги в работе с MySQL часто задают подобные вопросы. Статья написан для тех, кто впервые столкнулся с необходимостью установить удаленное соединение с базой данных MySQL. В статье рассказывается о сложностях, которые могут возникнуть при настройке удаленного соединения и о методах их преодоления.
1. Что мы обычно используем:
На самом деле, этот путь через Местный носок соединение
Смотри красную линию @localhost
Как настроить соединение с удаленной базой?
В MySQL пользователь характеризуется двумя параметрами: именем и хостом, с которого он может обращаться. По умолчанию доступ разрешен только с локальной машины, т.е. для пользователя user@localhost. Права на доступ пользователям даются с помощью команды GRANT. Команда выполняется под рутом.
Например, если я хочу создать юзера, который сможет коннектиться с любого хоста с полными правами, то следует выполнить следующую команду:
GRANT ALL PRIVILEGES ON `имя_базы`.* TO myuser@% IDENTIFIED BY 'пароль';
Примечание. Обратите внимание, что данная команда дает доступ пользователю myuser со всех IP кроме 127.0.0.1, соответсвующего localhost.
Для пользователя myuser@localhost необходимо давать права отдельной командой GRANT.
Если вы решите обратиться к локальной машине как к удаленной, используя протокол TCP/IP, то не забывайте, что myuser@localhost и myuser@ip_собственного_компа это разные пользователи и каждому из них права нужно давать отдельной командой.
Второй пример показывает как дать право читать таблицу time_zone в базе mysql пользователю myuser с машины 192.168.0.76
с паролем mypassy:
GRANT SELECT ON mysql.time_zone TO myuser@192.168.0.76 IDENTIFIED BY 'mypassy';
1、mysqld
Запустите сервер MySQL: ./mysqld --defaults-file=/etc/my.cnf --user=root
Клиентское соединение:
Возникающие сложности
Если после всех действий у вас возникает ошибка
(Can't connect to Mysql Server on 'ваш IP'(10061)),
значит соединение блокирует firewall (windows firewall, outpost, антивирус или еще что-то).
Предполагая, что есть удаленный сервер, и у меня есть клиент phpMyAdmin, установленный локально на моем компьютере. Как я могу получить доступ к этому серверу и управлять им через клиент phpMyAdmin? Это возможно?
вы также можете установить phpmyadmin образ докера локально и подключиться к удаленному серверу MySQL. Более подробная информация здесь : docker run --name myadmin -d -e PMA_HOST= -e PMA_PORT= -p 8080:80 phpmyadmin/phpmyadmin
Просто добавьте следующие строки в ваш /etc/phpmyadmin/config.inc.php файл внизу:
, Вы получите выпадающее меню «Текущий сервер:» с «127.0.0.1» и с тем, что вы предоставили с помощью кулачкового переключателя «$ cfg ['Servers'] [$ i] ['host']» между серверами.
Это $i++ важный момент, так как это не заставит нас потерять соединение с базой данных по умолчанию localhost .
Вышеуказанный метод абсолютно верен, но почему вы все не сказали мне, что мне придется добавить или получить его, добавил мой IP-адрес в Remote mySql. иначе это не будет работать. Пожалуйста, друзья отметьте это тоже
Если кто-то работает с системой Apple, то config.inc.php файл находится по адресу Applications/XAMPP/xamppfiles/phpmyadmin/config.inc.php file.
Конечно, можно получить доступ к удаленному серверу MySQL из локального экземпляра phpMyAdmin, как указывали другие ответы. И чтобы это работало, вам необходимо настроить сервер MySQL удаленного сервера на прием удаленных подключений и разрешить трафик через брандмауэр для номера порта, который прослушивает MySQL. Я предпочитаю немного другое решение с использованием SSH-туннелирования .
Следующая команда настроит SSH-туннель, который будет перенаправлять все запросы, сделанные на порт 3307 с вашего локального компьютера, на порт 3306 на удаленном компьютере:
При появлении запроса вы должны ввести пароль для пользователя root на удаленном компьютере. Это откроет туннель. Если вы хотите запустить это в фоновом режиме, вам нужно добавить -f аргумент и настроить SSH без пароля между вашим локальным компьютером и удаленным компьютером.
После того, как ваш туннель SSH заработал, вы можете добавить удаленный сервер в список серверов в вашем локальном phpMyAdmin, изменив /etc/phpmyadmin/config.inc.php файл. Добавьте в конец файла следующее:
Я написал более подробный пост в блоге именно об этом, на случай, если вам понадобится дополнительная помощь.
Думаю, это безопасное решение. Открытие mySQL для прямого удаленного доступа обычно считается плохой практикой безопасности, если это не является абсолютно необходимым.
Ответ Ч. Хилла не совсем правильный. Обратите внимание: адрес привязки должен быть установлен на адрес обратной связи в файле mysql my.cnf.
Не нужно быть root на удаленном хосте. мост работает отлично, спасибо! Однако я не уверен в конфигурации, предпочитаю ответ Суреша Камруши. $++ обязательно должна быть первой строкой, а не последней, по крайней мере, для моего phpmyadmin.conf по умолчанию.
Я только что натолкнулся на случай, когда мне нужно было изменить $ cfg ['Servers'] [$ i] ['auth_type'] = 'config'; // сохранить его как конфигурацию в $ cfg ['Servers'] [$ i] ['auth_type'] = 'cookie'; // сохранить как конфиг. Так что спасибо за этот совет!
Если по какой-либо причине ссылка умирает, вы можете использовать следующие шаги:
- Найдите файл конфигурации phpMyAdmin, который называется config.inc.php
- Найти $cfg['Servers'][$i]['host'] переменную и установите для нее IP или имя хоста вашего удаленного сервера.
- Найдите $cfg['Servers'][$i]['port'] переменную и установите ее на удаленный порт mysql. Обычно это 3306
- Найти $cfg['Servers'][$i]['user'] и $cfg['Servers'][$i]['password'] переменные и установить их на ваше имя пользователя и пароль для удаленного сервера
Без правильной конфигурации сервера соединение может быть медленнее, чем, например, локальное соединение, вероятно, будет немного быстрее использовать IP-адреса вместо имен хостов, чтобы серверу не приходилось искать IP-адрес по имени хоста.
Кроме того, помните, что имя пользователя и пароль вашей удаленной базы данных хранятся в виде простого текста, когда вы подключаетесь таким образом, поэтому вы должны принять меры, чтобы никто не мог получить доступ к этому файлу конфигурации. В качестве альтернативы вы можете оставить переменные имени пользователя и пароля пустыми, чтобы вам предлагалось вводить их каждый раз при входе в систему, что намного безопаснее.
Вам также необходимо, чтобы брандмауэр на экземпляре базы данных разрешал трафик и пользователь на сервере БД с привилегиями для удаленного доступа.
Могу я задать вопрос здесь? Поскольку я новичок, мне любопытно, в какой форме должна быть ссылка, которую я хочу ввести в браузере, чтобы получить доступ к базе данных через phpMyAdmin, который установлен на сервере моего клиента, который сам размещает веб-сайт.
Файл config.inc.php содержит параметры конфигурации для вашей установки phpMyAdmin. Он использует массив для хранения наборов параметров конфигурации для каждого сервера, к которому он может подключиться, и по умолчанию существует только один, ваш собственный компьютер или localhost. Чтобы подключиться к другому серверу, вам нужно будет добавить еще один набор параметров конфигурации в массив конфигурации. Вы должны отредактировать этот файл конфигурации.
Сначала откройте файл config.inc.php, который находится в папке phpMyAdmin . На сервере wamp вы можете найти его в папке wamp \ apps \ phpmyadmin . Затем добавьте в этот файл следующую часть.
Посмотрим, что означают эти переменные.
После добавления этой части конфигурации перезапустите сервер, и теперь ваша домашняя страница phpMyAdmin изменится, и на ней появится поле для выбора сервера.
Теперь вы можете выбрать сервер и получить доступ к своей удаленной базе данных, введя имя пользователя и пароль для этой базы данных.
могли бы быть более точным и объяснить больше о вашем ответе. Ответы на ссылки хороши, но они могут быть недоступны, если ссылка повреждена по какой-либо причине.
Как указано в ответе c.hill , если вам нужно безопасное решение, я бы посоветовал открыть SSH-туннель на ваш сервер.
Вот как это сделать для пользователей Windows :
Скачайте Plink and Putty с сайта Putty и поместите файлы в папку по вашему выбору (в моем примере C:\Putty )
Откройте консоль Windows и перейдите в папку Plink: cd C:\Putty
Откройте туннель SSH и перенаправьте на порт 3307:
plink -L 3307:localhost:3306 username@server_ip -i path_to_your_private_key.ppk
Наконец, вы можете настроить PhpMyAdmin:
- Добавьте удаленный сервер в локальную конфигурацию PhpMyAdmin, добавив следующую строку в конец config.inc.php
Строки для добавления:
Если вы не хотите открывать консоль каждый раз, когда вам нужно подключиться к удаленному серверу, просто создайте командный файл (сохранив 2 командные строки в файле .bat).
Сервер MySQL поддерживает различные способы передачи данных. Соединения могут использовать протоколы TCP/IP, сокеты Unix-доменов или именованные пайпы Windows.
Имя хоста localhost имеет особое значение. Оно используется только в сокетах Unix доменов. Чтобы открыть TCP/IP-соединение с локальным хостом, необходимо использовать 127.0.0.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" ;
Результат выполнения данного примера:
Умолчания для параметров соединений
В зависимости от функции, осуществляющей подключение, какие-то параметры можно не задавать. Если параметр не задан, модуль попытается использовать значение по умолчанию для этого параметра, которое задано в конфигурационном файле PHP.
Далее, чтобы установить соединение, функция передаёт параметры в клиентскую библиотеку, которой пользуется модуль. Если библиотека обнаружит пустые или отсутствующие параметры, она может подставить вместо них свои встроенные значения по умолчанию.
Встроенные библиотечные значения по умолчанию для параметров соединения
Если имя хоста не задано или передана пустая строка, клиентская библиотека использует для подключения к 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 поддерживает постоянные соединения с базой данных, которые представляют из себя специальный вид объединяемых соединений. По умолчанию каждое открытое скриптом соединение закрывается либо самим скриптом в ходе выполнения, либо автоматически по завершении работы скрипта. Постоянные соединения отличаются тем, что не закрываются, а помещаются в пул для повторного использования в дальнейшем. Если требуется подключиться к тому же серверу и базе данных, с тем же именем пользователя, паролем, сокетом и портом, то вместо создания нового подключения из пула извлекается уже существующее. Повторное использование подключений позволяет избежать накладных расходов на создание новых соединений.
Каждый 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 .
Выбор между безопасным поведением подключений и наилучшим быстродействием остаётся за пользователем. Здесь нельзя дать однозначного совета. Для простоты использования, по умолчанию включён безопасный режим с очисткой соединений.
Как установить соединение с удаленной базой?
Из четырех возможных протоколов удаленное подключение позволяет только TCP/IP, поэтому первым требованием является доступность компьютера из сети по TCP/IP.
Далее необходимо добавить имя хоста (или ip адрес машины, на которой расположена база) в строке подключения:
mysql --host=host_name
Обратите внимание, что указание в качестве имени хоста значения localhost (или же отсутствие такого параметра, что то же самое, так как это дефолтное значение) приводит к обращению на локальную машину.
2、mysqld_safe
Запустите сервер MySQL: ./mysqld_safe --defaults-file=/etc/my.cnf --user=root &
Клиентское соединение:
3、mysql.server
Запустите сервер MySQL: service mysql.server
Клиентское соединение: то же, что 1, 2
Примечание: некоторые машины не будут работать.
Четыре способа подключения mysql-port, TCP, SOCKET, PIPE, SHARED MEMORY
Четыре метода подключения mysql:
4、mysqld_multi
mkdir $MYSQL_BASE/data2
cat /etc/my.cnf
Получите результат:
Запустите сервер MySQL: ./mysqld_multi --defaults-file=/etc/my.cnf start 3306-3307
Завершите работу сервера MySQL: mysqladmin shutdown
Во-вторых, подключиться через порт
Необходимо добавить номер порта, IP-адрес
MySQL, кроме самых распространенных TCP соединение В дополнение к способу, также предоставьте SOCKET (метод подключения по умолчанию LINUX) 、 PIPE и SHARED Способ подключения ПАМЯТЬ.
Параметры запуска сервера и клиента для каждого метода подключения, а также значения по умолчанию для подключения показаны в следующей таблице:
TCP-соединение (Linux, Windows):
целевой параметр загрузки по умолчанию
SOCKET соединение (Linux):
целевой параметр загрузки по умолчанию
ТРУБНОЕ соединение (Windows):
целевой параметр загрузки по умолчанию
ОБЩАЯ ПАМЯТЬ (Windows):
целевой параметр загрузки по умолчанию
Подробное описание и примеры некоторых других способов:
Читайте также: