2012-09-25 14 views
12

मैंने अभी एक पुराने RedHat7 पर एक MySQL सर्वर (संस्करण 3.23.58) स्थापित किया है। मैं निर्भरताओं की वजह से एक और हालिया MySQL संस्करण स्थापित नहीं कर सकता। मैं इस RedHat सर्वर पर librairies अद्यतन नहीं कर सकता।mysql_connect(): ऐसी कोई फ़ाइल या निर्देशिका

हालांकि, मुझे PHP के साथ डेटाबेस से कनेक्ट करने में समस्या है। सबसे पहले मैंने पीडीओ का इस्तेमाल किया लेकिन मुझे एहसास हुआ कि पीडीओ MySQL 3.23 के साथ संगत नहीं था ...

तो मैंने mysql_connect() का उपयोग किया। अब मैं निम्न त्रुटि है:

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 

मेरे कोड है:

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

मैं दो बार जाँच की है कि डेटाबेस मौजूद है और लॉगिन और पासवर्ड सही हैं।

यह अजीब बात है क्योंकि कोड मेरे विंडोज पीसी पर Wampp के साथ ठीक काम करता है। मैं यह नहीं समझ सकता कि समस्या कहां से आती है।

कोई विचार?

+2

प्रारंभ के लिए काम किया का उपयोग * – Leri

+6

@PLB: यदि आप प्रश्न या बस कोड को पढ़ने के लिए है? –

+3

यदि आप MySQL 3.x का उपयोग करने पर जोर देते हैं और इसके साथ 'mysql_ * 'फ़ंक्शन, जो जल्द ही बहिष्कृत हो जाएंगे, तो आप' php_mysql' एक्सटेंशन सक्षम होने पर '' php.ini' में जांचना चाहेंगे। – Havelock

उत्तर

32

हाँ आप इस तरह से कनेक्ट नहीं हो सकते हैं!

@PLB और @jammypeach mysqli v4.1 के बाद है, वह v3 का उपयोग कर रहा है :) दोस्तों वास्तव में मदद करना चाहते हैं, तो चश्मा पढ़ते हैं!

आप कनेक्ट नहीं कर सकते हैं, क्योंकि आपकी सॉकेट फ़ाइल थोड़ा गलत है। मुझे अब याद है कि पुराना आरएच पहले इस मुद्दे पर था। आपकी सॉकेट शायद /var/mysql/mysql.sock या /tmp/mysql.sock के रूप में है, लेकिन एक या अधिक ऐप्स दूसरे की तलाश में हैं।

तो तुम्हारा /tmp/mysql.sock है, लेकिन कोई /var/mysql/mysql.sock आपको:

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

आप /var/mysql/mysql.sock है, लेकिन कोई/tmp/mysql .sock तब:

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

आपको परिवर्तन करने के लिए अनुमतियों की आवश्यकता होगी। बस सूडो, अगर उपरोक्त आदेशों से पहले जरूरत है!

एक और समाधान (आसान):

फ़ाइल और कॉल phpinfo बनाएं(); 'Mysql.default_socket' की तलाश करें; या 'pdo_mysql.default_socket'; ओपन My.ini या My.cnf सॉकेट मान उदा। सॉकेट =/tmp/mysql.sock अपनी php.ini फ़ाइल खोलें (जो आपके phpinfo() पृष्ठ पर 'लोड कॉन्फ़िगरेशन फ़ाइल' के रूप में भी मिलती है) और गलत सॉकेट स्थान की सभी घटनाओं को MySQL से सही सॉकेट स्थान पर बदलें ।

एक और समाधान (सबसे आसान): पीडीओ के लिए DSN:

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

mysql_connect:

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

आपके सिस्टम वास्तव में डरावना है जब यह सुरक्षा की बात आती है, यदि आप संवेदनशील डेटा की मेजबानी कर रहे हैं, मैं नवीनतम संस्करणों में अपग्रेड करूंगा।

---- अद्यतन ----

aaahhhh पीएचपी 5.0 और MySQL 3.23 :)

PHP 5 एक mysql ग्राहक पैक है कि एक MySQL डेटाबेस संस्करण 4.1 की तुलना में कम से कनेक्ट नहीं कर सकता है। संस्करण 4.1 से शुरू होने पर, MySQL पासवर्ड हैशिंग का एक नया तरीका उपयोग करता है जो प्री-4.1 डेटाबेस के साथ संगत नहीं है। जिस सर्वर पर आपका कॉन्फ़िगरेशन कनेक्ट हो रहा है वह संस्करण 3.23 है। तो आपको खुद को MySQL का उच्च संस्करण प्राप्त करने की आवश्यकता है। क्षमा करें, लेकिन आपके मामले के लिए कोई अन्य व्यावहारिक समाधान नहीं है। अगर मैं आप थे, तो मैं पूरी प्रणाली को अपग्रेड करूँगा और सबसे हालिया ओएस संस्करण स्थापित करूँगा, अगर मुझे डेबियन और PHP और MySQL के सबसे हालिया स्थिर संस्करणों के साथ जाना पड़ा।

+3

मैं PHP का उपयोग कर रहा हूं और जावा नहीं, लेकिन वैसे भी धन्यवाद! – Maxbester

+2

अच्छी तरह से चश्मे के साथ देखा - मेरी रक्षा में हालांकि, मैंने उन सुझावों को एक टिप्पणी के रूप में पोस्ट किया क्योंकि मुझे जवाब पोस्ट करने के लिए पर्याप्त नहीं था। अगर मेरे पास MySQL के उस संस्करण के लिए चश्मा पढ़ने का समय होता, तो शायद मैंने एक उत्तर भी पोस्ट किया होगा;) – jammypeach

+1

अपडेट आज़माएं! मेरी गलती। @jammypeach मेरी माफ़ी ले लो, आप का अपमान नहीं करना चाहता था! – GTodorov

1

पर एक मैक OSX बस mysql सर्वर

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

यह मेरे लिए काम किया पुनः आरंभ

2

Fortunatly यह मेरे लिए अच्छी तरह से काम कर रहा है:

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

मैं एक ऐसी ही मुद्दा यह है कि ले लिया था हल करने के लिए मुझे कई घंटे। मैंने MySQL/Mariadb को एक अलग ड्राइव पर रखा और PHP संचालित वेबसाइट डिफ़ॉल्ट स्थान पर सॉकेट की तलाश में थी। इसलिए, मैंने एक प्रतीकात्मक लिंक बनाया लेकिन मुझे लगता है कि SELinux अनुमति नहीं देगी। इसलिए, मैंने इन पंक्तियों को /etc/php.ini फ़ाइल में जोड़ा और यह काम करता है।

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

मैं एमएएमपी का उपयोग करता हूं और नमूना समस्या है। मैंने पाया कि tmp में कोई mysql.sock नहीं है। इसलिए mysql_ के बजाय * पीडीओ या mysqli_ का उपयोग कर इस कोड

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

यह मेरे

संबंधित मुद्दे