Задавайте вопросы, мы ответим
Вы не зашли.
Всем привет. Ситуация такая. Есть машина в моей локалке, на ней Fedora 4, Apache 2, php5, mysql4. Инет комп видит, если я захожу через терминал, то соединяется с удаленной базой без проблем.
mysql -h*** -u*** -p*** --port=3306 -D***
А вот когда пытаюсь из php законнектиться - "Can't connect to MySQL server".
Самое интересное, что когда я коннекчусь к localhost, то коннект проходит, а вот когда к 127.0.0.1 - "Can't connect to MySQL server".
Файл My.cnf
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock old_passwords=1 default-character-set=cp1251 skip-bdb port = 3306 set-variable = innodb_buffer_pool_size=2M set-variable = innodb_additional_mem_pool_size=500K set-variable = innodb_log_buffer_size=500K set-variable = query_cache_size=16M set-variable = read_buffer_size=2M log-slow-queries=/var/log/mslow.log [mysql.server] user=mysql basedir=/var/lib [mysqld_safe] err-log=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid skip-bdb set-variable = innodb_buffer_pool_size=2M set-variable = innodb_additional_mem_pool_size=500K set-variable = innodb_log_buffer_size=500K [client] port = 3306
Подскажите, куда копать?
Неактивен
Боюсь, что "Can't connect" - это слишком общая ошибка. У Вас может,
например, не хватать прав для соединения под учетной записью из PHP,
или, например, может стоять новый пароль (если MySQL 4.1) при том, что
PHP использует старую библиотеку libmysql.
Попробуйте подключиться с той же машинки, на которой крутится PHP, с
теми же правами, но с помощью клиента mysql.
P.S. Когда вы соединяетесь с localhost - Вы используете UNIX socket, а
когда 127.0.0.1 - TCP/IP.
Неактивен
paulus написал:
Попробуйте подключиться с той же машинки, на которой крутится PHP, с
теми же правами, но с помощью клиента mysql.
Да, я же писал, с локальной машины через коммандную строку коннект к удаленной БД проходит без проблем.
paulus написал:
P.S. Когда вы соединяетесь с localhost - Вы используете UNIX socket, а
когда 127.0.0.1 - TCP/IP.
Да, это я понимаю. Получается, что невозможно законнектиться по TCP\IP из php. Ведь коннект к 127.0.0.1 тоже не проходит, в то время как с localhost коннектится без вопросов.
paulus написал:
У Вас может, например, не хватать прав для соединения под учетной записью из PHP
Подскажите, пожалуйста, как это проверить? У меня доступ к серверу на уровне root.
paulus написал:
может стоять новый пароль (если MySQL 4.1) при том, что
PHP использует старую библиотеку libmysql.
MySQL у меня 4.1.20. На удаленной машине такой же. А как узнать версию библиотеки libmysql?
Неактивен
Слушает ли сервер порт TCP/IP вообще (netstat -an | grep 3306)?
Не закрыт ли он firewall (telnet <host> 3306 с удаленной машины)?
Настроен ли обратный DNS? При отсутствии доступа к DNS при соединении
локально по socket, Ваша учетная запись будет user@localhost, а при
соединении по TCP/IP - user@127.0.0.1.
Неактивен
paulus написал:
Слушает ли сервер порт TCP/IP вообще (netstat -an | grep 3306)?
Да
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
paulus написал:
Не закрыт ли он firewall (telnet <host> 3306 с удаленной машины)?
Как я понимаю, не закрыт - после выполнения команды начинают выдаваться всякие кракозябры, значит соединение есть.
paulus написал:
Настроен ли обратный DNS? При отсутствии доступа к DNS при соединении
локально по socket, Ваша учетная запись будет user@localhost, а при
соединении по TCP/IP - user@127.0.0.1.
Как проверить наличие доступа к DNS?
Когда я на локальной машине набираю
mysql -h<УДАЛЕННЫЙ host>. -u*** -p*** --port=3306 -D***
то пользователь '<user>'@'<ip>'
Неактивен
Хм, попробовал выполнить
mysql -h127.0.0.1 -u*** -p*** --port=3306 -D***
Выдал: <b>ERROR 1130 (00000): #HY000Host 'fedora' is not allowed to connect to this MySQL server</b>
Значит, где-то настраиваются имена разрешенных хостов?
Неактивен
Это означает, что у Вас нет ни одного разрешения (GRANT) на доступ к MySQL
с этого хоста. Попросту, надо написать что-то типа
GRANT ALL ON *.* TO root@fedora IDENTIFIED BY 'root_password';
Скорее всего, у Вас в /etc/hosts прописано
127.0.0.1 fedora
Вообще говоря, лучше таких строк не допускать, т.к. 127.0.0.1 зарезервировано
под localhost.
Неактивен
paulus написал:
Это означает, что у Вас нет ни одного разрешения (GRANT) на доступ к MySQL
с этого хоста. Попросту, надо написать что-то типаКод:
GRANT ALL ON *.* TO root@fedora IDENTIFIED BY 'root_password';Скорее всего, у Вас в /etc/hosts прописано
Код:
127.0.0.1 fedoraВообще говоря, лучше таких строк не допускать, т.к. 127.0.0.1 зарезервировано
под localhost.
У меня в host написано
127.0.0.1 fedora localhost localhost.localdomain
Убрал. Из терминала соединение прошло, а вот из php коннект к 127.0.0.1:3306 все равно не проходит
На удаленном сервере у меня прописан доступ для юзера <user>@<ip> - под которыми я пытаюсь соединяться. Да и раз через коммнадную строку могу соединиться, значит дело где-то в связке php-mysql
Неактивен
А что говорит PHP? Полный текст ошибки можете написать? Например,
вывод вот этого:
<?php mysql_connect ('host', 'user', 'password'); print mysql_error(); ?>
Неактивен
paulus написал:
А что говорит PHP? Полный текст ошибки можете написать?
Легко
Warning: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on '127.0.0.1' (13) in /var/www/vhosts/realto.ru/httpdocs/_remote.php on line 4 Can't connect to MySQL server on '127.0.0.1' (13)
Неактивен
$ perror 13 OS error code 13: Permission denied
SELinux?
Неактивен
paulus написал:
Код:
$ perror 13 OS error code 13: Permission deniedSELinux?
Fedora 4 (Red hat)
Я, в принципе, подозреваю, что что-то с правами, но толбко где это смотреть\править?
Неактивен
Посмотрите файл /etc/selinux/config на наличие строчки SELINUX=disabled
Неактивен
Боюсь, что тут Вам прийдется смотреть настройки своей системы самостоятельно.
Я бы начал с того, что запустил тестовый скрипт локально без апача:
$ php test.php
Если он нормально соединяется, значит, ограничения лежат на апаче. Если не
соединяется - значит, где-то на более глубоком уровне.
Неактивен
rgbeast написал:
Посмотрите файл /etc/selinux/config на наличие строчки SELINUX=disabled
В нем SELINUX=enforcing
paulus написал:
Я бы начал с того, что запустил тестовый скрипт локально без апача
О! Точно! Спасибо. Скрипт отработал как надо, соединился и выдал инфу. Получается, что в настройках apache. Что может влиять на работу TCP/IP?
Upd: Возможно, за это отвечает один из модулей Apache? У меня практически все отключены для экономии памяти.
Отредактированно Magz (18.09.2007 15:02:03)
Неактивен
У Вас включен SELinux, который запрещает Apache соединяться с портом
3306 на удаленном компьютере. Настройте SELinux или выключите его
Неактивен
SELINUX=enforcing это некая политика безопасности. Смотрите описание от SELINUX, возможно она Вам мешает. Это не настройки апача, а настройки системы, которые запрещают апачу определенные действия. А SELINUX точно нужна? Если нет, то заменить на disabled и перезагрузиться
Неактивен
ААААА! ))) Точно, поставил disable и все заработало!!! Ура! Огромное спасибо! Жаль, не придумали еще виртуального пива )))
P.S. Это мой первый опыт установки юникса. Решил сделать тестовый сервер один в один с боевым. В принципе, не жалею. Узнал столько нового и интересного
P.P.S. Вы - единственный ресурс на котором взялись решить мою проблему! Респект!
Неактивен