MySQL 에러 완벽 정리 가이드: 자주 만나는 에러부터 해결법까지
MySQL/MariaDB 에러 완벽 가이드: 자주 만나는 에러 원인과 해결법 데이터베이스를 다루다 보면 예상 밖의 에러를 만나는 경우가 정말 많아요.
🔧 MySQL/MariaDB 에러 완벽 가이드: 자주 만나는 에러 원인과 해결법
데이터베이스를 다루다 보면 예상 밖의 에러를 만나는 경우가 정말 많아요. 특히 MySQL이나 MariaDB를 운영하면서 갑자기 연결이 끊기거나 권한 문제가 생기면 당황하기 쉽죠. 이 글에서는 실무에서 자주 마주치는 MySQL/MariaDB 에러들을 체계적으로 정리해서, 각 에러의 원인과 구체적인 해결 방법을 알려드릴게요. 에러 코드를 보고 빠르게 대응할 수 있도록 말이에요.
MySQL 에러는 크게 시스템 레벨 에러 와 SQL 문법 에러 로 나뉩니다. 시스템 에러는 데이터베이스 연결, 권한, 디스크 공간 같은 인프라 문제고, SQL 에러는 쿼리 문법이나 데이터 무결성 관련 문제예요. 두 가지를 모두 이해하면 대부분의 상황에 대응할 수 있습니다.
🔌 연결 관련 에러: ERROR 2002 시리즈
가장 흔하게 마주치는 에러가 바로 ERROR 2002입니다. “can’t connect to local mysql server through socket” 메시지가 뜨는데, 이건 MySQL 서버에 연결할 수 없다는 뜻이에요. 하지만 뒤에 붙는 숫자 (2), (13), (111)에 따라 원인이 완전히 달라집니다.
ERROR 2002 (2) - MySQL 데몬이 실행되지 않은 경우
이 에러가 나면 먼저 MySQL 서버 자체가 실행 중인지 확인해야 해요. mysql.sock 파일을 찾아서 경로를 확인하고, 그 경로를 명시적으로 지정해서 연결하면 됩니다.
만약 mysql.sock 파일이 있는데도 접근 권한이 없다면, MySQL 유저 권한을 다시 설정해야 해요.
ERROR 2002 (13) - 디렉토리 권한 문제
이 경우는 /usr/local/mysql 디렉토리 자체의 권한이 없을 때 발생합니다. 간단하게 권한을 열어주면 돼요.
ERROR 2002 (111) - 심볼릭 링크 오류
이건 mysql.sock 파일의 심볼릭 링크가 잘못됐을 때예요. 올바른 경로로 다시 링크를 만들어주면 됩니다.
또 다른 방법으로는 my.cnf 파일에 mysql.sock 경로를 직접 명시하는 것도 있어요. 이렇게 하면 MySQL이 시작될 때마다 올바른 경로를 참조합니다.
🔐 권한 관련 에러: ERROR 1044, 1045
데이터베이스에 접근할 권한이 없을 때 발생하는 에러들입니다. 특히 새로운 유저를 만들었거나, 특정 데이터베이스에만 접근하도록 제한했을 때 자주 나타나요.
ERROR 1044 - 특정 데이터베이스 접근 권한 없음
예를 들어 ‘abc’ 유저가 ‘abcdb’ 데이터베이스에 접근하려고 할 때 이 에러가 나면, 해당 유저에게 그 데이터베이스 접근 권한을 부여해야 합니다.
ERROR 1045 - 비밀번호 오류 또는 인증 실패
이 에러는 보통 root 계정으로 비밀번호 없이 접속하려고 할 때 나타나요. 현대의 MySQL은 보안상 비밀번호가 설정되어 있으면 반드시 -p 옵션으로 비밀번호를 입력해야 합니다.
📁 데이터베이스/테이블 생성 에러
새로운 데이터베이스나 테이블을 만들 때 발생하는 에러들도 있어요. 이들은 보통 이름 중복이나 시스템 리소스 부족 때문에 생깁니다.
ERROR 1006 - 데이터베이스 생성 실패 (디스크 부족)
이 에러의 메시지는 “Can’t create database ‘dbname’. (errno: 28)“인데, errno: 28은 디스크 공간이 없다는 뜻이에요. 서버의 하드디스크가 가득 찼을 때 발생합니다. 특히 /tmp 디렉토리를 먼저 정리하는 것이 도움이 됩니다.
ERROR 1007 - 데이터베이스 이미 존재
같은 이름의 데이터베이스가 이미 있을 때 나타나요. 특히 여러 유저가 있을 때 한 유저에서는 삭제했는데 다른 유저에게는 아직 남아있을 수 있습니다.
ERROR 1008 - 데이터베이스 삭제 실패
“Can’t drop database ‘dbname’. Database doesn’t exist” 메시지가 나면, 이미 다른 곳에서 삭제된 데이터베이스를 또 삭제하려고 할 때예요. 새로고침을 해서 현재 상태를 확인하면 됩니다.
⚠️ SQL 문법 에러: ERROR 1054, 1064
SQL을 작성할 때 가장 자주 마주치는 에러들이에요. 문법 실수나 존재하지 않는 컬럼을 참조할 때 발생합니다.
ERROR 1054 - 존재하지 않는 컬럼
“Unknown column ‘sss’ in ‘where clause’” 메시지는 WHERE 절에서 존재하지 않는 컬럼을 참조했다는 뜻이에요. 특히 문자열 값을 비교할 때 따옴표를 빼먹으면 MySQL이 컬럼명으로 인식해서 이 에러가 납니다.
ERROR 1064 - SQL 문법 오류
“You have an error in your SQL syntax” 메시지가 나오면 쿼리에 문법 오류가 있다는 뜻이에요. 에러 메시지에 “at line n” 이라고 나오니까 그 라인을 집중해서 봐야 합니다. 보통 따옴표 누락, 세미콜론 빠짐, 예약어 오타 같은 것들이 원인이에요.
🔄 데이터 무결성 에러: ERROR 1062, 1093
데이터베이스의 제약조건(constraint)을 위반했을 때 발생하는 에러들입니다. 특히 Primary Key나 Unique 제약이 있을 때 자주 나타나요.
ERROR 1062 - 중복된 Primary Key
“Duplicate entry ‘1’ for key 1” 메시지는 Primary Key가 설정된 컬럼에 이미 존재하는 값을 다시 넣으려고 할 때 나타나요. Primary Key는 테이블 내에서 유일해야 하니까요.
ERROR 1093 - INSERT/UPDATE에서 같은 테이블 참조
이 에러는 “You can’t specify target table ‘TESTNAME’ for update in FROM clause” 메시지가 나타나요. INSERT나 UPDATE 문에서 같은 테이블을 서브쿼리로도 참조하려고 할 때 발생합니다.
📊 데이터 입력/수정 관련 에러
INSERT나 UPDATE 문을 실행할 때 자주 만나는 에러들이에요. 컬럼 개수 불일치나 UNION 쿼리의 컬럼 수 차이 같은 것들이 원인입니다.
ERROR 1136 - INSERT 컬럼 개수 불일치
“Column count doesn’t match value count at row 1” 메시지가 나면, INSERT 문에서 지정한 컬럼 개수와 VALUES의 값 개수가 맞지 않는다는 뜻이에요.
ERROR 1222 - UNION 쿼리 컬럼 수 불일치
“The used SELECT statements have a different number of columns” 메시지는 UNION으로 여러 SELECT를 합칠 때, 각 SELECT의 컬럼 개수가 다를 때 나타나요. UNION은 모든 SELECT가 같은 개수의 컬럼을 반환해야 합니다.
ERROR 1242 - 서브쿼리가 여러 행 반환
“Subquery returns more than 1 row” 메시지는 서브쿼리의 결과가 여러 행인데, 단일 값을 기대하는 컨텍스트에서 사용했을 때 나타나요. 예를 들어 = 연산자와 함께 사용할 때는 서브쿼리가 최대 1개 행만 반환해야 합니다.
🛡️ Safe Mode 관련 에러: ERROR 1175
MySQL에는 실수로 대량의 데이터를 삭제하는 것을 방지하기 위해 Safe Update Mode가 있어요. 이 모드가 활성화되어 있으면 WHERE 절에 KEY 컬럼을 사용하지 않은 UPDATE나 DELETE는 실행되지 않습니다.
ERROR 1175 - Safe Update Mode 제약
“You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column” 메시지가 나면, Safe Mode를 일시적으로 해제하거나, WHERE 절에 KEY 컬럼을 포함시켜야 해요.
💡 실무 팁: 에러 로그 확인하기
위에서 다룬 에러들로도 해결이 안 되면, MySQL 시스템 에러 로그를 확인해야 해요. 로그에는 더 자세한 정보가 담겨있거든요.
에러 로그를 보면 정확한 시간과 함께 어떤 쿼리가 문제를 일으켰는지 알 수 있어요. 이를 통해 더 빠르게 원인을 파악할 수 있습니다.
🎯 에러 해결 체크리스트
MySQL 에러가 났을 때 순서대로 확인해야 할 것들을 정리해봤어요.
🚀 마무리: 에러는 정보다
MySQL 에러는 처음엔 답답하고 짜증날 수 있지만, 사실 매우 정직한 피드백이에요. 에러 코드와 메시지를 차근차근 읽으면 거의 모든 문제를 해결할 수 있습니다. 이 글에서 다룬 에러들이 실무에서 가장 자주 나타나는 것들이니까, 북마크해두고 필요할 때마다 참고하면 좋을 거예요.
특히 ERROR 2002 (연결 문제), ERROR 1044/1045 (권한 문제), ERROR 1064 (문법 오류), ERROR 1062 (중복 키) 이 네 가지만 잘 알아도 대부분의 상황을 대응할 수 있습니다. 처음엔 복잡해 보이지만, 몇 번 겪다 보면 패턴이 보여요. 화이팅!
참고: 이 글의 내용은 MySQL 5.7, MariaDB 10.x 기준입니다. 버전에 따라 일부 에러 코드나 해결 방법이 다를 수 있으니, 공식 문서도 함께 참고하세요. MariaDB 공식 에러 코드 문서는 mariadb.com/kb/en/mariadb-error-codes/ 에서 확인할 수 있습니다.
#MySQL #MariaDB #데이터베이스 #에러해결 #SQL #개발팁 #데이터베이스관리