MySQL từ chối chấp nhận kết nối từ xa


13

Tôi vừa cài đặt một máy chủ Ubuntu mới với mysql (percona 5.5), nhưng nó từ chối chấp nhận các kết nối từ các máy chủ từ xa

Đây là những gì xảy ra nếu tôi cố gắng kết nối với máy chủ này từ xa:

mysql -h10.0.0.2 -uroot -pmypassowrd
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.2' (111)

telnet 10.0.0.2 3306
Trying 10.0.0.2...
telnet: Unable to connect to remote host: Connection refused

Khi tôi kiểm tra xem mysql có nghe các kết nối từ xa không, tôi thấy điều này:

sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      127018/mysqld 

Như bạn có thể thấy nó 127.0.0.1:3306có nghĩa là "Tôi chỉ chấp nhận các kết nối cục bộ".

Tôi đã kiểm tra các biến skip_networkingbind-addressbiến của mình - mọi thứ đều bị tắt:

mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%bind%';
Empty set (0.00 sec)

Tôi có một máy chủ khác với cấu hình hoàn toàn giống nhau và nó hoạt động rất tốt:

sudo netstat -ntlup | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2431/mysqld 

Điều gì có thể là lý do cho điều này? Làm thế nào để tôi làm cho mysql đáp ứng với các kết nối từ xa?


Lưu ý rằng biến bind_addresschỉ khả dụng kể từ phiên bản 5.6 ( bug.mysql.com/orms.php?id=44355 ), vì vậy nó sẽ trả về một tập hợp trống trong v5.5 ngay cả khi nó được đặt.
mạo

Hiển thị cho chúng tôi cài đặt my.cnf của bạn.
dùng9517

Bạn đã kiểm tra các sự cố bên ngoài myQuery, chẳng hạn như tường lửa hoặc sự cố định tuyến chưa?
Stese

Câu trả lời:


20

Cố gắng thêm bind-address = 0.0.0.0vào [mysqld]phần của bạn my.cnfvà khởi động lại mysqld .


2
Tập tin có tại/etc/mysql/mysql.conf.d/mysqld.cnf
Eduardo Cuomo

Của tôi là trong /etc/my.cnf.d/bind-addr.cnf
joseph

0

Nó có thể là do bảng người dùng cơ sở dữ liệu mysql (sử dụng mysql; hiển thị bảng;). Nếu liên kết đến 0.0.0.0 không phù hợp với bạn, hãy thử cung cấp cho người dùng của bạn máy chủ '%' thay cho 'localhost' trong bảng đó.

Ví dụ: thử tạo một người dùng như:

TẠO tên người dùng tên người dùng của bạn @ '%' được xác định bởi 'mật khẩu của bạn'

ant cố gắng kết nối với người dùng đó


3
Kết nối bị từ chối thường có nghĩa là không có gì nghe trên IP: cổng có liên quan.
dùng9517

Đúng, tôi đã bị lóe lên bởi 'Không thể kết nối với máy chủ MySQL', tôi không nhớ lại trên telnet. Lấy làm tiếc.
periket2000

"Không thể kết nối với MySQL" không bắt nguồn từ một đặc quyền không có sẵn cho người dùng. Đó là cặp {IP: port} không khớp với nỗ lực kết nối.
Fabien Haddadi

0

Khi mọi thứ khác không thành công và bạn chắc chắn rằng máy chủ IS đang nghe trên cổng mặc định và bạn đang cố gắng kết nối với máy khách mysql một cách tuyệt vọng từ máy chủ khác, hãy thử chỉ định cổng trên URL của lệnh mysql.

Lạ thay, tôi phải sử dụng cú pháp sau:

mysql -h someHost --port=3306 -u someUser -p someDb

Tôi đã tìm thấy điều này (lỗi?) Hoàn toàn tình cờ (sau khi mất tóc :)).

Thiết lập của tôi: debian jessie, mysql mới 5.7,18, người dùng / db đã tạo, liên kết địa chỉ nhận xét, mysqld đã khởi động lại


Một lời giải thích hợp lý là máy chủ MySQL của Hosting nào đó thực sự đang nghe trên 3306, như được thể hiện bởi lệnh --port. Nhưng nhị phân máy khách mysql của bạn đến từ phiên bản MariaDB ... do đó sử dụng cổng 3307 làm mặc định, trừ khi có quy định khác. Kiểm tra nguồn gốc của nhị phân máy khách mysql bạn đang sử dụng. Gợi ý: kiểm tra biến môi trường PATH của bạn quá ...
Fabien Haddadi

0

Tôi chỉ có vấn đề này và vấn đề của tôi dường như liên quan đến tường lửa. BTW - Cảm ơn @Temnovit về các lệnh khắc phục sự cố Mysql.

Tôi đã sử dụng netstat để báo cho máy chủ đang chạy và vào đúng cổng. Tôi cũng có thể nói rằng máy chủ của tôi không chấp nhận kết nối trên cổng đó bằng lệnh telnet đơn giản.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
telnet: connect to address 192.168.1.57: Connection refused
➜  ~ 

Sau một câu trả lời hữu ích khác về các lệnh tường lửa của Fedora, tôi có thể mở các cổng chính xác.

# On the server
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

Lệnh telnet của tôi sau đó đã thành công.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
Connected to 192.168.1.57.
Escape character is 'X'.

telnet> Connection closed.
➜  ~

Nếu bạn vẫn gặp sự cố, có thể đó là sự cố về quyền của người dùng.


0

Tôi đã mariadbcài đặt. Linh hồn là để sửa đổi bind-addressvị trí tại/etc/mysql/mariadb.conf.d/50-server.cnf


-1

Giải pháp được mô tả trong liên kết dưới đây sẽ giải quyết vấn đề của bạn http://www.debianhelp.co.uk/remotemysql.htmlm


2
bml13, trích dẫn một liên kết hỗ trợ cho câu trả lời của bạn là một cách thực hành tuyệt vời, nhưng chúng tôi rất thích mọi người viết câu trả lời ở đây và thêm một liên kết, không chỉ đặt liên kết và để nó ở đó.
MadHatter

1
... đặc biệt bởi vì đó là một liên kết chết.
haz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.