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
비밀번호 확인
# root 비밀번호로 접속 시도
mysql -u root -p
# 특정 사용자
mysql -u myuser -p mydb비밀번호를 잊어버린 경우 — 초기화
# MySQL 서비스 중지
sudo systemctl stop mysql
# 인증 없이 시작
sudo mysqld_safe --skip-grant-tables &
# 접속 후 비밀번호 변경
mysql -u root-- 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;# 정상 재시작
sudo systemctl restart mysql사용자·권한 확인
-- 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 — 데몬 미실행
# 서비스 상태 확인
sudo systemctl status mysql # Ubuntu/Debian
sudo systemctl status mariadb # MariaDB
# 실행 중이지 않으면 시작
sudo systemctl start mysql
sudo systemctl enable mysql
# 실제 포트 리스닝 확인
sudo ss -tlnp | grep 3306# 오류 로그 확인 (시작 실패 원인)
sudo journalctl -u mysql -n 50
sudo tail -50 /var/log/mysql/error.log3. socket 파일 없음·경로 불일치
오류: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
# 실제 소켓 파일 위치 찾기
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/소켓 경로가 다르면 접속 시 명시합니다:
mysql -u root -p --socket=/tmp/mysql.sock또는 ~/.my.cnf 에 기본 소켓 경로 설정:
[client]
socket = /tmp/mysql.sock4. 원격 접속 허용 안 됨
오류: Host 'x.x.x.x' is not allowed to connect to this MySQL server
-- root로 접속 후 원격 허용 계정 생성
CREATE USER 'myuser'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%';
FLUSH PRIVILEGES;# 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
빠른 진단
sudo systemctl status mysql # 서비스 상태
sudo ss -tlnp | grep 3306 # 포트 리스닝
sudo tail -30 /var/log/mysql/error.log # 오류 로그
mysql -u root -p --verbose # verbose 접속이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.