Соединения с хостом эпизодически успешны с mysql_connect () и telnet, но я могу всегда проверять с помощью ping-запросов хост успешно?

Конфигурационный файл довольно прост. Вот то, где Вы идете не так, как надо:

anon_mkdir_write_enable=NO  
listen=YES   
anon_other_write_enable=NO  
anon_mkdir_write_enable=NO 

У Вас есть дублированная запись (который не должен быть грандиозным предприятием), и у Вас есть набор anon_other_write_enable к НЕТ. Кроме того, если Вы собираетесь использовать вторую строку, удостоверьтесь, что Вам отключили сервис в inetd/xinetd.

После изменения контекста SELinux также необходимо перезагрузить для перемаркировки файловой системы. Выполненный sestatus для наблюдения текущего контекста.

1
задан 14 June 2012 в 17:01
2 ответа

Долгое дело, но есть ли у вас дублирующийся IP-адрес в сети? То есть тот, на котором размещается mysql, а другой - нет, и вы случайно подключаетесь к нужному?

Попробуйте выполнить arp -a и проверить MAC-адрес того IP, который вы считаете правильным. Это может занять несколько попыток, но если у вас есть повторяющийся IP-адрес, вы в конечном итоге получите другой MAC-адрес для того же IP-адреса.

1
ответ дан 4 December 2019 в 01:04

На хост-компьютере для MySQL (который, как я полагаю, работает под управлением Ubuntu, на основании вашего сообщения об ошибке), попробуйте выполнить эту команду:

sudo netstat -lntp | grep 3306

Вы должны увидеть работающий демон mysqld . В противном случае проблема может заключаться в том, что демон MySQL машины не запущен. Я думаю, что в Ubuntu используется команда /etc/init.d/mysql start , запускаемая от имени пользователя root, которая запустит демон, если он не запущен. (Я не использую Ubuntu, но это то, что дает поиск в Google. В Arch это rc.d start mysqld , но это не переводится в Ubuntu точно).

Если проблема не в этом, т. Е. Демон запущен на хост-машине, проблема может заключаться в том, что брандмауэр настроен неправильно и порт не открыт. Попробуйте эту команду, чтобы увидеть, открыт ли порт ( обе эти команды выполняются на хост-машине, на которой запущен MySQL, а не на вашем локальном компьютере, где вы ' re using PHP)

nmap -v -sT localhost

Если вы не видите 3306 в списке как открытый, а машина использует iptables в качестве брандмауэра, эта команда должна открыть этот порт

iptables -I INPUT -p tcp --dport 3306 -d host.machine.ip.address -s your.machine.ip.address -j ACCEPT

, который должен разрешите вашей клиентской машине (той, на которой выполняется mysql_connect () , хотя это не должно быть) доступ к хост-машине MySQL.

Кроме того, как я уже упоминал в своем комментарии (совет RikudoSennin для этого): Пожалуйста, не используйте функции mysql _ * для нового кода. Они больше не обслуживаются, и сообщество начало процесс прекращения поддержки . Видите красную рамку ? Вместо этого вы должны узнать о подготовленных операторах и использовать либо PDO , либо MySQLi . Если вы не можете решить, эта статья вам поможет. Если вы хотите узнать, вот хороший учебник PDO .

РЕДАКТИРОВАТЬ: После еще нескольких онлайн-поисков я вижу, что другой пользователь ServerFault ответил на эту проблему двумя из три команды, которые я предложил, поэтому я ссылаюсь на этот вопрос, поскольку он может быть актуальным.

0
ответ дан 4 December 2019 в 01:04

Теги

Похожие вопросы