Błąd „can’t connect to MySQL server” w PHP na Linux Fedora

Kiedy łączymy się z poziomu PHP ze zdalnym serwerem MySQL za pośrednictwem funkcji mysql_connect() możemy zostać bardzo rozczarowani, gdy nam to się nie uda i nie znamy przyczyny. Trochę światła może rzucić na całą sytuację wywołanie funkcji mysql_error(). Jeżeli w odpowiedzi otrzymamy komunikat rozpoczynający się tak jak w tytule to najprawdopodobniej pomoże, któraś z poniższych rad.

Firewall

Na zdalnym serwerze może być zablokowany port, na którym łączymy się z bazą danych. Standardowo jest to port TCP o numerze 3306. Jeżeli zdalny serwer działa na Linux Fedora to do ustawień firewalla możemy przejść wywołując z konsoli poniższe polecenie posiadając uprawnienia administratora.

system-config-firewall

Uprawnienia do bazy

Kolejną przyczyną może być brak możliwości zdalnego łączenia się z bazą danych z wykorzystaniem danego użytkownika.

mysql_privileges

Jeżeli nie mamy na liście uprawnień (w phpMyAdmin) wpisu podobnego do powyższego to znaczy, że nie wszyscy użytkownicy mogą się łączyć zdalnie z bazą. Powyższy wpis umożliwia wszystkim użytkownikom bazy na łączenie się z dowolnego hosta – poza możliwością połączenia ten wpis nie daje nic więcej. Najlepszym rozwiązaniem jest utworzenie nowego użytkownika i nadanie mu uprawnień do łączenia się z konkretnego hosta lub z dowolnego hosta (%).

SELinux

Fedora ma standardowo włączony mechanizm ochrony o nazwie SELinux. Najlepiej go w ogóle wyłączyć. Z uprawnieniami administratora otwieramy plik

/etc/selinux/config

i zamieniamy linie

SELINUX=enforcing

na

SELINUX=disabled

Brak uruchomionej usługi mysqld

Standardowo przy uruchamianiu Fedory nie jest ładowana usługa mysqld odpowiedzialna za serwer bazy danych. Aby ją włączyć, wywołujemy z uprawnieniami administratora poniższe polecenie:

service mysqld start