[MySQL] MySQL root 계정 재생성

Nowod_K·2023년 2월 11일
0

데이터 마이그레이션 준비

예전 회사에서 MySQL 버전 업그레이드 및 데이터 마이그레이션 관련 프로젝트를 진행했었다.

DB마이그레이션 사전작업을 준비하던 중 문제점이 하나 발생하였는데, 바로 DB root 계정이 없었던 것이다.

AWS에서 제공하는 마이그레이션 툴은 root계정을 필요로 하기에, root 계정을 재생성하기 위한 작업이 필요했다.

전제조건

"DB의 재시작을 할 수 있는 조건이어야 한다. (운영 권한, 서비스 시간 고려)"
"OS의 루트 권한이 있어야한다. (DB설정 및 서비스 재시작이 필요)"

개인 프로젝트라면 전혀 문제가 없었겠지만, 안타깝게도 운영DB에 작업을 해야하다 보니 DB 서비스의 재시작은 굉장히 큰 리스크가 있었다.

그래서 결국 12시 이후 작업을 진행하기로 하였다.
물론 다행히도 리눅스 루트 권한은 있었다.

root 계정 재생성

1. 설정파일을 열어 skip-grant-tables를 추가한다.
"sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf"

  • skip-grant-tables를 추가하면 말그대로 grant-tables를 스킵한다.
  • 시스템이 권한 없이 실행되는 것이다.

2. MySQL 재시작
"sudo killall -9 mysqld"
"sudo service mysql restart"

3. root로 mysql 접속 (skip-grant-tables 덕분에 가능)
"sudo mysql -u root mysql"

4. root 계정 생성
"insert into user (Host, User, Password) values ('%', 'root', password('password));"
"insert into user (Host, User, Password) values ('localhost', 'root', password('password'));"

5. 변경 사항 적용 및 권한 추가
"flush privileges;"
"grant all privileges on . to root@localhost with grant option;"
"grant all privileges on . to root@'%' with grant option;"
"flush privileges;"

6. skip-grant-tables 삭제 후 재시작
"sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf"
"sudo service mysql restart"

사실 root을 삭제하는 것은 MySQL 사용할 때에는 보안적으로 굉장히 좋다.
갑자기 root계정이 필요해지는 순간에 이 글이 도움되기를 바란다.

profile
개발을 좋아하는 마음과 다양한 경험을 토대로 좋은 개발자가 되고자 노력합니다.

0개의 댓글