2010-11-02 11 views
52

मेरे पास नए स्थापित सर्वर में अजीब स्थिति है, और ऐसा लगता है कि Google इस समय मेरी सहायता नहीं कर सकता है। मैं अपने php-code से (दूरस्थ) mysql से कनेक्ट नहीं कर सकता। जब मैं उसी सर्वर पर कमांड लाइन से कनेक्ट करने का प्रयास करता हूं तो कनेक्शन succseds।php त्रुटि 13 के साथ mysql से कनेक्ट नहीं हो सकता है (लेकिन कमांड लाइन कर सकते हैं)

कनेक्ट नहीं कर सका: 'MYSQL.SERVER' (13)

यहाँ कोड है और कमांड लाइन से कनेक्ट प्रयास पर MySQL सर्वर से कनेक्ट नहीं कर सकता

[[email protected] httpdocs]$ cat test.php 

<? 
$link = mysql_connect('MYSQL.SERVER', 'testusersimon', '123456'); 
if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 
echo 'Connected successfully'; 
mysql_close($link); 
?> 

[[email protected] httpdocs]$ mysql -h MYSQL.SERVER -utestusersimon --password=123456 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 352108 
Server version: 5.0.45-community-nt-log MySQL Community Edition (GPL) 

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. 
This software comes with ABSOLUTELY NO WARRANTY. This is free software, 
and you are welcome to modify and redistribute it under the GPL v2 license 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> quit 
Bye 

मैंने php स्क्रिप्ट को mod_php मोड में और फास्टसीजीआई, में चलाने की कोशिश की है कि "/etc/php.d/mysql.ini" phpinfo() के साथ-साथ mysql, mysqli और pdo_mysql खंडों में दिखाई देता है।

लेकिन परिणाम वही था, मुझे यह कुछ आसान पता है लेकिन मैं बस नहीं कर सकता। कृपया मदद :)

संपादित करें: समस्या SELinux

setsebool -P httpd_can_network_connect_db=1 

के साथ था समाधान कर दिया गया।

+0

आप किस ओएस का उपयोग कर रहे हैं? – Thariama

+0

Fedora11 दूरस्थ सर्वर Win2k8 – SimSimY

उत्तर

114
setsebool -P httpd_can_network_connect=1 

रूप mysql_connet() का उपयोग नहीं भीतर से कनेक्शन की अनुमति के लिए भी, बहुत से लोगों को इस सवाल का दौरा करने के लिए एक उपयोगी CLI आदेश हो जाएगा (अपाचे) एक दूरस्थ MySQL डेटाबेस सर्वर के लिए अनुरोध, में httpd से नेटवर्क कनेक्शन सक्षम करने के लिए सुनिश्चित सेलिनिन आमतौर पर/etc/selinux/config में स्थित है (हैकर को आपके httpd का उपयोग करके अन्य मशीनों पर हमला करने से रोकने के लिए डिफ़ॉल्ट रूप से अक्षम)।

+0

जैसा कि मैंने अपनी पिछली टिप्पणी में कहा था - यह वास्तव में SELinux से संबंधित था। – SimSimY

+0

कमांड लाइन का प्रयास करने पर यह काम करता है, लेकिन जब अपाचे इसे निष्पादित करता है तो त्रुटि "चेतावनी: mysql_connect(): [2002] अनुमति अस्वीकार कर दी गई है (tcp: //w.x.y.z: 3306 के माध्यम से कनेक्ट करने का प्रयास कर रहा है)"। हां यह SELinux से संबंधित है। वास्तव में हमने कई अलग-अलग चीजों की कोशिश की। धन्यवाद आप बहुत अधिक @ thesimon –

+1

मैंने अक्सर सेलिंक्स बंद कर दिया है, कि जब भी मैं एक देखता हूं तो मैं सेलिंक्स से संबंधित अनुमति त्रुटियों को नहीं पहचानता। सुराग के लिए धन्यवाद। – pdwalker

26

CentOS 6 पर, आप उपयोग कर सकते हैं निम्नलिखित (-P बिना)

setsebool httpd_can_network_connect=1 
+4

आपने मुझे नरक से बचाया, आपको बहुत धन्यवाद –

+1

बचाया..मेरे ... आदमी! – skidadon

2
साथ

फेडोरा 21 अपाचे 2/httpd संस्करण 2.6 जब एक दूरस्थ mysql सर्वर 5.6 या MariaDB संस्करण 10 से कनेक्ट करने के लिए php संस्करण 5.6 का उपयोग कर यह php कोड में localhost की बजाय सर्वर के FQDN को निर्दिष्ट करते समय स्थानीय सर्वर से कनेक्ट करने में भी एक समस्या प्रतीत होती है।

यह आदेश वर्तमान सत्र के लिए अनुमति की समस्या का समाधान हो:

setsebool httpd_can_network_connect_db on 

ठीक बाद रिबूट के लिए स्थायी बनाने के लिए आपको ऐसा करने की जरूरत है: इस प्रश्न पर सभी

setsebool -P httpd_can_network_connect_db on 

धन्यवाद "अनुमति अस्वीकार" नरक से मुझे बचाने के लिए। :)

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

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