수색…


소개

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>



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow