2012-09-25 29 views
12

Właśnie zainstalowałem serwer MySQL (wersja 3.23.58) na starym RedHat7. Nie mogę zainstalować nowszej wersji MySQL z powodu zależności. Nie mogę aktualizować librairies na tym serwerze RedHat.mysql_connect(): Brak takiego pliku lub katalogu

Jednak mam problem z łączeniem się z bazą danych za pomocą PHP. Najpierw użyłem PDO, ale zdałem sobie sprawę, że PDO nie jest kompatybilny z MySQL 3.23 ...

Użyłem więc mysql_connect(). Teraz mam następujący błąd:

Warning: mysql_connect(): No such file or directory in /user/local/apache/htdocs/php/database.php on line 9 
Error: No such file or directory 

Mój kod to:

$host = 'localhost'; 
$user = 'root'; 
$password = ''; 
$database = 'test'; 
$db = mysql_connect($host, $user, $password) or die('Error : ' . mysql_error()); 
mysql_select_db($database); 

Sprawdziłem dwa razy, że baza danych istnieje, a login i hasło są prawidłowe.

To dziwne, ponieważ kod działa poprawnie na moim komputerze z systemem Windows z Wampp. Nie wiem, skąd bierze się ten problem.

Każdy pomysł?

+2

zacząć używać PDO lub mysqli_ * zamiast mysql_ * – Leri

+6

@PLB: Czytał pan na pytanie, czy tylko kodu? –

+3

Jeśli nalegasz na używanie MySQL 3.x, a wraz z nim funkcje 'mysql_ *', które wkrótce będą przestarzałe, możesz sprawdzić w swoim 'php.ini', czy rozszerzenie' php_mysql' jest włączone. – Havelock

Odpowiedz

32

Tak nie można się połączyć!

@PLB i @jammypeach mysqli jest po wersji v4.1, on używa v3 :) Chłopaki czytają specyfikacje, jeśli naprawdę chcesz pomóc!

Nie można się połączyć, ponieważ plik gniazda jest trochę niepoprawny. Pamiętam, że poprzednia RH miała już tę kwestię. Twoje gniazdo jest prawdopodobnie takie jak /var/mysql/mysql.sock lub /tmp/mysql.sock, ale jedna lub więcej aplikacji szuka drugiej.

Jeśli twój jest /tmp/mysql.sock ale nie /var/mysql/mysql.sock należy:

cd /var 
mkdir mysql 
cd mysql 
ln -s /tmp/mysql.sock mysql.sock 

Jeśli masz /var/mysql/mysql.sock ale nie/tmp/mysql .sock then:

cd /tmp 
ln -s /var/mysql/mysql.sock mysql.sock 

Będziesz potrzebować uprawnień do wprowadzenia zmian. Po prostu sudo, w razie potrzeby przed powyższymi poleceniami!

Innym rozwiązaniem (łatwiej):

Tworzenie pliku i nazwać phpinfo(); Poszukaj "mysql.default_socket"; lub "pdo_mysql.default_socket"; Otwórz My.ini lub My.cnf znajdź wartość gniazda, np. socket =/tmp/mysql.sock Otwórz swój plik php.ini (który znajduje się również na stronie phpinfo() jako "Załadowany plik konfiguracyjny") i zmień wszystkie wystąpienia nieprawidłowej lokalizacji gniazda na poprawną lokalizację gniazda z MySQL .

Innym rozwiązaniem (najprostszy): DSN dla PDO:

mysql:unix_socket=/tmp/mysql.sock;dbname=... 

mysql_connect:

$db = mysql_connect('localhost:/tmp/mysql.sock', ... 

System jest naprawdę przerażające, jeśli chodzi o bezpieczeństwo, jeśli jesteś gospodarzem poufnych danych, Chciałbym uaktualnić do najnowszych wersji.

---- UPDATE ----

Aaahhhh PHP 5.0 i MySQL 3.23 :)

PHP 5 ma klienta mysql pakowane że nie może połączyć się z bazą danych MySQL mniej niż wersja 4.1. Począwszy od wersji 4.1, MySQL używa nowego sposobu mieszania haseł, który nie jest zgodny z bazami danych sprzed 4.1. Serwer, z którym łączy się twoja konfiguracja, to wersja 3.23. Musisz więc zdobyć wyższą wersję MySQL. Przepraszamy, ale nie ma innego praktycznego rozwiązania dla twojej sprawy. Gdybym był tobą, zaktualizowałbym cały system i zainstalowałbym najnowszą wersję systemu operacyjnego, gdybym musiał pójść z Debianem i najnowszymi stabilnymi wersjami PHP i MySQL.

+3

Używam PHP, a nie Java, ale dzięki! – Maxbester

+2

Dobrze dostrzeżone specyfikacje - w mojej obronie zamieściłem te sugestie jako komentarz, ponieważ nie byłem wystarczająco pewny, by opublikować odpowiedź. Gdybym miał czas na przeczytanie specyfikacji tej wersji MySQL, prawdopodobnie również wysłałbym odpowiedź;) – jammypeach

+1

Spróbuj aktualizacji! Mój błąd. @jammypeach Weź moje przeprosiny, nie chcę cię obrażać! – GTodorov

1

na Mac OSX tylko restart serwera MySQL

sudo /usr/local/mysql/support-files/mysql.server restart 

pracował dla mnie

2

Fortunatly to działa dobrze dla mnie:

$db = mysql_connect('localhost:/var/lib/mysql/mysql.sock', 'Username', 'Password'); 
0

Miałem podobny problem, który wziął ja kilka godzin do rozwiązania. Umieściłem Mysql/Mariadb na osobnym dysku, a strona z PHP szukała gniazda w domyślnej lokalizacji. Stworzyłem więc dowiązanie symboliczne, ale wydaje mi się, że SELinux nie wyrazi zgody. Więc dodałem te linie do pliku /etc/php.ini i to działa.

pdo_mysql.default_socket = /data/mysql/mysql.sock 
mysql.default_socket = /data/mysql/mysql.sock 
mysqli.default_socket = /data/mysql/mysql.sock 
0

Używam MAMP i mam problem z próbką. Znalazłem, że nie ma mysql.sock w tmp. więc użyć tego kodu

cd /tmp && ln -s /Applications/MAMP/tmp/mysql/mysql.sock 

pracował dla mnie

Powiązane problemy