Mất kết nối với máy chủ MySQL khi 'đọc gói liên lạc ban đầu', lỗi hệ thống: 0


127

Tôi đang gặp lỗi:

"Mất kết nối với máy chủ MySQL khi 'đọc gói giao tiếp ban đầu, lỗi hệ thống: 0"

trong khi tôi sẽ kết nối db của tôi

Nếu tôi đang sử dụng localhost, mọi thứ đều hoạt động tốt. Nhưng khi tôi đang sử dụng địa chỉ IP trực tiếp của mình như bên dưới, nó sẽ gặp lỗi:

mysql_connect("202.131.xxx.106:xxxx", "xxxx", "xxxxx") or die(mysql_error());

Câu trả lời:


104

Ai đó ở đây gợi ý rằng nó có thể là một vấn đề tường lửa:

Tôi vừa gặp vấn đề này và thấy nó là tường lửa của tôi. Tôi sử dụng PCTools Firewall Plus và nó không cho phép truy cập đầy đủ vào MySQL. Một khi tôi đã thay đổi rằng nó là tốt. Mong rằng sẽ giúp.

Có thể là nó?

Ngoài ra, một người nào đó ở đây gợi ý rằng có thể là do máy chủ MySQL bị ràng buộc với IP loop-back (127.0.0.1 / localhost) giúp bạn không kết nối từ "bên ngoài" một cách hiệu quả.

Nếu đây là trường hợp, bạn cần tải tập lệnh lên máy chủ web (có lẽ cũng đang chạy máy chủ MySQL) và giữ máy chủ lưu trữ của bạn dưới dạng 'localhost'


7
bạn có ý nghĩa gì với localhost? Tôi cũng đang đối mặt với vấn đề tương tự và chỉ sử dụng localhost. Ứng dụng trên cùng một máy với cơ sở dữ liệu. Ý bạn là gì?
oneofakind

6
@oneofakind Ông có nghĩa là kết nối với 'localhost "thay vì' 127.0.0.1 '
Alex Holsgrove

2
Tôi gặp vấn đề tương tự trên OSX với mamp pro. Tôi đã sửa nó bằng cách vô hiệu hóa / kích hoạt lại hộp kiểm "cho phép truy cập mạng vào mysql" trên tab mamp pro mysql.
Ousmane

43

Mở tệp cấu hình mysql có tên my.cnf và thử tìm "bind-address", ở đây thay thế cài đặt (127.0.0.1 HOẶC localhost) bằng ip máy chủ trực tiếp của bạn (ip bạn đang sử dụng trong chức năng mysql_connect)

Điều này sẽ giải quyết vấn đề chắc chắn.

Cảm ơn


2
Đảm bảo bạn sử dụng bind-address = 127.0.0.1 hoặc localhost khi sử dụng đường hầm ssh. Có vấn đề với bitnami, trong đó địa chỉ liên kết là ip máy.
z2z

1
Vấn đề và giải pháp tương tự cho máy chủ chuyên dụng độc lập Debian 10 + MySQL.
Vilq

Cần phải đề cập rằng nói chung có thể có khả năng ràng buộc dịch vụ mysql 127.0.0.1ở nơi áp dụng để truy cập trực tiếp từ các máy chủ khác là không thể. Điều này ngăn chặn các cuộc tấn công vũ phu từ xa và không phơi bày các vấn đề bảo mật có thể xảy ra với mạng. Nếu ứng dụng của bạn nằm trên cùng một máy (đó là một thiết lập lưu trữ rất phổ biến), hãy sử dụng 127.0.0.1resp. localhostlà máy chủ mysql và nó sẽ hoạt động tương tự như ràng buộc dịch vụ với giao diện bên ngoài của bạn và sử dụng máy chủ đó làm máy chủ mysql. Nếu ứng dụng của bạn được đặt ở nơi khác, hãy sử dụng mạng nội bộ nếu có thể.
David

35

1) Cho phép kết nối từ xa với MySQL. Chỉnh sửa tập tin:

>sudo nano /etc/mysql/my.cnf

Dòng bình luận:

#bind-address       = 127.0.0.1

Khởi động lại MySQL:

>sudo service mysql restart

2) Tạo người dùng cho kết nối từ xa.

>mysql -uroot -p

CREATE USER 'developer'@'localhost' IDENTIFIED BY 'dev_password';
CREATE USER 'developer'@'%' IDENTIFIED BY 'dev_password';

GRANT ALL ON *.* TO 'developer'@'localhost';
GRANT ALL ON *.* TO 'developer'@'%';

3) Trong trường hợp của tôi, tôi cần kết nối từ xa từ Windows sang máy VirtualBox với Ubuntu. Vì vậy, tôi cần phải cho phép cổng 3306 trong iptables:

>iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

1
Đối với tôi, tôi quên xác minh địa chỉ liên kết trên my.cnf. Cảm ơn.
abkrim

1
Điều này hoàn toàn có ích. Cảm ơn bạn!
osehgol

1
Hoạt động hoàn hảo, nhưng tôi đã sử dụng bàn làm việc trên windows nên không làm bước 3. nhưng nó đã hoạt động. Cảm ơn!
RohitAneja

Mặc dù lệnh cuối cùng không hoạt động với tôi, nhưng việc tạo người dùng mới theo cách của bạn đã giải quyết vấn đề của tôi. Tôi có thể truy cập mysql trên raspberry pi từ máy tính xách tay của mình. Cảm ơn!
Eyyüp Alkış

nhớ FLUSH PRIVILEGESsau khi tạo một người dùng mới.
Yew Hong Tat

15

Có vấn đề này khi thiết lập một máy chủ nô lệ mới. Tìm thấy nó là địa chỉ IP máy chủ nô lệ bị thiếu trong /etc/hosts.allowtệp máy chủ chính . Đã thêm địa chỉ IP và nó cho phép tôi kết nối với máy chủ chính.

Lưu ý rằng tôi sử dụng hosts.allowhosts.denyđể kiểm soát truy cập.


vấn đề của tôi với kết nối / c ++. bây giờ, nếu tôi chỉ có thể tìm thấy những gì nhu cầu thiết lập được trong allowkhi denyALL: ALL...

điều này thực sự đã cứu sống tôi, tôi gặp vấn đề khi kết nối với mysql từ bàn làm việc, tôi cần thêm tệp "ALL: 127.0.0.1" vào tập tin /etc/hosts.allow và nó bắt đầu hoạt động
Tomáš Tibenský

Trong trường hợp của tôi, / etc / hosts có một mục (cũ) xấu cho IP máy chủ. Khi được cấp một IP mới, nó đã xuất hiện dưới một IP cũ và dường như bị bỏ qua. Xóa IP cũ đã chữa lành lỗi.
David Ramirez

7

Tôi gặp vấn đề này và cuối cùng, quản trị viên hệ thống đã thay đổi cổng mà MySQL đang chạy. MySQL Workbench đã cố gắng kết nối với 3306 mặc định nhưng máy chủ đang chạy vào năm 20300.


1
Điều tốt cho câu trả lời này. Hóa ra, tôi đã làm điều này với bản thân mình.
cảnh báo

5

Vấn đề trong trường hợp của tôi là MySQL chỉ bị ràng buộc với lo trên linux. để giải quyết vấn đề, tôi đã chỉnh sửa my.cnf (tìm thấy tại /etc/mysql/my.cnf) xóa dòng bind-address = 127.0.0.1

điều này cho phép mysql liên kết với bất kỳ giao diện mạng nào


5

Lỗi này xảy ra với tôi khi cố gắng kết nối với Google Cloud SQL bằng MySQL Workbench 6.3.

Sau một nghiên cứu nhỏ, tôi thấy rằng địa chỉ IP của tôi đã bị nhà cung cấp internet thay đổi và anh ta không được phép trong Cloud SQL.

Tôi ủy quyền cho nó và trở lại làm việc.


4

Tôi gặp phải lỗi chính xác này khi kết nối từ bàn làm việc của MySQL. Đây là cách tôi sửa nó. Tệp cấu hình /etc/my.cnf của tôi có giá trị địa chỉ liên kết được đặt thành địa chỉ IP của máy chủ. Điều này đã được thực hiện để thiết lập sao chép. Dù sao, tôi đã giải quyết nó bằng cách làm hai điều:

  1. tạo một người dùng có thể được sử dụng để kết nối từ địa chỉ liên kết trong tệp my.cnf

ví dụ

CREATE USER 'username'@'bind-address' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON schemaname.* TO 'username'@'bind-address';
FLUSH PRIVILEGES;
  1. thay đổi giá trị tên máy chủ MySQL trong chi tiết kết nối trong bàn làm việc của MySQL để khớp với địa chỉ liên kết

Cảm ơn bạn rất nhiều, chúng tôi cũng đã sao chép MySQL và địa chỉ liên kết là một địa phương: 10.0.0.x. Tôi đã vật lộn trong nhiều ngày cho giải pháp này.
iFadi

3

Vấn đề đối với tôi là các truy vấn DNS đã bị FW chặn trong mạng con. Giải pháp là vô hiệu hóa tra cứu DNS trong MySQL.


Tôi nghi ngờ rằng DNS cũng đáng trách trong trường hợp của tôi.
Zenexer

3

Tôi chỉ thiết lập mysql trên một hộp cửa sổ. Tôi đã gặp lỗi của OP khi cố gắng kết nối với máy khách Navicat MySql trên cùng một hộp. Tôi đã phải chỉ định 127.0.0.1 làm máy chủ lưu trữ và điều đó đã nhận được nó.

localhost hoặc địa chỉ IP thực tế của cả hai máy chủ đều không hoạt động.


3

Lỗi có nghĩa là nó đã không nhận được phản hồi từ cổng mà nó dự kiến ​​sẽ tìm thấy máy chủ trên đó. Các nguyên nhân bao gồm từ việc liên lạc với máy sai (Vì một trong nhiều lý do) đến máy chủ không nằm trên cổng dự kiến.

Kiểm tra cổng nào mà máy chủ của bạn bị ràng buộc trong /etc/mysql/my.cnf. Điều đó có tương ứng với những gì trong tuyên bố kết nối của bạn. Nếu chúng khớp thì hãy thử kết nối với mysql từ chính máy chủ và từ dòng lệnh của máy nơi bạn đang chạy máy khách. Nếu nó hoạt động ở một nơi chứ không phải nơi khác thì bạn có thể gặp vấn đề về cấu hình tường lửa / bộ định tuyến.


Tôi không nghĩ điều này là chính xác, nếu không có gì lắng nghe trên cổng đó thì bạn sẽ nhận được phản hồi ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)chứ không phải Lost connection to MySQL servertin nhắn.
Ken Williams

2

trong trường hợp của tôi, tôi đã có TẤT CẢ: TẤT CẢ trong hosts.deny. Thay đổi điều này thành TẤT CẢ: PARANOID đã giải quyết vấn đề của tôi khi kết nối qua ssh


2

Vấn đề là khá ngu ngốc đối với tôi.

Tôi đã từng gặp vấn đề tương tự trên máy AWS EC2 Ubuntu (MariaDB được cài đặt cục bộ vào thời điểm hiện tại), vì vậy tôi đã cố gắng tạo đường hầm SSH và gặp vấn đề tương tự. Vì vậy, tôi đã cố gắng để ssh đường hầm trên thiết bị đầu cuối:

ssh -L13306:127.0.0.1:3306 root@ip.address -i my/private/key.pem

Và nó nói với tôi điều này:

Vui lòng đăng nhập với tư cách là người dùng "ubfox" chứ không phải người dùng "root".

Tôi đã thay đổi người dùng ssh từ root sang ubfox, giống như cấu hình ssh của tôi và nó được kết nối tốt.

Vì vậy, hãy kiểm tra người dùng kết nối SSH của bạn.

Tôi giám sát việc này, vì vậy quá nửa giờ thời gian của tôi, vì vậy tôi hy vọng điều này sẽ hữu ích cho bạn.


2

Đối với tôi, tập tin cấu hình đã được tìm thấy "/etc/mysql/mysql.conf.d/mysqld.cnf" nhận xét địa chỉ liên kết đã thực hiện thủ thuật.

Như chúng ta có thể thấy ở đây: Thay vì bỏ qua mạng, mặc định bây giờ chỉ nghe trên localhost tương thích hơn và không kém an toàn.


Đối với sự ngạc nhiên lớn nhất của tôi, cái này hoạt động theo Debian 10. Tôi đã cho một cơ hội cho nó và CÔNG TRÌNH! Đã chỉnh sửa cấu hình mysql sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfvà thay vì bind-address = 111.112.113.114tôi đã sử dụng bind-address = 127.0.0.1. Cài đặt đường hầm SSH được đặt như được mô tả trên hostpresto.com/community/tutorials/ khuyên Tốt! Cảm ơn!
klor

1

Gặp vấn đề tương tự, Địa chỉ liên kết qua lại không có kết quả. Giải pháp cho tôi là đặc quyền tuôn ra .

mysql> FLUSH PRIVILEGES;

1

Đối với tôi thiết lập bind-address = 0.0.0.0trongmysql/my.cnf làm việc. Về cơ bản, nó lắng nghe tất cả các địa chỉ (nhưng vẫn là một cổng).

Và đừng quên khởi động lại máy chủ của bạn: systemctl restart mysql


6
Tất cả địa chỉ / giao diện, nhưng chỉ có một cổng duy nhất.
Zenexer

1

Tôi chỉ gặp vấn đề tương tự, nhưng trong trường hợp của tôi, tôi đã giải quyết nó bằng

dịch vụ bắt đầu mysqld


1

Thêm một lý do nữa ...

Tôi đã chạy vào một máy chủ Ubuntu nơi mọi thứ đều được tùy chỉnh và không thể kết nối vì cùng một lỗi.

Cài đặt này là bên trong /etc/ssh/sshd_config

PermitTunnel no

Sau khi biến thành

PermitTunnel yes

Tôi đã có thể kết nối từ xa với MySQL DB của tôi


1

Tôi đang cố gắng kết nối container db docker của tôi trên Ubuntu 18.04, cùng một vấn đề.

Trước tiên hãy kiểm tra thiết bị của bạn bằng cách chạy nmcli devđể kiểm tra xem thiết bịdocker0 có được kết nối hay không.

Nếu nó không được kết nối, hãy thử khởi động lại dịch vụ docker:

sudo service docker restart


1

Trong trường hợp của tôi, đó là cổng chặn wifi của trường đại học 3306. Tôi có thể kết nối bằng cách sử dụng điểm phát sóng di động.

Thay đổi thành một điểm truy cập di động hoặc một mạng khác và nếu nó hoạt động ở đó, thì bạn biết rằng mạng ban đầu đang chặn cổng 3306. Nếu bạn gặp cùng một lỗi trên hơn 1 mạng, thì bạn biết đó là cụ thể cho máy của bạn.


1

Firewalldchặn địa chỉ IP. Vì vậy, để cấp quyền truy cập, sử dụng các lệnh sau:

tường lửa-cmd --permanent --zone = đáng tin cậy --add-source = YOU_IP / 32

tường lửa-cmd --permanent --zone = đáng tin cậy --add-port = 3306 / tcp

tường lửa-cmd - tải lại


0

Khi kết nối với Mysql từ xa, tôi đã gặp lỗi. Tôi đã có cảnh báo này trong /var/log/mysqld.log:

[Warning] IP address 'X.X.X.X' could not be resolved: Temporary failure in name resolution

Tôi vừa thêm dòng này vào /etc/hoststập tin:

X.X.X.X some_name

Vấn đề được giải quyết! Không sử dụng skip-name-resolvegây ra một số lỗi trong ứng dụng cục bộ của tôi khi kết nối với MySQL.


0

Tôi đã có vấn đề giống hệt nhau. Để sửa lỗi, tôi chỉ thay đổi máy chủ từ localhost: 3306 thành localhost. Vì vậy, lỗi có thể xảy ra khi bạn tách cổng không kết nối để kết nối. Tốt hơn là để mặc định.


1
Điều này có thể là do mysql không chấp nhận cổng như một phần của tên máy chủ, thay vào đó bạn cần sử dụng đối số-P 3306
Clay H

0

Thư mục cơ sở dữ liệu cho phép đọc và ghi cũng là một vấn đề tôi tìm thấy. Chỉ cần đảm bảo ứng dụng của bạn có thể rw các tệp trên vị trí db. Hãy thử chmod 777 để thử nghiệm.


0

Tôi phải đối mặt với cùng một vấn đề. Tôi đã kiểm tra và cố gắng đặt AllowTcpForwarding Có nhưng nó bị thiếu trong sshd_config của tôi vì vậy không có trợ giúp. Tôi đã không thay đổi sshd_config hoặc my.cnf. Đảm bảo tên máy chủ ssh KHÔNG giống với tên máy chủ mysql (sử dụng localhost).

Trong bàn làm việc, chọn + để thêm kết nối mới và đặt như sau:

  • phương thức kết nối: TCP / IP tiêu chuẩn qua SSH
  • Tên máy chủ SSH: 192.168.0.50:22 (thay thế cổng và cổng máy chủ SSH từ xa (tùy chọn))
  • Tên người dùng SSH: sshuser
  • Bạn có thể đặt mật khẩu hoặc thêm tại dấu nhắc
  • Tên máy chủ MYSQL: localhost hoặc 127.0.0.1
  • Cổng máy chủ MYSQL: 3306
  • Bạn có thể đặt mật khẩu hoặc thêm tại dấu nhắc

Kiểm tra kết nối. Nó sẽ thành công sau đó nhấn OK.Viola!


0

Nếu địa chỉ liên kết không có trong tệp cấu hình của bạn và mysql được lưu trữ trên ví dụ AWS, vui lòng kiểm tra nhóm bảo mật của bạn. Trong điều kiện lý tưởng, các quy tắc gửi đến sẽ chấp nhận tất cả kết nối từ cổng 3306 và quy tắc gửi đi sẽ phản hồi lại tất cả các IP hợp lệ.


0

Tôi đã thực hiện dưới 3 bước sau đó làm việc cho tôi.

  1. bind-address = "YOUR MACHINE IP"trong my.cnftập tin tại /etc/my.cnf

  2. Khởi động lại dịch vụ bằng lệnh: service httpd restart

  3. GRANT ALL PRIVILEGES ON yourDB.* TO 'username'@'YOUR_APPLICATION_IP' IDENTIFIED BY 'YPUR_PASSWORD' WITH GRANT OPTION;


0

Tôi đã gặp một lỗi tương tự (kết nối với MYSQL trên aws thông qua MYSql Workbench). Tôi đã từng kết nối tốt trước đây và đột nhiên nó ngừng hoạt động và chỉ không hoạt động trở lại). Kết nối của tôi là thông qua SSH được bảo vệ bởi keyfile.

Hóa ra tôi đã hết thời gian. Vì vậy, tôi đã tăng thời gian chờ kết nối SQL lên 30 giây (từ mặc định 10) và rất tốt để đi lại. những điều cần thử (nếu bạn đang ở trong một thiết lập tương tự)

  1. Bạn có thể ssh trực tiếp từ thiết bị đầu cuối đến máy chủ (phát hiện các vấn đề với quyền truy cập tệp chính, v.v.) không?
  2. Sau đó, bạn có thể thông qua thiết bị đầu cuối kết nối với MySQL với cùng một người dùng / pwd bằng cách sử dụng một cái gì đó như mysql -u [username] -p [database] nào không? Điều này sẽ kiểm tra các vấn đề quyền người dùng, vv
  3. nếu cả hai đều hoạt động thì các tham số của bạn không phải là vấn đề và có thể là vấn đề hết thời gian chờ như tôi (ngoại trừ lỗi không bao giờ nói hết thời gian chờ, nhưng được yêu cầu kiểm tra quyền, v.v.)

0

Không gian đĩa hạn chế có thể gây ra lỗi này.

Kiểm tra dung lượng đĩa của bạn

$ df -h

Cố gắng tăng dung lượng nếu có 100% đĩa đã sử dụng.

Trong trường hợp của tôi: Tôi có hộp Vagrant (8.0.1) (Ubuntu 16.04) Dung lượng đĩa mysql của tôi là 10GB, tôi đã tăng lên 20GB

$ sudo lvextend -L20G -r /dev/mapper/homestead--vg-mysql--master

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

$ sudo service mysql restart

0

Nếu bạn phải đối mặt với kết nối erorr này từ xa, hãy đi tới tùy chọn mysql từ xa trong cpanel và sau đó thêm% trong Máy chủ (% ký tự đại diện được phép).

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.