سؤال

أحاول الاتصال بخادم MySQL بعيد من المضيف الظاهري لجهازي المحلي باستخدام الكود التالي:

$conn = mysql_connect("$dbhost", "$dbuser", "$dbpass") or die(mysql_error());
        mysql_select_db($dbname, $conn) or die(mysql_error());

مشكلتي هي أنني غير قادر على الاتصال محليا، وتلقي الخطأ:

لا يمكن الاتصال بخادم MySQL على "xxx.xxx.xxx.xxx" (10060)

ليس هذا هو الحال عندما أقوم بتحميل نفس ملف PHP إلى الخادم.أنا قادر على الاستعلام عن قاعدة البيانات دون أي مشاكل على الإطلاق.

أنا غير قادر على الاتصال عبر سطر الأوامر أيضًا، ولكن يمكنني الوصول إلى cPanel الذي يستبعد احتمال حظر عنوان IP الخاص بي عن طريق الخطأ.

يعمل الخادم المحلي الخاص بي على PHP 5.2.9، والخادم البعيد 5.2.12

هل كانت مفيدة؟

المحلول

  • يجب إعداد جدار الحماية الخاص بالخادم لتمكين الاتصالات الواردة على المنفذ 3306
  • يجب أن يكون لديك مستخدم في MySQL مسموح له بالاتصال منه % (أي مضيف) (انظر يدوي للتفاصيل)

المشكلة الحالية هي المشكلة الأولى، ولكن بعد حلها مباشرة، من المحتمل أن تحصل على المشكلة الثانية.

نصائح أخرى

من السهل جدًا الاتصال بخادم MySQL عن بعد باستخدام PHP، ما عليك فعله هو:

  1. قم بإنشاء مستخدم MySQL في الخادم البعيد.

  2. منح الامتياز الكامل للمستخدم.

  3. اتصل بالخادم باستخدام كود PHP (النموذج الموضح أدناه)

$link = mysql_connect('your_my_sql_servername or IP Address', 'new_user_which_u_created', 'password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}

echo 'Connected successfully';

mysql_select_db('sandsbtob',$link) or die ("could not open db".mysql_error());
// we connect to localhost at port 3306

لقد قمت للتو بحل هذا النوع من المشاكل.ما تعلمته هو:

  1. سيكون عليك تحرير ملف my.cnf وتعيين bind-address = your.mysql.server.address تحت [mysqld]
  2. التعليق خارج مجال التواصل
  3. أعد تشغيل MySQL
  4. تحقق مما إذا كان قيد التشغيل

    mysql -u root -h your.mysql.server.address –p 
    
  5. أنشئ مستخدمًا (usr أو أي شيء) باستخدام % كمجال وامنحه حق الوصول إلى قاعدة البيانات المعنية.

    mysql> CREATE USER 'usr'@'%' IDENTIFIED BY 'some_pass';
    mysql> GRANT ALL PRIVILEGES ON testDb.* TO 'monty'@'%' WITH GRANT OPTION;
    
  6. افتح جدار الحماية للمنفذ 3306 (يمكنك استخدام iptables.تأكد من فتح المنفذ لأي شخص، أو إذا كنت تتمتع بأمان مشدد، فاسمح فقط بعنوان العميل)

  7. أعد تشغيل جدار الحماية/iptables

يجب أن تكون قادرًا الآن على الاتصال بخادم mysql من خلال البرنامج النصي php لخادم العميل الخاص بك.

وهذا ربما ليس هو الحل لquestion.But المرسل شهر مايو مفيدة للأشخاص الذين وجه نفس الحالة معي:

والعميل لديهم بطاقات شبكة اثنين، واحد لاسلكي واحد عادي. بينغ إلى خادم يمكن أن يكون ستفشل succeed.However telnet serverAddress 3306. وسوف يشكو

<اقتباس فقرة>   

لا يمكن الاتصال بخادم MySQL على 'xxx.xxx.xxx.xxx' (10060)

وعند محاولة الاتصال server.So أنا ممنوع محولات شبكة الاتصال العادية. وtelnet serverAddress 3306 حاولت ذلك works.And ثم يعمل عندما وصل إلى خادم MySQL.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top