2009-12-20 37 views
10

Tôi đang cố gắng để kết nối với một máy chủ MySQL từ xa từ máy tính địa phương của tôi virtualhost sử dụng đoạn mã sau:Đang kết nối đến máy chủ MySQL từ xa sử dụng PHP

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

Vấn đề của tôi là tôi không thể kết nối địa phương, nhận được lỗi:

Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (10060)

Đây không phải là trường hợp tôi tải cùng một tệp PHP lên máy chủ. Tôi có thể truy vấn cơ sở dữ liệu mà không có vấn đề gì cả.

Tôi không thể kết nối qua dòng lệnh, nhưng tôi có thể truy cập cPanel để loại trừ khả năng IP của tôi bị cấm vô tình.

máy chủ địa phương của tôi đang chạy PHP 5.2.9, các máy chủ từ xa 5.2.12

Trả lời

16
  • tường lửa của máy chủ phải được thiết lập để cho phép incomming kết nối trên cổng 3306
  • bạn phải có một người sử dụng trong MySQL ai được phép kết nối từ % (host bất kỳ) (xem manual để biết chi tiết)

vấn đề hiện nay là một trong những đầu tiên, nhưng ngay sau khi bạn giải quyết nó, bạn có thể sẽ nhận được một giây.

+0

Tôi đã tạo một người dùng ký tự đại diện trong MySQL từ xa khi vấn đề xuất hiện lần đầu tiên, suy nghĩ IP của tôi có thể đã thay đổi (mà nó không nên có). Tôi đã có thể kết nối với cùng một máy chủ một vài ngày trước vì vậy tôi nghi ngờ nó là một vấn đề tường lửa. – BenTheDesigner

+3

thử telnet xx.xx.xx.xx 3306. Nếu nó không kết nối, đó là sự cố mạng – Bozho

+0

@Bozho: Không thể Telnet ở trên 3306. Vì đó là máy chủ dùng chung, tôi sẽ phải nói chuyện với máy chủ lưu trữ như tôi không có quyền truy cập vào mạng của họ. – BenTheDesigner

3

Nó là rất dễ dàng để kết nối từ xa MySQL Server Sử dụng PHP, những gì bạn phải làm là:

  1. Tạo một tài khoản MySQL trong máy chủ từ xa.

  2. Cấp đặc quyền đầy đủ cho Người dùng.

  3. Connect to Server sử dụng PHP Code (Sample đưa ra dưới đây)

$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 
2

Tôi chỉ giải quyết loại này của một vấn đề. Những gì tôi đã học được là:

  1. bạn sẽ phải chỉnh sửa my.cnf và thiết lập bind-address = your.mysql.server.address dưới [mysqld]
  2. bình luận ra skip-networking lĩnh vực
  3. khởi động lại mysqld
  4. kiểm tra nếu nó đang chạy

    mysql -u root -h your.mysql.server.address –p 
    
  5. tạo người dùng (usr hoặc bất kỳ thứ gì) với% dưới dạng tên miền và g rant cô truy cập vào cơ sở dữ liệu trong câu hỏi.

    mysql> CREATE USER 'usr'@'%' IDENTIFIED BY 'some_pass'; 
    mysql> GRANT ALL PRIVILEGES ON testDb.* TO 'monty'@'%' WITH GRANT OPTION; 
    
  6. tường lửa mở cho cổng 3306 (bạn có thể sử dụng iptables.hãy chắc chắn để mở cổng cho eithe reveryone, hoặc nếu bạn đang ở Securety chặt chẽ, sau đó chỉ cho phép các địa chỉ khách hàng)

  7. khởi động lại tường lửa/iptables

bạn sẽ có thể kết nối đến nay hình máy chủ mysql của bạn kịch bản lệnh máy chủ khách.

0

này có lẽ không phải là câu trả lời cho question.But tấm áp phích của điều này có thể hữu ích cho những người có khuôn mặt giống nhau tình với tôi:

Khách hàng có hai card mạng, một không dây và một bình thường. Ping đến máy chủ có thể thành công. Tuy nhiên, telnet serverAddress 3306 sẽ không thành công. Và sẽ khiếu nại

Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (10060)

khi cố gắng kết nối với máy chủ. Tôi cấm bộ điều hợp mạng bình thường. Và cố gắng telnet serverAddress 3306 nó hoạt động. Và sau đó nó hoạt động khi kết nối với máy chủ MySQL.

Các vấn đề liên quan