Próbuję skonfigurować WordPress. Mam uruchomione Apache i MySQL, a konta i baza danych są skonfigurowane. Próbowałem stworzyć proste połączenie:
<?php
$conn = mysql_connect('localhost', 'USER', 'PASSWORD');
if(!$conn) {
echo 'Error: ' . mysql_errno() . ' - ' . mysql_error();
}
?>
I zawsze to rozumiem:
Błąd: 2002 - Brak takiego pliku lub katalogu
O jakim pliku lub katalogu może on mówić?
Korzystam z systemu OS X Snow Leopard, używając wbudowanego Apache. Zainstalowałem MySQL przy użyciu dmg x86_64.
AKTUALIZACJA: Odkryłem, że gniazdo znajduje się w /tmp/mysql.sock, więc w php.ini zastąpiłem nim wszystkie wystąpienia złej ścieżki.
php
mysql
connection
mk12
źródło
źródło
/etc/init.d/mysql start
jeśli korzystasz z podstawowej dystrybucji Debiana. jeśli się nie powiedzie, sprawdź, czy w/etc/my.cnf
pliku jest poprawna ścieżka do gniazda mysql.Odpowiedzi:
Jeśli używasz Linuksa: ścieżka do pliku mysql.sock jest nieprawidłowa. Dzieje się tak zwykle dlatego, że używasz (LAMPP) XAMPP i nie ma go w /tmp/mysql.sock
Otwórz plik php.ini i znajdź tę linię:
I zrób to
źródło
localhost
na pracę, a TCP / IP działa, więc zmiana go na adres TCP / IP127.0.0.1
będzie działać.Miałem podobny problem i udało mi się go rozwiązać, adresując mój mysql za pomocą
127.0.0.1
zamiastlocalhost
.Prawdopodobnie oznacza to, że coś jest nie tak w konfiguracji mojego hosta, ale ta szybka poprawka sprawia, że teraz zaczynam.
źródło
code
adresem 127.0.0.1 localhostcode
. Ciekawe, dlaczego połączenie przez localhost nie działa. Gdyby ktoś mógł mnie oświecić, byłbym szczęśliwy.localhost
na pracę, a TCP / IP działa, więc zmiana go na adres TCP / IP127.0.0.1
będzie działać.Dotyczy to systemu Mac OS X z natywną instalacją Apache HTTP i niestandardową instalacją MySQL .
Odpowiedź opiera się na doskonałej odpowiedzi @ alec-gorge, ale ponieważ musiałem wygooglować pewne konkretne zmiany, aby skonfigurować je w mojej konfiguracji, głównie specyficznej dla Mac OS X, pomyślałem, że dodam go tutaj ze względu na kompletność.
Włącz obsługę PHP5 dla Apache HTTP
Upewnij się, że obsługa PHP5 jest włączona w
/etc/apache2/httpd.conf
.Edytuj plik za pomocą
sudo vi /etc/apache2/httpd.conf
(wprowadź hasło, gdy zostaniesz o to poproszony) i usuń komentarz (usuń;
od początku) wiersz, aby załadować moduł php5_module .Uruchom Apache HTTP z
sudo apachectl start
(lubrestart
jeśli jest już uruchomiony i wymaga ponownego uruchomienia, aby ponownie odczytać plik konfiguracyjny).Upewnij się, że
/var/log/apache2/error_log
zawiera wiersz informujący, że moduł php5_module jest włączony - powinieneś zobaczyćPHP/5.3.15
(lub podobnie).Wyszukiwanie nazwy pliku gniazda
Gdy MySQL jest uruchomiony (z
./bin/mysqld_safe
), na konsoli powinny być wydrukowane wiersze debugowania, które informują, gdzie można znaleźć pliki dziennika. Zanotuj nazwę hosta w nazwie pliku -localhost
w moim przypadku - która może być inna dla twojej konfiguracji.Plik, który nastąpi później,
Logging to
jest ważny. Tam MySQL rejestruje swoją pracę.Otwórz
localhost.err
plik (ponownie, twój może mieć inną nazwę), tj.tail -1 /Users/jacek/apps/mysql/data/localhost.err
Aby znaleźć nazwę pliku gniazda - powinna to być ostatnia linia.Zwróć uwagę na
socket:
część - jest to plik gniazda, którego powinieneś użyć wphp.ini
.Istnieje inny sposób (niektórzy twierdzą, że jest to łatwiejszy sposób), aby określić lokalizację nazwy pliku gniazda, logując się do MySQL i uruchamiając:
Konfiguracja PHP5 z obsługą MySQL - /etc/php.ini
A propos php.ini ...
W
/etc
katalogu znajduje się plik /etc/php.ini.default . Skopiuj go do /etc/php.ini .Otwórz
/etc/php.ini
i poszukaj mysql.default_socket .Wartość domyślna
mysql.default_socket
to/var/mysql/mysql.sock
. Powinieneś to zmienić na wartość, którą zanotowałeś wcześniej - tak było/tmp/mysql.sock
w moim przypadku.Zastąp
/etc/php.ini
plik, aby odzwierciedlić nazwę pliku gniazda:Ostateczna weryfikacja
Zrestartuj Apache HTTP.
Sprawdź dzienniki, jeśli nie ma błędów związanych z PHP5. Brak błędów oznacza, że wszystko jest gotowe, a PHP5 z MySQL powinno działać dobrze. Gratulacje!
źródło
mysql_connect
, co jest rzeczywistym problemem pierwotnego pytania, a nie ogólnym błędne przekonanie o instalacji oprogramowania.localhost
. Nikt, kto nie szuka pomocy w konfiguracji Xampa na macos, nie dostanie się tutaj przez Google. Dlatego użyłem terminu „bzdury”. Ten wątek nie ma w ogóle nic wspólnego z macos, ale tylko z mysql (nawet z php).Zmiana „localhost” na „127.0.0.1” w pliku konfiguracyjnym (połączenie z bazą danych) pomogła!
źródło
Może pomóc ponowne uruchomienie serwera mysql. W moim przypadku ponowne uruchomienie serwera zaoszczędziło sporo czasu.
PS - używany
sudo service mysql restart
dla użytkownika innego niż root.źródło
Najpierw upewnij się, że MySQL działa. Polecenie: mysqld start
Jeśli nadal nie możesz się połączyć, to: Jak wygląda twój /etc/my.cnf? (lub /etc/msyql/my.cnf)
Pozostałe 2 posty są poprawne, ponieważ musisz sprawdzić gniazdo, ponieważ 2002 to błąd gniazda.
Świetny poradnik dotyczący konfigurowania LAMP to: http://library.linode.com/lamp-guides/centos-5.3/index-print
źródło
/usr/local/mysql/mysql-test/include/default_my.cnf
, czy powinienem go skopiować jako my.cnf do/etc
?Nie żeby to ci dużo pomagało, ale w najnowszych (i jeszcze mniejszych ) wersjach MySQL kod błędu 2002 oznacza „Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo [nazwa-gniazda]”, więc może ci to powiedzieć trochę więcej.
źródło
Rozwijając tutaj odpowiedź Matthiasa D, udało mi się rozwiązać ten błąd 2002 w MySQL i MariaDB z dokładnymi ścieżkami za pomocą tych poleceń:
Najpierw uzyskaj rzeczywistą ścieżkę do gniazda MySQL:
Następnie pobierz ścieżkę PHP :
Korzystając z danych wyjściowych tych dwóch poleceń , połącz je:
Jeśli to zwróci
No such file or directory
, po prostu musisz utworzyć ścieżkę do PHP mysql.sock, na przykład jeśli twoja ścieżka/var/mysql/mysql.sock
byłaby uruchomiona:Następnie spróbuj ponownie wykonać polecenie sudo ln .
źródło
Sprawdzę twój plik php.ini i sprawdzę, czy mysql.default_socket jest ustawiony poprawnie, a także sprawdzę, czy twój mysqld jest poprawnie skonfigurowany z plikiem gniazda, do którego ma dostęp. Typowa wartość domyślna to „/tmp/mysql.sock”.
źródło
/var/mysql/mysql.sock
, ale ta ścieżka nie istnieje.Napotkałem również ten problem, a następnie zmodyfikowałem „localhost” na „127.0.0.1”, to działa.
źródło
w moim przypadku mam problem z mysqli_connect.
kiedy chcę się połączyć
mysqli_connect('localhost', 'myuser','mypassword')
mysqli_connect_error () zwraca mi ten błąd „Brak takiego pliku lub katalogu”
to działało dla mnie
mysqli_connect('localhost:3306', 'myuser','mypassword')
źródło
Błąd 2002 oznacza, że MySQL nie może połączyć się z lokalnym serwerem bazy danych przez plik gniazda (np
/tmp/mysql.sock
.).Aby dowiedzieć się, gdzie jest twój plik gniazda, uruchom:
następnie sprawdź dokładnie, czy twoja aplikacja używa właściwego pliku gniazda Unix lub zamiast tego łączy się przez port TCP / IP.
Następnie sprawdź dokładnie, czy Twój PHP ma odpowiednią konfigurację gniazda MySQL:
i upewnij się, że plik istnieje .
Przetestuj gniazdo:
Jeśli gniazdo Unix jest nieprawidłowe lub nie istnieje, możesz je dowiązać symbolicznie, na przykład:
lub popraw plik konfiguracyjny (np
php.ini
.).Aby przetestować połączenie PDO bezpośrednio z PHP, możesz uruchomić:
Sprawdź również konfigurację między Apache i CLI (interfejs wiersza poleceń), ponieważ konfiguracja może być inna.
Zobacz: Rozwiązywanie problemów z połączeniem z MySQL
Inne narzędzia / polecenia, które mogą pomóc w śledzeniu problemu:
mysql --socket=$(php -r 'echo ini_get("mysql.default_socket");')
netstat -ln | grep mysql
php -r "phpinfo();" | grep mysql
php -i | grep mysql
xdebug.show_exception_trace=1
w swoimxdebug.ini
sudo dtruss -fn mysqld
, w systemie Linux debuguj zstrace
stat $(mysql_config --socket)
i jeśli masz wystarczająco dużo wolnego miejsca (df -h
).net.core.somaxconn
.źródło
Upewnij się, że Twój lokalny serwer (MAMP, XAMPP, WAMP itp.) Jest uruchomiony.
źródło
Miałem podobny problem.
Zasadniczo problem polega na tym, że prawdopodobnie są uruchomione dwa wystąpienia mysql.
A) Jedna działająca w /etc/init.d
B) Lampa jest instalowana w / opt / lamp
Rozwiązanie:
Krok 1: - Znajdź wszystkie uruchomione instancje mysql za pomocą polecenia commnad "find / | grep mysqld"
Krok 2: - Zamknij usługi działające w /etc/init.d using service mysql stop
Krok 3: - Uruchom ponownie usługi lampy za pomocą / opt / lamp / lamp restart
Powinieneś być gotowy do drogi :)
źródło
Na komputerze Mac, zanim wykonasz całą ciężką pracę, po prostu sprawdź ustawienia
System Preferences > MySQL
. Częściej niż nie, od tamtej pory zespół napotyka ten problemThe MySQL Server Instance is stopped
.Kliknij
Start MySQL Server
przycisk, a magia się wydarzy.źródło
Używam PHP-FPM lub wielu wersji php na moim serwerze. W moim przypadku aktualizuję wartość mysqli, ponieważ nie ma domyślnego parametru gniazda mysql:
do :
dzięki @Alec Gorge
źródło
Miałem ten sam problem. Moje gniazdo zostało ostatecznie znalezione w /tmp/mysql.sock. Następnie dodałem tę ścieżkę do php.ini. Znalazłem tam gniazdo sprawdzając stronę „Server Status” w MySQL Workbench. Jeśli twojego gniazda nie ma w /tmp/mysql.sock, może MySQL Workbench może ci powiedzieć, gdzie to jest? (Przyznane, że używasz MySQL Workbench ...)
źródło
Zainstalowałem MySQL za pomocą instalatora. W rzeczywistości nie było katalogu danych obok katalogu „bin”.
Dlatego ręcznie utworzyłem katalog „data” w „C: \ Program Files \ MySQL \ MySQL Server 8.0”. I zadziałało (zmiana hasła roota zgodnie z krokami sugerowanymi na https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html .
źródło
Digital Ocean MySql 2002-no-such-file-or-directory
Dodaj ten koniec pliku
/etc/mysql/my.cnf
Uruchom ponownie MySql
service mysql restart
źródło
Miałem też ten sam problem na serwerze Linux. Pomogło mi polecenie „ sudo reboot ”, które służy do ponownego uruchamiania serwera Linux.
źródło
włącz i uruchom usługę mariadb
sudo systemctl włącz mariadb.service
sudo systemctl start mariadb.service
źródło