MySQL
MySQL 5.7 이상에서 기본 루트 암호 복구 및 재설정
수색…
소개
MySQL 5.7 이후에 우리는 MySQL을 설치할 때 가끔 root 계정을 만들거나 root 암호를 줄 필요가 없습니다. 기본적으로 서버를 시작할 때 기본 암호는 mysqld.log
파일에 저장됩니다. 암호를 사용하여 시스템에 로그인해야하므로 암호를 변경해야합니다.
비고
이 방법을 사용하여 기본 루트 암호를 복구하고 재설정하는 것은 MySQL 5.7 이상에서만 가능합니다.
서버가 처음 시작될 때 어떤 일이 발생합니까?
서버의 데이터 디렉토리가 비어 있다고 가정하면 :
- 서버가 초기화됩니다.
- SSL 인증서 및 키 파일은 데이터 디렉토리에 생성됩니다.
- validate_password 플러그인이 설치되고 사용 가능합니다.
- 슈퍼 유저 계정 'root'@ 'localhost'가 생성됩니다. 수퍼 유저의 비밀번호가 설정되어 오류 로그 파일에 저장됩니다.
기본 암호를 사용하여 루트 암호를 변경하는 방법
기본 "루트"비밀번호를 표시하려면 다음을 수행하십시오.
shell> sudo grep 'temporary password' /var/log/mysqld.log
생성 된 임시 암호로 로그인하여 가능한 한 빨리 루트 암호를 변경하고 수퍼 유저 계정의 사용자 정의 암호를 설정하십시오.
shell> mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass5!';
참고 : MySQL의 validate_password 플러그인은 기본적으로 설치됩니다. 이렇게하려면 비밀번호에 적어도 하나의 대문자, 소문자 한 자, 한 자릿수 및 한 개의 특수 문자가 포함되어 있어야하며 총 암호 길이는 8 자 이상이어야합니다.
"/ var / run / mysqld '(UNIX 소켓 파일 용)가 존재하지 않을 때 루트 암호를 재설정하십시오"
암호를 잊어 버리면 오류가 발생합니다.
$ mysql -u root -p
암호를 입력:
오류 1045 (28000) : 사용자 'root'@ 'localhost'에 대한 액세스가 거부되었습니다 (암호 사용 : 예)
먼저 상태를 파악하여 문제를 해결하려고했습니다.
$ systemctl status mysql.service
mysql.service -로드 된 MySQL 커뮤니티 서버 : /lib/systemd/system/mysql.service; 활성화 됨, 공급 업체 사전 설정 : en 활성 : 활성 상태 : 활성 (실행 중) Thu 2017-06-08 14:31:33 IST; 38s 전
그런 다음 mysqld_safe --skip-grant-tables &
코드를 사용했지만 오류가 발생했습니다.
mysqld_safe UNIX 소켓 파일의 '/ var / run / mysqld'디렉토리가 존재하지 않습니다.
$ systemctl stop mysql.service
$ ps -eaf|grep mysql
$ mysqld_safe --skip-grant-tables &
나는 해결했다 :
$ mkdir -p /var/run/mysqld
$ chown mysql:mysql /var/run/mysqld
이제 같은 코드 mysqld_safe --skip-grant-tables &
를 사용하여
mysqld_safe / var / lib / mysql의 데이터베이스로 mysqld 데몬을 시작한다.
$ mysql -u root
사용하면 다음과 같이 표시됩니다.
서버 버전 : 5.7.18-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle 및 / 또는 그 계열사. 판권 소유.
Oracle은 Oracle Corporation 및 / 또는 그 계열사의 등록 상표입니다. 다른 이름은 해당 소유자의 상표 일 수 있습니다.
'help;를 입력하십시오. 또는 '\ h'를 입력하십시오. '\ c'를 입력하여 현재 입력 명령문을 지우십시오.
mysql>
이제 비밀번호를 변경할 시간 :
mysql> use mysql
mysql> describe user;
테이블 및 컬럼 이름 완성을위한 테이블 정보 읽기이 기능을 끄면 -A를 사용하여보다 빠른 시작을 얻을 수 있습니다
데이터베이스가 변경되었습니다.
mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR root@'localhost' = PASSWORD('newpwd');
또는 모든 곳에서 연결할 수있는 mysql 루트 계정이 있다면 다음을 수행해야합니다.
UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
대체 방법 :
USE mysql
UPDATE user SET Password = PASSWORD('newpwd')
WHERE Host = 'localhost' AND User = 'root';
그리고 어디에서나 액세스 할 수있는 루트 계정이 있다면
USE mysql
UPDATE user SET Password = PASSWORD('newpwd')
WHERE Host = '%' AND User = 'root';`enter code here
이제 mysql을 quit
하고 stop / start해야한다.
FLUSH PRIVILEGES;
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
이제 다시`mysql -u root -p '를 사용하고 새로운 암호를 사용하여
mysql>