/엔지니어/트러블슈팅/MySQL/MariaDB 접속 오류 완전 해결 —
트러블슈팅초급UbuntuDebianCentOSRHELMySQLMariaDBERROR 1045

MySQL/MariaDB 접속 오류 완전 해결 — ERROR 1045 · Can't connect · socket

ERROR 1045 (28000): Access denied, Can't connect to MySQL server on localhost, socket 파일 없음 등 MySQL·MariaDB 접속 오류 유형별 원인과 해결법.

MySQL·MariaDB 접속 오류는 크게 세 가지입니다. 오류 메시지를 먼저 확인하세요.

오류 메시지원인
ERROR 1045 (28000): Access denied비밀번호·사용자·호스트 불일치
Can't connect to MySQL server on 'localhost'MySQL 데몬 미실행 또는 포트 차단
Can't connect to local MySQL server through socket소켓 파일 경로 불일치
Host 'x.x.x.x' is not allowed to connect원격 접속 권한 없음

1. ERROR 1045 — Access denied

비밀번호 확인

Bash
# root 비밀번호로 접속 시도
mysql -u root -p

# 특정 사용자
mysql -u myuser -p mydb

비밀번호를 잊어버린 경우 — 초기화

Bash
# MySQL 서비스 중지
sudo systemctl stop mysql

# 인증 없이 시작
sudo mysqld_safe --skip-grant-tables &

# 접속 후 비밀번호 변경
mysql -u root
SQL
-- MySQL 5.7 이하
UPDATE mysql.user SET authentication_string=PASSWORD('새비밀번호') WHERE User='root';
FLUSH PRIVILEGES;

-- MySQL 8.0+
ALTER USER 'root'@'localhost' IDENTIFIED BY '새비밀번호';
FLUSH PRIVILEGES;
EXIT;
Bash
# 정상 재시작
sudo systemctl restart mysql

사용자·권한 확인

SQL
-- root로 접속 후
SELECT user, host, authentication_string FROM mysql.user;

-- 특정 사용자에게 권한 부여
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

2. Can't connect to MySQL server — 데몬 미실행

Bash
# 서비스 상태 확인
sudo systemctl status mysql      # Ubuntu/Debian
sudo systemctl status mariadb    # MariaDB

# 실행 중이지 않으면 시작
sudo systemctl start mysql
sudo systemctl enable mysql

# 실제 포트 리스닝 확인
sudo ss -tlnp | grep 3306
Bash
# 오류 로그 확인 (시작 실패 원인)
sudo journalctl -u mysql -n 50
sudo tail -50 /var/log/mysql/error.log

3. socket 파일 없음·경로 불일치

오류: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

Bash
# 실제 소켓 파일 위치 찾기
sudo find /var/run /tmp -name "*.sock" 2>/dev/null
sudo find /run -name "mysqld.sock" 2>/dev/null

# MySQL 설정에서 소켓 경로 확인
sudo grep -r "socket" /etc/mysql/

소켓 경로가 다르면 접속 시 명시합니다:

Bash
mysql -u root -p --socket=/tmp/mysql.sock

또는 ~/.my.cnf 에 기본 소켓 경로 설정:

INI
[client]
socket = /tmp/mysql.sock

4. 원격 접속 허용 안 됨

오류: Host 'x.x.x.x' is not allowed to connect to this MySQL server

SQL
-- root로 접속 후 원격 허용 계정 생성
CREATE USER 'myuser'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%';
FLUSH PRIVILEGES;
Bash
# MySQL이 127.0.0.1만 리스닝하는지 확인
sudo grep -r "bind-address" /etc/mysql/
# bind-address = 127.0.0.1 → 0.0.0.0 으로 변경 후 재시작
sudo systemctl restart mysql

원격 접속을 열면 방화벽(UFW)에서 3306 포트를 신뢰 IP만 허용하도록 설정하세요. sudo ufw allow from 신뢰IP to any port 3306


빠른 진단

Bash
sudo systemctl status mysql          # 서비스 상태
sudo ss -tlnp | grep 3306            # 포트 리스닝
sudo tail -30 /var/log/mysql/error.log  # 오류 로그
mysql -u root -p --verbose           # verbose 접속
#MySQL#MariaDB#ERROR 1045#Access denied#트러블슈팅#socket#데이터베이스
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

관련 공식 문서MySQL 공식 매뉴얼

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.