'초기 통신 패킷을 읽는 중'에서 MySQL 서버와의 연결이 끊어졌습니다. 시스템 오류 : 0


128

오류가 발생합니다.

" '초기 통신 패킷 읽기, 시스템 오류 : 0'에서 MySQL 서버 연결이 끊어졌습니다."

내 db를 연결하는 동안.

localhost를 사용하면 모든 것이 잘 작동합니다. 하지만 아래와 같이 라이브 IP 주소를 사용하면 오류가 발생합니다.

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

답변:


104

여기 누군가 가 방화벽 문제 일 수 있다고 제안합니다.

나는 방금이 문제가 있었고 그것이 내 방화벽이라는 것을 알았습니다. PCTools Firewall Plus를 사용하는데 MySQL에 대한 전체 액세스를 허용하지 않았습니다. 일단 변경하면 괜찮습니다. 도움이되기를 바랍니다.

그게 될까요?

또한 여기 누군가 는 MySQL 서버가 루프백 IP (127.0.0.1 / localhost)에 바인딩되어 있기 때문에 "외부"에서 연결하는 것을 효과적으로 차단할 수 있다고 제안합니다.

이 경우 스크립트를 웹 서버에 업로드하고 (아마도 MySQL 서버를 실행 중일 수 있음) 서버 호스트를 'localhost'로 유지해야합니다.


7
localhost는 무엇을 의미합니까? 나는 또한 같은 문제에 직면하고 있으며 localhost 만 사용하고 있습니다. 애플리케이션이 데이터베이스와 동일한 시스템에 있습니다. localhost를 의미하는 것이 무엇입니까?
oneofakind 2015

6
@oneofakind 그는 '127.0.0.1'대신 '로컬 호스트'에 연결하는 것을 의미
알렉스 Holsgrove에게

2
나는 mamp pro를 사용하여 OSX에서 동일한 문제가 발생했습니다. mamp pro mysql 탭에서 "mysql에 대한 네트워크 액세스 허용"확인란을 비활성화 / 재 활성화하여 문제를 해결했습니다.
Ousmane

43

my.cnf라는 mysql 구성 파일을 열고 "bind-address"를 찾습니다. 여기서 설정 (127.0.0.1 또는 localhost)을 라이브 서버 IP (mysql_connect 함수에서 사용중인 IP)로 바꿉니다.

이것은 문제를 확실히 해결할 것입니다.

감사


2
ssh 터널을 사용할 때 bind-address = 127.0.0.1 또는 localhost를 사용해야합니다. bind-address가 machine ip 인 bitnami 에서이 문제가 발생했습니다.
z2z

1
Debian 10 + MySQL 독립형 전용 서버에 대한 동일한 문제 및 솔루션입니다.
Vilq

일반적으로 mysql 서비스를 127.0.0.1적용 가능한 곳에 바인딩하여 다른 호스트에서 직접 액세스 할 수 없도록 하는 것이 바람직 할 수 있음을 언급해야 합니다. 이것은 원격 무차별 대입 공격을 방지하고 가능한 보안 문제를 네트워크에 노출시키지 않습니다. 응용 프로그램이 동일한 컴퓨터 (매우 일반적인 호스팅 설정)에있는 경우 127.0.0.1resp를 사용 합니다. localhost서비스를 외부 인터페이스에 바인딩하고이를 mysql 호스트로 사용하는 것과 동일한 방식으로 작동합니다. 애플리케이션이 다른 곳에있는 경우 가능하면 내부 네트워크를 사용하십시오.
David

36

1) MySQL에 대한 원격 연결을 허용합니다. 파일 수정 :

>sudo nano /etc/mysql/my.cnf

주석 줄 :

#bind-address       = 127.0.0.1

MySQL을 다시 시작합니다.

>sudo service mysql restart

2) 원격 접속을위한 사용자를 생성합니다.

>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) 제 경우에는 Ubuntu를 사용하여 Windows에서 VirtualBox 컴퓨터로 원격으로 연결해야합니다. 따라서 iptables에서 포트 3306을 허용해야합니다.

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

1
나를 위해 my.cnf에서 bind-address 확인을 잊어 버렸습니다. 감사.
abkrim

1
이것은 완전히 도움이되었습니다. 감사합니다!
osehgol

1
완벽하게 작동했지만 Windows에서 워크 벤치를 사용하고 있었으므로 3 단계를 수행하지 않았지만 작동했습니다. 감사!
RohitAneja

마지막 명령이 작동하지 않았지만 자신의 방식으로 새 사용자를 생성하면 문제가 해결되었습니다. 랩톱에서 raspberry pi의 mysql에 액세스 할 수 있습니다. 감사!
Eyyüp Alkış

FLUSH PRIVILEGES새 사용자를 만든 후에 기억하십시오 .
Yew Hong Tat

15

새 슬레이브 서버를 설정할 때이 문제가있었습니다. 슬레이브 서버 IP 주소가 마스터 서버에서 누락되었습니다./etc/hosts.allow 파일 . IP 주소를 추가하고 마스터 서버에 연결할 수있게되었습니다.

hosts.allowhosts.deny을 사용 하여 액세스를 제어합니다.


커넥터 / C ++에 대한 내 문제. 지금, 난 단지에있을 어떤 설정이 필요 찾을 수 있다면 allow하는 경우 denyALL: ALL...

이것은 정말로 제 삶을 구했습니다. 워크 벤치에서 mysql에 연결하는 데 문제가있었습니다. "ALL : 127.0.0.1"을 /etc/hosts.allow 파일에 추가해야했고 작동하기 시작했습니다
Tomáš Tibenský

제 경우에는 / etc / hosts에 호스트 IP에 대한 잘못된 (이전) 항목이 있습니다. 새 IP가 발급되었을 때 이전 IP 아래에 있었고 겉보기에는 무시 된 것 같습니다. 이전 IP를 삭제하면 오류가 해결되었습니다.
David Ramirez 2015

7

이 문제가 있었고 이전 시스템 관리자가 MySQL이 실행중인 포트를 변경했습니다. MySQL Workbench는 기본 3306에 연결을 시도했지만 서버는 20300에서 실행 중이었습니다.


1
이 답변에 대한 좋은 점입니다. 나 자신에게이 일을했다는 것이 밝혀졌다.
cautionbug dec.

5

내 경우의 문제는 MySQL이 Linux의 lo에만 바인딩된다는 것입니다. 문제를 해결하기 위해 bind-address = 127.0.0.1 줄을 제거하여 my.cnf (/etc/mysql/my.cnf에 있음)를 편집했습니다.

이렇게하면 mysql이 모든 네트워크 인터페이스에 바인딩 할 수 있습니다.


5

이 오류는 MySQL Workbench 6.3을 사용하여 Google Cloud SQL에 연결하는 동안 발생했습니다.

약간의 조사 끝에 인터넷 제공 업체가 내 IP 주소를 변경했으며 Cloud SQL에서 허용되지 않는 것으로 나타났습니다.

나는 그것을 승인하고 일하러 돌아갔다.


4

MySQL 워크 벤치에서 연결할 때 똑같은 오류가 발생했습니다. 해결 방법은 다음과 같습니다. 내 /etc/my.cnf 구성 파일에는 bind-address 값이 서버의 IP 주소로 설정되어 있습니다. 복제를 설정하려면이 작업을 수행해야했습니다. 어쨌든 두 가지를 수행하여 해결했습니다.

  1. my.cnf 파일의 바인드 주소에서 연결하는 데 사용할 수있는 사용자를 만듭니다.

예 :

CREATE USER 'username'@'bind-address' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON schemaname.* TO 'username'@'bind-address';
FLUSH PRIVILEGES;
  1. 바인딩 주소와 일치하도록 MySQL 워크 벤치의 연결 세부 정보에서 MySQL 호스트 이름 값을 변경합니다.

대단히 감사합니다. MySQL 복제도 있었고 bind-address는 로컬 주소 인 10.0.0.x였습니다. 이 솔루션을 위해 며칠 동안 고군분투했습니다.
iFadi

3

나에게 문제는 DNS 쿼리가 서브넷 내의 FW에 의해 차단되었다는 것입니다. 해결책은 MySQL 내에서 DNS 조회를 비활성화하는 것이 었습니다.


나는 DNS가 내 경우에도 책임이 있다고 생각합니다.
Zenexer 2015

3

방금 Windows 상자에 mysql을 설정했습니다. 같은 상자에서 Navicat MySql 클라이언트와 연결하려고 할 때 OP 오류가 발생했습니다. 호스트로 127.0.0.1을 지정해야했고 그게 맞았습니다.

localhost 또는 서버의 실제 IP 주소가 모두 작동하지 않았습니다.


3

이 오류는 서버를 찾을 것으로 예상되는 포트에서 응답을받지 못했음을 의미합니다. 원인은 잘못된 시스템에 연결하는 것 (여러 가지 이유 중 하나)에서 서버가 예상 포트에 있지 않는 것까지 다양합니다.

/etc/mysql/my.cnf에서 서버가 바인딩 된 포트를 확인하십시오. 그것이 당신의 connect 문에있는 것과 일치합니까? 일치하는 경우 서버 자체와 클라이언트를 실행중인 컴퓨터의 명령 줄에서 mysql에 연결해보십시오. 한 곳에서 작동하고 다른 곳에서는 작동하지 않으면 방화벽 / 라우터 구성 문제가있을 수 있습니다.


나는 이것이 옳지 않다고 생각합니다. 해당 포트에서 수신 대기하는 것이 ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)없으면 Lost connection to MySQL server메시지가 아닌 응답을 받게 됩니다.
Ken Williams 19

2

제 경우에는 hosts.deny에 ALL : ALL이 있습니다. 이것을 ALL로 변경 : PARANOID가 ssh를 통해 연결할 때 내 문제를 해결했습니다.


2

문제는 나에게 아주 어리석은 것이었다.

AWS EC2 Ubuntu 머신에서 동일한 문제가 발생했습니다 (MariaDB는 당분간 로컬로 설치됨). 그래서 SSH 터널링을 시도했고 동일한 문제가 발생했습니다. 그래서 터미널을 통해 ssh 터널을 시도했습니다.

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

그리고 그것은 나에게 이렇게 말했습니다.

사용자 "root"가 아닌 "ubuntu"사용자로 로그인하십시오.

ssh 구성과 마찬가지로 ssh 사용자를 루트에서 우분투로 변경했으며 제대로 연결되었습니다.

따라서 SSH 연결 사용자를 확인하십시오.

나는 이것을 감독했고, 그래서이 시간이 너무 30 분이나 되었으니 이것이 당신에게 도움이되기를 바랍니다.


2

나에게 설정 파일은 "/etc/mysql/mysql.conf.d/mysqld.cnf"를 찾았고 바인드 주소를 주석 처리했습니다.

여기서 볼 수 있듯이 : 네트워크 건너 뛰기 대신 기본값은 이제 더 호환되고 덜 안전하지 않은 localhost에서만 수신하는 것입니다.


놀랍게도 이것은 데비안 10에서 작동했습니다. 기회를주었습니다. 편집 MySQL을 설정 sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf하고 대신에 bind-address = 111.112.113.114내가 사용 bind-address = 127.0.0.1. SSH 터널 설정은 hostpresto.com/community/tutorials/…에 설명 된대로 설정됩니다 . 잘 하셨습니다 ! 감사!
klor

1

이 동일한 문제가 발생하여 Bind Address 를 앞뒤로 사용할 수 없습니다. 나를위한 해결책은 권한플러시하는 것이었다 .

mysql> FLUSH PRIVILEGES;

1

제가 설정 bind-address = 0.0.0.0에서mysql/my.cnf 일했다. 기본적으로 모든 주소 (하지만 여전히 하나의 포트)를 수신합니다.

그리고 서버를 다시 시작하는 것을 잊지 마십시오. systemctl restart mysql


6
모든 주소 / 인터페이스, 단 하나의 포트.
Zenexer 2015


1

또 하나의 이유 ...

나는 모든 것이 사용자 정의되고 동일한 오류로 인해 연결할 수없는 Ubuntu 서버를 만났습니다.

이 설정은 내부에있었습니다 /etc/ssh/sshd_config

PermitTunnel no

로 변한 후

PermitTunnel yes

MySQL DB에 원격으로 연결할 수있었습니다.


1

내 db 도커 컨테이너 를 연결하려고합니다.동일한 문제인 Ubuntu 18.04에서 .

먼저 장치를 실행하여 장치 nmcli dev를 확인하십시오.docker0 가 연결되어 .

연결되지 않은 경우 Docker 서비스를 다시 시작하십시오.

sudo service docker restart


1

제 경우에는 3306 번 포트를 차단하는 대학교 와이파이였습니다. 모바일 핫스팟을 이용해서 연결할 수있었습니다.

모바일 핫스팟 또는 다른 네트워크로 변경하고 작동하는 경우 원래 네트워크가 포트 3306을 차단하고 있음을 알 수 있습니다. 두 개 이상의 네트워크에서 동일한 오류가 발생하면 해당 오류가 컴퓨터에 고유 한 것입니다.


1

FirewalldIP 주소를 차단합니다. 따라서 액세스 권한을 부여하려면 다음 명령을 사용하십시오.

firewall-cmd --permanent --zone = trusted --add-source = YOUR_IP / 32

방화벽 -cmd --permanent --zone = trusted --add-port = 3306 / tcp

방화벽 -cmd --reload


0

원격으로 Mysql에 연결할 때 오류가 발생했습니다. 나는 다음과 같은 경고를 받았다 /var/log/mysqld.log.

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

이 줄을 /etc/hosts파일에 추가했습니다 .

X.X.X.X some_name

문제 해결됨! 사용하지 않으면 skip-name-resolveMySQL에 연결할 때 로컬 앱에서 일부 오류가 발생했습니다.


0

나는 동일한 문제가 있었다. 이 문제를 해결하기 위해 호스트를 localhost : 3306에서 localhost로 변경했습니다. 따라서 연결을 위해 부적절한 포트를 지정하면 오류가 발생할 수 있습니다. 기본값으로 두는 것이 좋습니다.


1
이는 mysql이 호스트 이름의 일부로 포트를 허용하지 않기 때문일 수 있습니다. 대신 인수를 사용해야합니다-P 3306
Clay H

0

데이터베이스 디렉토리 읽기-쓰기 권한도 내가 찾은 문제입니다. 응용 프로그램이 db 위치에서 파일을 rw 할 수 있는지 확인하십시오. 테스트를 위해 chmod 777을 사용해보십시오.


0

나는 같은 문제에 직면했다. AllowTcpForwarding Yes 를 확인하고 설정하려고 시도했지만 sshd_config에 누락되어 도움이되지 않았습니다. sshd_config 또는 my.cnf를 변경하지 않았습니다. ssh 호스트 이름이 mysql 호스트 이름 (localhost 사용)과 동일 하지 않은지 확인하십시오 .

워크 벤치에서 +를 선택하여 새 연결을 추가하고 다음을 설정합니다.

  • 연결 방법 : SSH를 통한 표준 TCP / IP
  • SSH 호스트 이름 : 192.168.0.50:22 (원격 SSH 서버 IP 및 포트 교체 (선택 사항))
  • SSH 사용자 이름 : sshuser
  • 암호를 설정하거나 프롬프트에서 추가 할 수 있습니다.
  • MYSQL 호스트 이름 : localhost 또는 127.0.0.1
  • MYSQL 서버 포트 : 3306
  • 암호를 설정하거나 프롬프트에서 추가 할 수 있습니다.

연결을 테스트하십시오. 성공하면 OK를 누르십시오. 바이올라!


0

bind-address가 구성 파일에없고 mysql이 AWS 인스턴스에서 호스팅되는 경우 보안 그룹을 확인하십시오. 이상적인 조건에서 인바운드 규칙은 포트 3306의 모든 연결을 수락하고 아웃 바운드 규칙은 모든 유효한 IP에 다시 응답해야합니다.


0

나는 3 단계 아래에서 나를 위해 일했습니다.

  1. bind-address = "YOUR MACHINE IP"my.cnf에서 파일을 /etc/my.cnf에

  2. 다음 명령으로 서비스를 다시 시작하십시오. service httpd restart

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


0

비슷한 오류가 발생했습니다 (MYSql Workbench를 통해 AWS에서 MYSQL에 연결). 나는 전에 잘 연결하고 갑자기 작동을 멈추고 다시 작동하지 않습니다.) 내 연결은 키 파일로 보호되는 SSH를 통해 이루어졌습니다.

내가 시간이 초과되었다는 것이 밝혀졌습니다. 그래서 SQL 연결 시간 제한을 30 초 (기본값 10에서)로 늘렸고 다시 진행하는 것이 좋습니다. 시도 할 사항 (비슷한 설정에있는 경우)

  1. 터미널에서 서버로 직접 ssh 할 수 있습니까 (키 파일 권한 등의 문제 감지)?
  2. 그런 다음 터미널을 통해 다음과 같은 것을 사용하여 동일한 사용자 / 비밀번호로 MySQL에 연결할 수 있습니까? mysql -u [username] -p [database] 있습니까? 사용자 권한 문제 등을 확인합니다.
  3. 이 두 가지가 모두 작동하면 매개 변수가 문제가 아니며 나와 같은 시간 초과 문제 일 수 있습니다 (시간 초과 오류가 아니라 권한을 확인하라는 요청을 제외하고)

0

제한된 디스크 공간으로 인해이 오류가 발생할 수 있습니다.

디스크 공간 확인

$ df -h

100 % 사용 된 디스크가있는 경우 공간을 늘리십시오.

제 경우 : Vagrant (8.0.1) 상자 (Ubuntu 16.04)가 있습니다. mysql 디스크 용량은 10GB 였고 20GB로 늘 렸습니다.

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

그런 다음 mysql을 다시 시작하십시오.

$ sudo service mysql restart

0

이 오류가 원격에서 연결되는 경우 cpanel의 원격 mysql 옵션으로 이동 한 다음 호스트에 %를 추가합니다 (% 와일드 카드 허용).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.