MySQL 2002 에러 해결한다고 몇 번 재설치 과정을 거쳤더니 root 계정 비밀번호가 초기화 되었다. MySQL 서비스 최초 실행 시 root 계정 비밀번호는 임시로 할당되어 /var/log/mysqld.log 파일에서 찾아볼 수 있는데, 문제는 이놈의 기억력 때문에 하루만에 재설정한 비밀번호를 까먹어버렸다😅
워낙에 많은 사람들이 겪는 상황인 만큼 해결 방법을 매우 쉽게 찾을 수 있었다. /usr/bin/mysqld_safe --skip-grant-tables 명령어로 MySQL에 접속한 뒤 root 계정 비밀번호를 변경해주면 된다고 하던데, 이상하게도 나는 해당 디렉터리에 mysqld_safe 라는 실행파일이 없었다.
mysqld_safe는 mysql이 안전하고 정상적으로 실행되는지 감시하는 기능을 수행한다고 한다. 즉 우리가 mysql을 호출하는 건 mysqld_safe를 통해 mysql을 바라보는 것과 같다는 것이다. 따라서 위 명령어처럼 mysqld_safe 에 --skip-grant-tables 옵션을 통해 root 계정을 비밀번호 없이 로그인 할 수 있었는데, 문제는 CentOS 7의 MySQL 5.7 이상의 버전부터 mysqld_safe의 기능을 systemctl이 대신하고 있다고 한다.
$ /usr/bin/mysqld_safe --skip-grant-talbes
bash: /usr/bin/mysqld_safe No such file or directory
$ mysqld_safe --skip-grant-tables
bash: command not found
따라서 매우 쉽게 검색되는 방법으로는 내 root 계정의 암호를 초기화시킬 수 없다. 결론부터 말하자면 --skip-grant-tables 옵션을 사용하는 건 맞지만, 기존과 조금 다른 방법으로 옵션을 사용해야한다. 지금부터 그 방법을 구구절절 설명하지 않고 간단하게 방법만 나열하도록 하겠다.
1. MySQL 버전 확인 및 my.conf 파일 찾기
$ mysql --version
mysql Ver 14.14 Distrib 5.7.36, for Linux (x86_64)
$ whereis my.conf
my: /etc/my.conf
2. my.conf에 skip-grant-tables 옵션 추가
$ vi /etc/my.conf
.
.
[mysqld]
datadir = /var/lib/mysql
socket = /var/lib/mysqld/mysql.sock
skip-grant-tables
:wq!
3. MySQL 서비스 재시작
$ systemctl restart mysqld
$ mysql
.
.
Welcome to MySQL monitor.
Your MySQL connection is 2.
Server version: 5.7.36 MySQL Community Server (GPL)
mysql>
4. Root 계정 패스워드 변경
# version 5.7.6 이상
mysql> ALTER user 'root'@'localhost' IDENTIFIED BY '패스워드';
# version 5.7.0 ~ 5.7.5
mysql> UPDATE mysql.user SET authentication_string=PASSWORD('패스워드') WHERE user='root' AND Host='localhost';
mysql> FLUSH PRIVILEGES;
# version 5.7 미만
mysql> UPDATE mysql.user SET password=PASSWORD('패스워드') WHERE user='root' AND Host='localhost';
mysql> FLUSH PRIVILEGES;
5. MySQL 서비스 재시작 및 Root 계정 로그인
$ systemctl restart mysqld
$ mysql -u root -p 패스워드
.
.
Welcome to MySQL monitor.
Your MySQL connection is 2.
Server version: 5.7.36 MySQL Community Server (GPL)
mysql>
6. my.conf 파일 원복
$ vi /etc/my.conf
.
.
[mysqld]
datadir = /var/lib/mysql
socket = /var/lib/mysqld/mysql.sock
# skip-grant-tables
:wq!
WSL 재부팅에도 잘 동작하고 있음을 확인했다.
'Programming > MySQL' 카테고리의 다른 글
[MySQL] JSON 문자열 검색(조회) (0) | 2022.02.23 |
---|---|
[WSL] CentOS MySQL Error 2002 (HY000) /var/lib/mysql/mysql.sock 문제 해결 (1) | 2022.01.13 |
댓글