таким образом, вы в основном говорят, что при подключении через 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-код сам решать, что.