Подключение к MySQL в VirtualBox Ubuntu

у меня есть этот код на моем ПК (Windows), вызывающий базу данных из виртуальной машины Ubuntu с сетью только для хоста. Я использую VirtualBox для машины Ubuntu

$ipHost = "xxx.xxx.x.xxx";
$nombreUsuario = "rootpi";
$passUsuario = "rootpi";
$bddNombre = "tienda";

$conexion = new mysqli($ipHost, $nombreUsuario, $passUsuario, $bddNombre);

if ($conexion->connect_error) {
    die("Conexión fallida: " .$conexion->connect_error);
}

$sql = "SELECT id, name, address, image FROM people";
$result = $conexion->query($sql);

if ($result->num_rows > 0 ) {
    //Stuff...
}

этот код работает нормально. Соединение установлено и показывает результат на моей странице PHP в Apache server. Моя главная цель-передать файлы на мою виртуальную машину Ubuntu 14.04 в /var/www/html каталог с помощью WinSCP и вызвать их оттуда.

единственная линия, которую я думаю, что мне нужно изменить это $ ipHost переменная от ip до localhost:

$ipHost = "xxx.xxx.x.xxx"; -> $ipHost = "localhost";

но это не работает. Я попытался повторить после:

$conexion = new mysqli($ipHost, $nombreUsuario, $passUsuario, $bddNombre);

но он не показывает Эхо после него.

у меня установлен MySQL в Ubuntu, также php5 php5-mcrypt пакета.

мои версии PHP:

окна: PHP версии 5.6.3 - в Ubuntu: версия PHP 5.5.9-1ubuntu4.5

7
задан nihCC
02.02.2023 9:01 Количество просмотров материала 2661
Распечатать страницу

1 ответ

таким образом, вы в основном говорят, что при подключении через IP-адрес к Ubuntu MySQL вы можете подключиться, но когда вы находитесь на localhost вы не можете исправить?

это может быть проблемой с грантами MySQL, привязанными к IP-адресу. Но непонятно. Я бы сделал следующее для отладки.

во-первых, основы.

прежде всего, вы говорите, что у вас есть php5 и php5-mcrypt установлен. Но как насчет php5-mysql? Что-то настолько простое, что может вызвать у вас головная боль. Просто запустите эту строку:

sudo aptitude install php5-mysql

и после этого установлен, перезапустить Apache, как это:

sudo service apache2 restart

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

далее проверьте, как связана сеть MySQL.

если у вас nmap установить на Вас систему Ubuntu, войдите в командную строку на Ubuntu и запустите это команда:

nmap localhost -p 3306

если у вас нет nmap установлено, просто запустите следующую команду, чтобы установить его; это хороший простой инструмент отладки сети все настройки должны быть установлены по умолчанию:

sudo aptitude install nmap

это скажет вам, открыт ли порт MySQL (3306) на вашей машине или нет. Например, я просто сделал это на тестовой установке Ubuntu 12.04 у меня есть, и это ответ, который я получаю:

Starting Nmap 5.21 ( http://nmap.org ) at 2014-11-30 01:29 EST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000070s latency).
PORT     STATE SERVICE
3306/tcp open  mysql

это говорит мне, что порт MySL (3306) на моем localhost открыта. Если это шоу закрыто, это может быть проблемой, и я бы открыл my.cnf на системе Ubuntu и искать bind-address. Мне нравится использовать nano так что это команда, которую я хотел бы использовать:

sudo nano /etc/mysql/my.cnf

и на несетевой установке MySQL bind-address настройки будет выглядеть следующим образом:

bind-address            = 127.0.0.1

это заставит привязку быть только localhost (127.0.0.1). Но если вы говорите, что можете подключиться к базе данных MySQL с хост-компьютера Windows, это может быть задайте IP-адрес VirtualBox следующим образом; используя псевдо-пример с поддельным IP-адресом:

bind-address            = 123.456.789.0

и это определенно позволит хосту Windows подключаться, но-и это важно-но это позволит подключаться только через 123.456.789.0.

так что лучший способ, чтобы позволить Windows, а также Ubuntu использовать сервер MySQL на этой установке VirtualBox, чтобы закомментировать bind-address строку:

# bind-address            = 123.456.789.0

, а затем перезапустить MySQL, как это:

sudo service mysql restart

с этим ваш MySQL будет доступен в Ubuntu через localhost так же, как на вашей машине Виндовс через соединение ИП. Это в основном позволяет любому сетевому соединению в мире подключаться к этой машине. Это не очень хорошо для реального рабочего сервера, но для локализованной настройки тестирования/разработки это должно быть хорошо.

теперь проверьте, как MySQL предоставляет установку для пользователя базы данных.

теперь, если, что первая часть в основном показал вам, что вы успешно сети между Ubuntu и Windows миров, но до сих пор не удается подключиться, следующий вопрос может быть привязан к MySQL GRANTS в основном разрешений пользователя в MySQL.

чтобы проверить права пользователя, вы должны сначала войти в MySQL как привилегированный пользователь и выполнить эту команду для подключения к mysql основной базе:

CONNECT `mysql`;

, а затем запустите эту команду, чтобы увидеть, какие пользователи / хосты у вас есть setup:

SELECT `user`, `host` from `user`;

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

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | 127.0.0.1 |
| root             | ::1       |
| debian-sys-maint | localhost |
| root             | localhost |
+------------------+-----------+

конечно, ваш список может отличаться от моего, так что имейте это в виду. Но ключ вы должны увидеть нечто подобное. Обратите внимание, как root имеет три различные записи в user: для 127.0.0.1 (адрес IPv4), ::1 (адрес IPv6) и localhost (читаемое человеком имя хоста). Что является здесь ключевой.

в дело в том, что ваш пользователь привязан только к сетевому адресу-например,123.456.789.0-тогда пользователь не сможет подключиться через localhost. Таким образом, вам нужно будет настроить отдельный грант для localhost.

делать что-то подобное довольно легко. Некоторые люди любят бросать все гранты пользователю в среде разработки, как это:

GRANT ALL PRIVILEGES ON `some_database`.* TO 'some_user'@'localhost';

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

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `some_database`.* TO 'some_user'@'localhost';

конечно менять, some_database и some_user соответствовать вашей специфической установке. Но после выполнения одного из этих GRANT команды, вы должны сказать MySQL, чтобы перезагрузить привилегии, как это:

FLUSH PRIVILEGES;

и теперь, если вы запустите SHOW GRANTS на этом пользователе вы можете видеть все свои права, как вы их установили:

SHOW GRANTS FOR 'some_user'@'localhost';

это в основном две вещи, которые я искал бы и действовал бы, когда я отлаживаю проблему сети MySQL/соединения как это.

наконец, проверьте соединение из командной строки.

и теперь, чтобы проверить соединение из командной строки в Ubuntu 14.04, просто введите следующую команду:

mysql -u some_user -p

изменить some_user, чтобы соответствовать вашему пользователю, а затем введите пароль. Теперь вы должны быть подключены к MySQL через этого пользователя. Если вы можете успешно подключиться через командная строка, тогда вы знаете, что MySQL networking / connection работает хорошо. Так что все прошлое, что может быть связано с вашим PHP кодирования себя. И это совсем выходит за рамки простого ответа на этот сайт, нужно отлаживать локальный PHP-код сам решать, что.

1
отвечен JakeGould 2023-02-03 16:49

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх