MySQL을 사용할 일이 없어 설치 후 방치해둔 상태였다.
다시 사용할 일이 생겨 MySQL을 찾았는데, 다행히도 설치해둔 경로는 바로 찾을 수 있었다.
그런데, root 비밀번호를 모르겠다...
1. 다시 MySQL을 설치하자.
기존에 사용하던 MySQL이 아니라 새로 받으면 root에 대한 설정이 없을 것이라고 판단했다.
그래서 MySQL을 다시 설치했지만, 접속할 수 없었다.
2. 서버인증을 우회하고, MySQL에 접속해 root 비밀번호를 변경하자?
mysqld --skip-grant-tables
위 명령어를 사용하면 새로운 프롬프트 창에서 MySQL에 서버 인증 없이 우회해 접속할 수 있다.
접속하고 mysql database에 접근해 user table에서 root 계정의 비밀번호를 변경하려한다.
use mysql;
mysql database에 접근한다.
MySQL Error 1049.
mysql database가 없다. mysql이 설치된 디렉터리에 찾아가보니, data 디렉터리가 존재하지 않는다.
MySQL 공식문서에는 data 디렉터리 초기화하는 방식이 자세히 나와있다.
다시 명령 프롬프트로 돌아와서
mysqld --initialize --basedir={PATH}/mysql --datadir={PATH}/mysql/data
data 디렉터리를 초기화 시켜줬다.
3. 다시 비밀번호 변경하러 가자.
이제 다시 MySQL에 접속하면 mysql database와 그 내부에 user table이 존재하는 것을 볼 수 있다.
UPDATE user SET authentication_string=password('NewPassword') WHERE user='root';
user table에 비밀번호는 authentication_string 컬럼명을 가지고 있다.
warning. 더 이상 password() 함수는 사용하지 않는다. (그래도 변경되는 것으로 보임)
허나 접속할 수 없었다.
password 함수를 SHA2('NewPassword', 256)로 진행했더니, 패스워드는 변경되었으나, 접속할 수 없었다.
더 찾아보니 5.7 이상 버전에서는 더 이상 UPDATE로 비밀번호를 변경하지 않는다.
alter user를 통해 user 정보를 변경한다.
alter user 'root'@'localhost' indentified by 'NewPassword';
MySQL Error 1396.
보통 이미 만들어진 유저를 추가할 때 생기는 에러라고 한다. 이미 존재하는 유저를 삭제하고 다시 만들면 된다고 한다.
root를??
해결된다면 아래로... 가야하는데...
결국 다시 설치해서 사용했다.
그리고 변경된 사항을 적용한다.
(만약 위에 SQL문이 --skip-grant-tables로 불가능할 경우 먼저 아래 명령어를 실행하면 가능하다.)
flush privileges;
4. MySQL에 root 사용자로 접속하자.
이제 MySQL에 접속한다.
mysql -u root -p
그리고 설정한 비밀번호로 접속한다.
'Anything' 카테고리의 다른 글
[CSS] CSS 속성 정리하기 (0) | 2021.10.29 |
---|---|
[MySQL] Error 1251 ER_NOT_SUPPORTED_AUTH_MODE (0) | 2021.08.17 |
Git reset 후 되돌리기 (0) | 2021.08.09 |
Ajax (0) | 2021.07.27 |
사용자 인증 방식 (쿠키, 세션, 토큰) (0) | 2021.07.19 |