오류 1396(HY000): 'root'@'localhost'에 대한 CREATE USER 작업이 실패하는 이유
MySQL에서 CREATE USER 명령어로 'root'@'localhost' 계정을 생성하려고 할 때 ERROR 1396 (HY000) 오류가 발생하는 경우가 있습니다. 이 오류의 핵심 원인은 간단합니다. 시스템에는 이미 'root'라는 이름의 계정이 존재하기 때문입니다.
MySQL에서 CREATE USER는 말 그대로 새로운 사용자를 생성하는 명령어입니다. 따라서 이미 존재하는 사용자 이름으로 계정 생성을 시도하면 위와 같은 오류가 반환됩니다.
오류가 발생하는 상황
다음과 같이 'root' 사용자를 생성하는 쿼리를 실행해 보겠습니다.
mysql> create user 'root'@'localhost' identified by 'root123';
위 쿼리를 실행하면 다음과 같은 오류 메시지가 출력됩니다.
ERROR 1396 (HY000): Operation CREATE USER failed for 'root'@'localhost'
원인 분석
MySQL이 설치될 때 기본 관리자 계정인 'root'@'localhost'는 이미 자동으로 생성되어 있습니다. 이 계정은 별도의 이름과 비밀번호로 설정되어 운영되고 있으므로, 동일한 이름('root')과 호스트('localhost')로 새 사용자를 만들려고 하면 중복 충돌이 발생하여 오류 1396이 나타나는 것입니다.
다른 이름으로 사용자 생성하기
반면, 존재하지 않는 다른 이름으로 사용자를 생성하면 아무 문제 없이 정상 처리됩니다.
mysql> create user 'John'@'localhost' identified by 'john123'; Query OK, 0 rows affected (0.14 sec)
실행 결과를 보면 'John'이라는 사용자가 지정된 비밀번호('john123')와 함께 성공적으로 생성된 것을 확인할 수 있습니다.
기존 root 계정을 변경하고 싶다면?
'root' 계정의 비밀번호를 변경하거나 권한을 수정하려는 목적이라면 CREATE USER 대신 ALTER USER 명령어를 사용해야 합니다.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '새로운비밀번호';
또한 현재 서버에 등록된 사용자 목록을 확인하려면 다음 쿼리를 활용할 수 있습니다.
mysql> SELECT user, host FROM mysql.user;
정리
오류 1396은 삭제된 것으로 보이지만 실제로는 여전히 존재하는 계정, 또는 이미 등록된 계정과 동일한 이름으로 CREATE USER를 실행할 때 발생합니다. 새 계정 생성 전에는 반드시 기존 사용자 목록을 확인하고, 기존 계정 수정이 필요하다면 ALTER USER를 사용하는 것이 올바른 해결 방법입니다.