안녕하세요, 코딩하는곰입니다. MySQL이나 MariaDB를 사용하시는 개발자분들이라면 한 번쯤은 마주쳤을 ERROR 2002: Can’t connect to MySQL 서버 오류. 이 오류는 데이터베이스 서버에 연결할 수 없을 때 발생하는데, 원인이 다양해서 해결하기 까다롭게 느껴질 수 있습니다. 오늘은 20년 경력의 MySQL 개발자로서 이 오류의 다양한 원인과 체계적인 해결 방법을 상세히 설명해드리겠습니다. 서버 다운, 포트 문제, 소켓 오류 등 각각의 원인에 따른 진단 방법과 해결책을 단계별로 알려드리니, 따라 하시면 쉽게 문제를 해결하실 수 있을 겁니다.
ERROR 2002 오류는 MySQL 클라이언트가 MySQL 서버에 연결할 수 없을 때 발생하는 기본적인 연결 문제입니다. 이 오류 메시지는 일반적으로 “ERROR 2002 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)” 또는 “ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)“와 같은 형태로 출력됩니다. 첫 번째는 TCP/IP 연결 실패, 두 번째는 소켓 파일 연결 실패를 의미합니다. 이 오류의 근본적인 원인은 크게 네 가지 범주로 나눌 수 있습니다: MySQL 서비스가 실행 중이지 않은 경우, 네트워크 구성 문제(포트, 바인드 주소, 방화벽), 소켓 파일 관련 문제, 그리고 사용자 권한 또는 호스트 설정 문제입니다. 문제를 효과적으로 해결하기 위해서는 체계적으로 원인을 진단하는 것이 중요합니다. 먼저, 가장 기본적인 확인 사항인 MySQL 서비스 상태부터 점검해보겠습니다. MySQL 서버 프로세스가 실제로 실행 중인지 확인하는 것은 가장 첫 번째로 해야 할 일입니다. Linux 시스템에서는 systemctl status mysql 또는 systemctl status mysqld 명령어로 서비스 상태를 확인할 수 있습니다. 만약 서비스가 중지되었다면, systemctl start mysql 명령어로 서비스를 시작해야 합니다. Windows의 경우에는 서비스 관리자에서 MySQL 관련 서비스가 실행 중인지 확인하고, 아니라면 수동으로 시작해주셔야 합니다. 때로는 서비스가 시작되었지만 즉시 종료되는 경우도 있는데, 이럴 때는 MySQL의 에러 로그 파일을 확인해야 합니다. 로그 파일은 일반적으로 /var/log/mysql/error.log 또는 /var/log/mysqld.log 경로에 위치하며, 여기서 서비스 시작 실패의 구체적인 원인을 찾을 수 있습니다.
# MySQL 서비스 상태 확인 (Ubuntu/Debian)systemctl status mysql# MySQL 서비스 시작systemctl start mysql# MySQL 서비스 재시작systemctl restart mysql# MySQL 서비스가 실행 중인 프로세스 확인ps aux | grep mysql
📘 코딩 튜토리얼과 가이드를 원한다면, JavaScript 객체 메서드 정의와 this 키워드 완벽 이해하기 - 함수형 속성 정의부터 화살표 함수까지를 참고해보세요.
MySQL 서비스가 정상적으로 실행 중임에도 연결 오류가 발생한다면, 네트워크 구성 문제를 의심해봐야 합니다. 가장 흔한 네트워크 문제는 포트 충돌이나 바인드 주소 설정 오류입니다. MySQL의 기본 포트는 3306번이며, 다른 애플리케이션이 이 포트를 사용하고 있거나 MySQL 설정 파일에서 포트가 변경되었을 경우 연결에 실패할 수 있습니다. netstat -tulpn | grep 3306 명령어로 3306 포트가 MySQL에 의해 LISTEN 상태인지 확인할 수 있습니다. 또한, MySQL 서버가 특정 IP 주소에만 바인딩되도록 설정되어 있을 수 있습니다. 이 설정은 /etc/mysql/mysql.conf.d/mysqld.cnf 또는 /etc/my.cnf 파일의 bind-address 지시어로 관리됩니다. 기본값은 often 127.0.0.1 (localhost)으로 설정되어 있어 원격에서 접속이 불가능합니다. 원격 접속이 필요한 경우, bind-address를 서버의 실제 IP 주소나 0.0.0.0 (모든 인터페이스)으로 변경한 후 MySQL 서비스를 재시작해야 합니다. 방화벽 설정도 빼먹을 수 없는 요소입니다. Linux의 iptables나 ufw, Windows의 Defender 방화벽에서 MySQL 포트(3306)를 허용해주어야 합니다. 특히 클라우드 환경(AWS, GCP 등)을 사용하는 경우, 보안 그룹이나 방화벽 규칙에서 인바운드 3306 포트를 열어주었는지 반드시 확인하세요.
-- MySQL 설정 파일에서 바인드 주소 확인 (일반적으로 mysqld.cnf 또는 my.cnf)-- bind-address = 127.0.0.1 인 경우 localhost만 접속 가능-- bind-address = 0.0.0.0 인 경우 모든 IP에서 접속 가능-- MySQL 커맨드라인에서 현재 포트 확인SHOW GLOBAL VARIABLES LIKE 'port';
# 3306 포트 리스닝 상태 확인netstat -tulpn | grep 3306ss -tulpn | grep 3306# UFW 방화벽에서 MySQL 포트 열기 (Ubuntu)ufw allow 3306/tcp# iptables에서 MySQL 포트 열기iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
중복되지 않고 예측하기 어려운 비밀번호를 만들고 싶다면 보안에 특화된 무작위 비밀번호 생성기를 추천합니다.
로컬 환경에서 MySQL에 접속할 때 특히 자주 발생하는 것이 소켓 파일 관련 오류입니다. Unix/Linux 시스템에서는 MySQL 클라이언트가 TCP/IP 대신 유닉스 도메인 소켓(일종의 특수 파일)을 통해 서버와 통신합니다. ERROR 2002에서 “Can’t connect to local MySQL server through socket”이라는 메시지는 이 소켓 파일을 찾을 수 없거나 접근 권한이 없을 때 나타납니다. 소켓 파일의 기본 경로는 /var/run/mysqld/mysqld.sock이나 /tmp/mysql.sock 등이며, MySQL 설정 파일에서 socket 지시어로 경로를 확인할 수 있습니다. 가장 간단한 해결 방법은 클라이언트 연결 시 -h 127.0.0.1을 명시적으로 지정하여 TCP/IP 루프백 연결을 강제하는 것입니다. (mysql -u root -p -h 127.0.0.1) 소켓 파일 자체에 문제가 있다면, 파일이 실제로 존재하는지 ls -l /var/run/mysqld/mysqld.sock 명령어로 확인하고, 없다면 MySQL 서비스를 재시작하여 파일을 재생성해야 합니다. 소켓 파일의 권한 문제도 흔한 원인입니다. mysqld.sock 파일과 해당 디렉토리의 소유자와 권한이 MySQL 사용자 및 mysql 그룹으로正确하게 설정되어 있는지 확인하세요. 마지막으로, 사용자 권한과 호스트 설정도 꼼꼼히 점검해야 합니다. MySQL 사용자가 localhost가 아닌 호스트(%)에서 접속하려고 하거나, 필요한 권한이 부여되지 않은 경우 연결이 거부될 수 있습니다. MySQL 콘솔에 접속 가능하다면, SELECT user, host FROM mysql.user; 명령어로 사용자 계정의 호스트 설정을 확인하고, GRANT ALL PRIVILEGES ON . TO ‘user’@‘host’; 명령어로 권한을 부여할 수 있습니다.
# 소켓 파일 경로 확인 및 권한 점검sudo find / -name "*.sock" | grep mysqlls -l /var/run/mysqld/mysqld.sock# 소켓 파일이 없을 경우 MySQL 재시작으로 생성sudo systemctl restart mysql# TCP/IP를 통한 로컬 연결 (소켓 문제 회피)mysql -u root -p -h 127.0.0.1 -P 3306
-- MySQL 사용자 및 호스트 설정 확인SELECT user, host, authentication_string FROM mysql.user;-- 원격 접속을 위한 사용자 생성 및 권한 부여 (예시)CREATE USER 'myuser'@'%' IDENTIFIED BY 'password';GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%';FLUSH PRIVILEGES;-- 특정 호스트에서의 접속만 허용하는 사용자 생성CREATE USER 'myuser'@'192.168.1.100' IDENTIFIED BY 'password';GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'192.168.1.100';FLUSH PRIVILEGES;
매일 두뇌 훈련을 위한 스도쿠를 풀고 싶다면, 클래식과 스토리 모드를 모두 제공하는 스도쿠 저니를 다운로드하세요.
지금까지 MySQL ERROR 2002: Can’t connect to MySQL 서버 오류의 주요 원인과 체계적인 해결 방법을 상세히 알아보았습니다. 서비스 상태 확인, 네트워크 및 포트 설정, 소켓 파일 문제, 사용자 권한 점검까지 단계별로 따라 하시면 대부분의 연결 문제를 해결하실 수 있을 겁니다. 데이터베이스 연결 문제는 초보자뿐만 아니라 경력이 많은 개발자도 가끔 마주치는 까다로운 문제입니다. 하지만 원리를 이해하고 체계적으로 접근하면 결코 어렵지 않습니다. 이 글이 여러분의 개발之路에 작은 도움이 되었기를 바랍니다. 궁금한 점이 있으시면 언제든지 댓글로 질문해주세요. 코딩하는곰이었습니다. 다음에 또 유용한 MySQL 팁으로 찾아뵙겠습니다!
스 트레스 해소와 두뇌 훈련을 동시에 하고 싶다면, 편안한 분위기의 스도쿠 저니: 크립토 할아버지가 완벽한 선택입니다.
