2013-04-23 57 views
29

Khi tôi cố gắng kết nối các máy chủ MySQL từ xa bằng cách sử dụng dòng lệnh mysql -h <remote-ip> -u any_existing_users -p hay bất kỳ khách hàng mysql khác như phpmyadmin, nó đã không làm việc và gợi ý lỗi làKhông thể kết nối đến máy chủ MySQL từ xa với lỗi 61

ERROR 2003 (HY000) Can't connect to MySQL server on '<remote-ip>' (61) 

Nhưng, khi tôi thử ssh <remote-ip> và kết nối MySQL cục bộ theo mysql -u root -p, không có vấn đề gì.

Dưới đây là một phần của bảng người dùng (SELECT User, Host FROM mysql.user;):

+------------------+----------------+ 
| User    | Host   | 
+------------------+----------------+ 
| root    | %    | 
| other_users  | <remote-ip> | 
| root    | localhost  | 
+------------------+----------------+ 

Đây là iptable:

Chain INPUT (policy ACCEPT) 
num target  prot opt source    destination   
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0   0.0.0.0/0   

Chain FORWARD (policy ACCEPT) 
num target  prot opt source    destination   
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0   0.0.0.0/0   

Chain OUTPUT (policy ACCEPT) 
num target  prot opt source    destination   

Chain RH-Firewall-1-INPUT (2 references) 
num target  prot opt source    destination   
1 ACCEPT  all -- 0.0.0.0/0   0.0.0.0/0   
2 ACCEPT  icmp -- 0.0.0.0/0   0.0.0.0/0   icmp type 255 
3 ACCEPT  esp -- 0.0.0.0/0   0.0.0.0/0   
4 ACCEPT  ah -- 0.0.0.0/0   0.0.0.0/0   
5 ACCEPT  udp -- 0.0.0.0/0   224.0.0.251   udp dpt:5353 
6 ACCEPT  udp -- 0.0.0.0/0   0.0.0.0/0   udp dpt:631 
7 ACCEPT  tcp -- 0.0.0.0/0   0.0.0.0/0   tcp dpt:631 
8 ACCEPT  all -- 0.0.0.0/0   0.0.0.0/0   state RELATED,ESTABLISHED 
9 ACCEPT  tcp -- 0.0.0.0/0   0.0.0.0/0   state NEW tcp dpt:22 
10 REJECT  all -- 0.0.0.0/0   0.0.0.0/0   reject-with icmp-host-prohibited 
11 ACCEPT  tcp -- 0.0.0.0/0   0.0.0.0/0   state NEW tcp dpt:3306 

Vì vậy, vấn đề là những gì?

+0

Vui lòng kiểm tra bài đăng của tôi ở đây. Nó có thể giúp bạn: http://stackoverflow.com/a/22637763/676508 –

Trả lời

57

Kiểm tra xem máy chủ mysql của bạn đang lắng nghe trên một socket với trình netstat:

netstat -tulpen 

và tìm kiếm 3306.

Nếu không được hoặc nếu chỉ trên localhost, kiểm tra my.cnf và tìm kiếm dòng bind-address và thay đổi nó thành:

bind-address = 0.0.0.0 

sau đó khởi động lại máy chủ và thử lại.

+0

Một dòng hiển thị '' 'tcp 0 0 ::: 3306 ::: * LISTEN 100 1'''. '' ':::' '' có nghĩa là gì? Điều đó có nghĩa là mysql liên kết trên một địa chỉ IPv6? – rAy

+0

Có vẻ như nó, nhưng tôi không biết hệ điều hành nào để chắc chắn. Bạn đã thử kết nối qua ip trên localhost chưa? Kết nối qua ssh và làm "mysql -u user -p -h 127.0.0.1" hoặc địa chỉ ip công khai của máy chủ của bạn và kiểm tra xem bạn có thể kết nối không. Một "mysql -u user -p" đơn giản cũng có thể kết nối thông qua một tệp socket. – Kaffee

+0

'' 'mysql -u người dùng -p -h 127.0.0.1''',' '' mysql -u user -p -h 0.0.0.0''' và '' 'mysql -u user -p -h ' '' tất cả đều làm việc tốt @ Kaffee – rAy

1

Nó có thể là một vấn đề liên quan đến tường lửa hoặc thử này:

GO để Server Admin -> MySQL -> Settings -> kiểm tra: Cho phép Network Connections

Sau đó khởi động lại MySQL

+0

Tôi đang sử dụng CentOS, cách cho phép kết nối mạng cho MySQL – rAy

1

Hãy nhìn vào "Nguyên nhân của lỗi truy cập bị từ chối" từ MySQL.

http://dev.mysql.com/doc/refman/5.1/en/access-denied.html

possibile là có một cấu hình không thành công trên máy chủ của bạn hoặc một chương trình khác đang sử dụng cùng một cổng? Hoặc là máy chủ liên kết trên "127.0.0.1"? Hãy thử thay đổi tệp my.cnf.

+0

Không có '' 'bind-address''' trong my.cnf . Khi tôi thêm '' 'bind-address = ' '', nó không làm việc gì cả. – rAy

+0

Hãy thử đưa ra ở đầu của MySQL-Server một ip cụ thể: http://dev.mysql.com/doc/refman/5.1/en/server-options.html#option_mysqld_bind-address – Zaziki

20

Kiểm tra tình trạng:

netstat -tulpen 

Sửa đổi cấu hình của bạn:

nano /etc/mysql/my.cnf 
# Edit: 
bind-address = 0.0.0.0 

Nhập mysql và cung cấp đặc quyền:

mysql -umyuser -pmypassword 
# Run: 
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WITH GRANT OPTION; 
FLUSH PRIVILEGES; 
exit 

Khởi động lại mysql

/etc/init.d/mysql restart 
+2

Trong khi chính xác, tôi sẽ cẩn thận hơn khi cấp các đặc quyền mà không có cảnh báo – Purefan

+0

điều này làm việc cho tôi. nhưng tôi chỉ phải sử dụng sudo cho bước 2 và bước 4 – Srichakradhar

13

Nếu bạn chạy MAMP, đừng quên cho phép truy cập (bảng điều khiển mySQL, chọn "Cho phép truy cập mạng vào MySQL")

+0

@andyp tại sao bạn nghĩ vậy? Nó trông giống như một (rất ngắn, nhưng vẫn) anwer cho tôi. –

+0

@Jan: bạn đã đúng, tôi đã quá nhanh để loại bỏ điều này làm nhận xét trước đó – andyp

+0

Giải pháp hiệu quả và đơn giản cộng với hiệu quả. THanx –

7

Tôi gặp sự cố này ngay sau khi cài đặt Centos 7 trên máy chủ. Tôi không thể truy cập vào nó thông qua Mysql Workbench trong một máy tính từ xa.

Sự cố trong cấu hình tường lửa.Cuối cùng, giải pháp đến khi thực hiện:

sudo firewall-cmd --zone=public --permanent --add-service=mysql 

Và sau đó, khởi động lại các bức tường lửa:

sudo systemctl restart firewalld 
10

Với MySql 5.7 họ đã thay đổi tập tin để bind-address đang ở:

/etc/mysql/mysql.conf.d/mysqld.cnf 

thay vì:

/etc/mysql/my.cnf 
+1

Cảm ơn vì điều này. – ServerSideSkittles

+0

giống như trên ^ – KGCybeX

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