티스토리 뷰
MySQL을 사용하다 보면 Root 비밀번호를 잊어버리는 경우가 존재합니다. 이를 해결하기 위해서는 Root 비밀번호 재설정이 필요합니다. 검색을 하면 여러 방법들이 존재하는데 의도된 동작을 하지 않을 때가 있어서 해 본 방법 중 가장 깔끔하게 진행된 방법을 정리해 보고자 글을 작성하게 되었습니다.
해당 방법은 MacOS
, MySQL 8.0.32
버전을 기준으로 작성되었습니다.
1. MySQL 종료
MySQL 서버 실행을 위해서는 2가지 방법을 사용합니다.
brew services start mysql
homebrew를 통해 mysql을 설치했다면 위의 명령어를 통해 실행할 수 있고, 그렇지 않다면 아래의 명령어로 실행할 수 있습니다.
mysql.server start
실행 중인 MySQL 서버를 종료시키기 위해서는 실행 명령과 동일하게 종료 명령을 입력해야 합니다.
brew services stop mysql
mysql.server stop
실행 방법에 따라 알맞은 명령어로 MySQL 서버를 종료시킬 수 있습니다.
2. MySQL 실행
하지만 결국 Root의 비밀번호를 재설정하기 위해서는 MySQL 서버에 접속해서 Root 계정의 비밀번호를 변경해주어야 합니다. 비밀번호를 모르는데 어떻게 접속할 수 있을까요?
이미지와 같이 MySQL 서버를 실행할 때 --skip-grant-tables
옵션을 사용하면, Root 인증 없이 MySQL 서버 실행이 가능합니다.
해당 옵션은 MySQL 서버에 접속할 때, 권한 체계를 무시하고 모든 사용자에게 루트 권한을 부여하는 옵션입니다. 편리한 옵션이라고 생각할 수 있지만, 데이터베이스와 테이블에 대한 모든 권한을 가지기 때문에 보안에 대한 위험이 크게 증가하게 됩니다. 보통 이 옵션은 MySQL 계정을 복구하거나 수정하는 경우에 사용됩니다. 그렇기에 Root 계정 비밀번호를 재설정할 때 해당 옵션을 사용할 수 있습니다. 모든 권한을 가짐으로 불필요한 작업이 발생할 수 있기 때문에 빠르게 작업을 수행한 뒤 해당 옵션을 해제시켜 주는 것이 좋습니다.
3. 비밀번호 재설정
보통 데이터베이스의 내용을 변경하기 위해서는 alter
명령어를 사용합니다. --skip-grant-tables 옵션은 데이터베이스에 접근하기 위한 임시적인 목적으로 사용되기에, 보안상 문제가 될 수 있는 모든 작업을 MySQL이 금지하도록 해두었습니다. 따라서 alter 명령에 대한 사용이 금지되어 있습니다.
테이블에 대한 수정도 위험한 작업이지만, 허용되어 있기에 이를 활용할 수 있습니다.
mysql -u root
update mysql.user set authentication_string=null where user='root';
mysql에 root 계정으로 접속 후 임시로 비밀번호를 NULL
로 변경합니다.
flush privileges;
그리고 flush privileges
명령을 통해 사용자 권한에 대한 변경 사항을 적용합니다. 새로운 계정을 만들거나, 사용자에게 새로운 권한을 부여하거나, 사용자 계정을 삭제하거나, 권한을 변경한 경우 해당 명령을 사용하여 즉시 적용하도록 할 수 있습니다.
모든 권한을 부여하는 옵션을 사용하지 않은 채 mysql 서버를 재시작하고 비밀번호가 없는 root를 통해 접속하여 비밀번호를 재설정할 수 있습니다.
mysql -u root
alter user 'root'@'localhost' identified with caching_sha2_password by '새비밀번호';
4. 확인
mysql에서 나간 뒤 다시 접속할 때 앞서 설정한 비밀번호로 접속하면 성공적으로 접속된 것을 확인할 수 있습니다.