Php удаленный сервер mysql

Подключение к серверу MySQL через SSH в PHP

У меня есть моя база данных на удаленной машине linux, и я хочу подключиться с помощью функций ssh ​​и php, (в настоящее время я использую для этого библиотеку ssh2), я попытался использовать mysql_connect, но это дает мне возможность доступа (хотя я предоставил разрешение), когда я попытался использовать эту функцию:

$connection = ssh2_connect('SERVER IP', 22); ssh2_auth_password($connection, 'username', 'password'); $tunnel = ssh2_tunnel($connection, 'DESTINATION IP', 3307); $db = mysqli_connect('127.0.0.1', 'DB_USERNAME', 'DB_PASSWORD', 'dbname', 3307, $tunnel) or die ('Fail: '.mysql_error()); 

я получил ошибку «mysqli_connect () ожидает, что параметр 6 будет строкой, указанным ресурсом», может ли кто-нибудь помочь мне в этом

Чтобы настроить туннелированное соединение SSH с сервером MySQL на remotehost.com:

Если вы используете аутентификацию с открытым ключом, добавьте (-i) переключатель выше:

Теперь скажите локальному клиенту MySQL подключиться к порту localhost 3307 (который перенаправляется через ssh на remotehost.com:3306) по вашей настройке туннеля SSH на шаге 1.

mysql -h 127.0.0.1 -P 3307 -u dbuser -p db

Обмен данными между клиентом и сервером теперь отправляется через зашифрованное ssh-соединение.

Теперь подключите свое приложение PHP с помощью:

Благодарим великую статью Криса Снайдера в http://chxo.com/be2/20040511_5667.html

В зависимости от ваших требований альтернативным подходом было бы использование клиента GUI с поддержкой SSH Tunneling. Один из моих любимых и бесплатных инструментов:

Согласно документам , этот последний параметр должен быть именем сокета или трубы, что-то вроде «/var/run/mysql/mysql.sock». Поскольку вы не подключаетесь с помощью UNIX-сокета, это не относится к вам … поэтому попробуйте просто оставить его.

даже я попробовал это, выполнив ssh как корневыми учетными данными, так и парными с открытым закрытым ключом, но он позволяет мне взаимодействовать через командную строку, но не через PHP-код. Я также попытался создать туннель (используя функции ssh2), ans запускает команды оболочки из php-кода (system, exec и т. Д.), Ничего не работает. Наконец, я попробовал функцию ssh2 для выполнения команды оболочки и, наконец, работал 🙂 Вот код, если он вам поможет: —-

$connection = ssh2_connect($remotehost, '22'); if (ssh2_auth_password($connection, $user,$pass)) < echo "Authentication Successful!\n"; >else < die('Authentication Failed. '); >$stream=ssh2_exec($connection,'echo "select * from zingaya.users where | mysql'); stream_set_blocking($stream, true); while($line = fgets($stream))

для меня это работало, если я хочу использовать функции php специально.

Убедитесь, что ваше имя пользователя и пароль, с которыми вы соединяетесь, имеют правильные разрешения на имя хоста. Я считаю, что вы можете использовать «%» для шаблона. Кроме того, если вы подключаетесь к удаленному компьютеру (который, как я предполагал бы вы, если вы пытаетесь с ним подключиться), который отсутствует в вашей локальной сети, вам придется пересылать порты на своем маршрутизаторе, где сервер для внешнего трафика возможность подключения к нему.

Читайте также:  Компоновщик java пример паттерн

К сожалению, туннель ssh2, предлагаемый php, похоже, не способен обрабатывать удаленное соединение mysql, поскольку вы не можете указать локальный порт для туннеля (он работает только с портом 22 или любым другим портом ssh, на котором запущен ваш удаленный сервер). Мое решение состоит в том, чтобы просто открыть туннель через оператор exec() и подключиться, как обычно, оттуда:

exec('ssh -f -L 3307:127.0.0.1:3306 user@example.com sleep 10 > /dev/null'); $mysqli = new mysqli('127.0.0.1', 'user', 'password', 'database', '3307'); 

Я считаю, что причина, по которой я (и я полагаю, большинство людей) сталкивается с проблемой, заключается в том, что пользователь на сервере mysql настроен на разрешение только с «localhost», а не 127.0.0.1, IP-адрес localhost.

Я получил это для работы, выполнив следующие шаги:

Шаг 1. Разрешить 127.0.0.1 хост для целевого пользователя.

SSH обычно на ваш сервер и войдите в систему с пользователем root mysql, затем выполните команду:

GRANT ALL ON yourdbname.* TO yourdbuser@127.0.0.1 IDENTIFIED BY 'yourdbpassword'; 

Ключ, конечно, указывает 127.0.0.1 выше.

Шаг 2. Запустите локальный туннель SSH в MySQL.

Теперь вы можете запустить локальный SSH-туннель на удаленном сервере MySQL, например:

ssh -vNg -L 33306:127.0.0.1:3306 sshuser@remotehost.com 

-v делает ssh работать в подробном режиме, что помогает понять, что происходит. Например, вы увидите вывод отладочной информации, подобный этому, в консоли терминала при попытке подключения:

debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0 debug1: Connection to port 33306 forwarding to 127.0.0.1 port 3306 requested. 

и выводите это, когда вы закрываете соединение:

debug2: channel 2: is dead debug2: channel 2: garbage collecting debug1: channel 2: free: direct-tcpip: listening port 33306 for 127.0.0.1 port 3306, connect from 127.0.0.1 port 52112 to 127.0.0.1 port 33306, nchannels 3 

-N делает ssh не выдавать команд, а просто ждать после установления соединения.

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

-L Это основной параметр, указывающий локальный порт 33306 для подключения локального IP-адреса 127.0.0.1 удаленного узла и порта mysql удаленного хоста, обычно 3306 .

Вы можете использовать любые механизмы / другие параметры, необходимые после этого, для подключения через SSH к удаленному хосту. В моем случае я использую файлы ключей, сконфигурированные в моем ~/.ssh/config поэтому мне просто нужно указать user@host для входа.

Выдавая эту команду, она запускает SSH на переднем плане, поэтому я могу легко закрыть ее с помощью Ctrl + C Если вы хотите запустить этот туннель в фоновом режиме, вы можете добавить -f для этого.

Шаг 3: Подключитесь к PHP / другим методам, совместимым с mysql

SSH-туннель, запущенный сверху на вашем локальном хосте, будет вести себя точно так же, как если бы ваш mysql работал на 127.0.0.1 . Я использую порт 33306 (обратите внимание на тройку 3), который позволяет запускать мой локальный сервер sql на своем обычном порту. Теперь вы можете подключиться, как обычно. Команда mysql на терминале выглядит так:

mysql -h 127.0.0.1 -P 33306 -u yourmysqluser -p 

где -P (капитал P) указывает порт, в котором локальный конец вашего туннеля SSH принимает соединения. Важно использовать IP-адрес 127.0.0.1 вместо localhost потому что mysql cli попытается использовать сокет linux для подключения.

Читайте также:  Coding buttons in css

Для строк подключения PHP строка имени источника данных (для моей конфигурации Yii2) выглядит так:

'dsn' => 'mysql:host=127.0.0.1;dbname=yourdbname;port=33306', 

Пароли и имена пользователей указаны как обычно.

Источник

Удаленное подключение к БД MySQL PHP

Если вы углубленно занимаетесь программированием, то вам никак не обойтись без запросов к базе данных. Этой темы можно коснуться даже на этапе создания сайта на WordPress, где вы указываете данные для подключения. Примером этой статьи послужит более сложный пример – удаленное подключение к БД на PHP.

Допустим, у нас имеется локальная сеть из нескольких компьютеров. Один из них будет являться сервером, потому как именно на нем будет храниться вся информация и впоследствии производимых действий изменяться. Другие же компьютеры должны также производить взаимодействия с этой базой, чтобы изменения не были локальными и были доступны для каждого оператора в независимости от используемого ПК.

Как создать базу и подключиться к ней мы здесь не будем подробно рассматривать, потому как вы это уже должны знать. Я столкнулся с такой проблемой, что вроде все элементарно просто, но подключиться по сети к серверу так и не получалось. Соединение с базой данных на PHP выглядит следующим образом:

mysql_connect("хост","пользователь","пароль");

Но перед этим вам понадобится проделать несколько действий по разрешению доступа к базе данных извне, т.е. за пределами хоста 127.0.0.1 . Необходимо создать нового пользователя базы данных и присвоить ему все необходимые права доступа. У меня база создавалась в «Navicat lite for MySQL», поэтому ниже скрины на его примере:

Удаленное подключение к БД mysql php

Создание нового пользователя

Установка прав пользователю MySQL

Установка прав пользователю MySQL

Также необходимо открыть всем доступ в MySQL в файле my.ini . В нем ищем строку:

И вместо 127.0.0.1 ставим значение 0.0.0.0 , тем самым разрешая всем подключаться к БД. Дальше нам потребуется решить проблему с блокировкой брандмауэра, если таковая присутствует. Если у вас нет антивирусной программы, значит идем в панель управления -> брандмауэр Windows и изменяем «Дополнительные параметры» создавая новое правило на порт 3306 (стандартный порт MySql, если при установке меняли, значит открываем свой). Если же стоит антивирус, то создаем правило именно в нем, точно так же открывая необходимый для нас порт. Либо же можно просто разрешить производить любые действия определенной машине, добавив её адрес в исключения(лично я так и сделал). После этого ваш код должен заработать:

mysql_connect("192.168.0.10","user","password") or die("Что-то пошло не так".mysql_errno());

;-)

не скупись ставь лайк

Автор блога

Рябухин Максим

Я фрилансер веб-разработчик. Последние несколько лет занимаюсь версткой и веб-программированием на PHP и Javascript. Если вам понадобится помощь с блогом WordPress, либо адаптация сайта, я всегда рад помочь.

Источник

How To Connect to Remote MySQL Database using PHP

Hi! Let’s see how to connect to remote mysql database using php script. Usually your web application and database will be hosted on the same web server. But this is not always the case. Some Applications could be resource hog, in which case, the database will be hosted on server separate from the application. Let’s say you have a PHP script on server S1 and MySQL DB on Server S2 and you want to remotely connect the script from S1 to the DB on S2. So, how could you do it?

Читайте также:  Does not have class css

When your Application server and Database server are different, you must establish remote connection to db. To do this, you need remote access enabled on the server.

php connect to remote mysql database server

Connecting Remote MySQL Database/Server with PHP:

For security reasons, remote access to the MySQL database is disabled by default. In order to connect the MySQL database from a different server, you need to enable remote access to MySQL server.

That is, you must allow the connection within cPanel for the IP address from which you connect. First get the IP address of the host and follow the steps below.

  1. Login to the cPanel account where the MySQL database is hosted.
  2. Go to the section ‘Databases’ >‘Remote MySQL®’.
  3. Provide the IP address of the server where you have your php script and click on ‘Add Host’.
  4. Done! You have successfully enabled remote access on the MySQL database.

Once you have the remote access enabled, you can connect to the database from php as usual.

In PHP, you can connect to MySQL DB using either MySQLi api or PDO. MySQli supports both procedural and object oriented programming approach (OOP), and we will see how to connect using all of the three methods below.

1. Connect to MySQL using MySQLi (OOP Method)

Here is the php script to connect to the remote mysql database using PHP OOP method. You have to provide the host name, username and password of the server where the db is hosted.

connect_errno)< die('Error ' . $this->con->connect_error); > echo 'Connected successfully!'; ?>

2. MySQLi Procedural Method

 echo 'Connected successfully!'; ?>

3. PHP MySQL Connection using PDO

One of the main advantages of working with PDO is that it is compatible with several databases, since MySQLi supports MYSQL alone. Then, if you want to change to a different database for your php application later, PDO makes the process easier. All you have to do is change the connection string and some queries.

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo 'Connected successfully!'; > catch(PDOException $e) < die('Error ' . $e->getMessage()); > ?>

PDO comes with exception handling, so if there is a connection problem, an exception is thrown and it will go directly to the catch <> block.

That explains about connecting to mysql database remotely from php. One good thing about remote access is that you can grant and revoke access to the database at any time you want. I hope you like this tutorial and meet you in another interesting one. And please don’t forget to share it on social media.

Источник

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