Итак, вы в основном говорите, что когда вы подключаетесь через IP-адрес к Ubuntu MySQL, вы можете подключиться, но когда вы находитесь на localhost
вы не можете исправить?
Это может быть проблемой с привязкой грантов MySQL к IP-адресу. Но неясно. Я бы сделал следующее для отладки.
Во-первых, основы.
Прежде всего, вы говорите, что у вас установлены php5
и php5-mcrypt
. Но как насчет php5-mysql
? Что-то простое может вызвать у вас головную боль. Просто запустите эту строку:
sudo aptitude install php5-mysql
И как только это будет установлено, перезапустите Apache следующим образом:
sudo service apache2 restart
Теперь, если это прояснит ситуацию, это была простая проблема установки программного обеспечения. Все остальное в прошлом должно быть охвачено следующими двумя пунктами.
Далее, проверьте, как связаны сети MySQL.
Если на вашей системе Ubuntu установлена nmap
, войдите в командную строку в 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
а также на вашем компьютере с Windows через IP-соединение. Это в основном позволяет любому сетевому соединению в мире подключаться к этой машине. Что не очень хорошо для реального производственного сервера, но для локализованной настройки тестирования / разработки это должно быть хорошо.
Теперь проверьте, как настроены гранты MySQL для пользователя базы данных.
Теперь, если эта первая часть в основном показала вам, что у вас есть успешное сетевое взаимодействие между мирами Ubuntu и Windows, но вы все еще не можете подключиться, следующая проблема может быть связана с MySQL GRANTS
которые в основном являются разрешениями пользователя в MySQL.
Чтобы проверить гранты вашего пользователя, вы должны сначала войти в MySQL как привилегированный пользователь и выполнить эту команду для подключения к базе данных ядра mysql
:
CONNECT `mysql`;
А затем выполните эту команду, чтобы увидеть, каких пользователей / хостов вы настроили:
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 работает хорошо. Так что все, что может быть связано с вашим PHP-кодированием. И это действительно нечто, выходящее за рамки простого ответа на этом сайте; вам нужно отладить свой локальный код PHP самостоятельно, чтобы решить это.