웹사이트 검색

MySQL 또는 MariaDB 루트 암호를 재설정하는 방법


소개

비밀번호를 잊어버리는 것은 우리 모두에게 일어나는 일입니다. MySQL 또는 MariaDB 데이터베이스의 루트 암호를 잊어버렸거나 분실한 경우에도 서버에 대한 액세스 권한이 있고 sudo가 활성화된 사용자 계정이 있으면 액세스 권한을 얻고 암호를 재설정할 수 있습니다.

이 튜토리얼에서는 MySQL 및 MariaDB의 이전 버전과 최신 버전의 루트 비밀번호를 재설정하는 방법을 다룹니다.

전제 조건

루트 MySQL/MariaDB 암호를 복구하려면 다음이 필요합니다.

  • Sudo 사용자로 MySQL 또는 MariaDB를 실행하는 Linux 서버에 액세스합니다.

1단계 - 데이터베이스 버전 식별

대부분의 최신 Linux 배포판은 MySQL 또는 MariaDB와 함께 제공되며 MySQL과 완벽하게 호환되는 대중적인 대체품입니다. 사용된 데이터베이스와 해당 버전에 따라 루트 암호를 복구하려면 다른 명령을 사용해야 합니다.

다음 명령으로 버전을 확인할 수 있습니다.

  1. mysql --version

MySQL을 사용하면 다음과 같은 출력이 표시됩니다.

MySQL output
mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper

또는 MariaDB에 대해 다음과 같이 출력합니다.

MariaDB output
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

나중에 사용할 데이터베이스와 실행 중인 버전을 기록해 두십시오. 다음으로 수동으로 액세스할 수 있도록 데이터베이스를 중지해야 합니다.

2단계 - 데이터베이스 서버 중지

루트 비밀번호를 변경하려면 먼저 데이터베이스 서버를 종료해야 합니다.

다음을 사용하여 MySQL에 대해 그렇게 할 수 있습니다.

  1. sudo systemctl stop mysql

그리고 MariaDB의 경우:

  1. sudo systemctl stop mariadb

데이터베이스 서버가 중지되면 수동으로 액세스하여 루트 암호를 재설정합니다.

3단계 - 권한 확인 없이 데이터베이스 서버 재시작

사용자 권한에 대한 정보를 로드하지 않고 MySQL 및 MariaDB를 실행하면 암호를 제공하지 않고도 루트 권한으로 데이터베이스 명령줄에 액세스할 수 있습니다. 이렇게 하면 알지 못하는 사이에 데이터베이스에 액세스할 수 있습니다.

이렇게 하려면 데이터베이스가 사용자 권한 정보를 저장하는 부여 테이블을 로드하는 것을 중지해야 합니다. 이것은 약간의 보안 위험이 있기 때문에 다른 클라이언트가 연결하지 못하도록 네트워킹도 건너뛰어야 합니다.

그랜트 테이블을 로드하거나 네트워킹을 활성화하지 않고 데이터베이스를 시작합니다.

  1. sudo mysqld_safe --skip-grant-tables --skip-networking &

이 명령 끝에 있는 앰퍼샌드는 이 프로세스를 백그라운드에서 실행하여 터미널을 계속 사용할 수 있도록 합니다.

이제 암호를 묻지 않는 루트 사용자로 데이터베이스에 연결할 수 있습니다.

  1. mysql -u root

대신 데이터베이스 셸 프롬프트가 즉시 표시됩니다.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

이제 루트 액세스 권한이 있으므로 루트 암호를 변경할 수 있습니다.

4단계 - 루트 암호 변경

최신 MySQL 버전의 루트 암호를 변경하는 간단한 방법 중 하나는 ALTER USER 명령을 사용하는 것입니다. 그러나 이 명령은 그랜트 테이블이 로드되지 않았기 때문에 지금은 작동하지 않습니다.

FLUSH PRIVILEGES 명령을 실행하여 권한 부여 테이블을 다시 로드하도록 데이터베이스 서버에 지시합시다.

  1. FLUSH PRIVILEGES;

이제 실제로 루트 암호를 변경할 수 있습니다.

MySQL 5.7.6 이상 및 MariaDB 10.1.20 이상에서는 다음 명령을 사용하십시오.

  1. ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

MySQL 5.7.5 이상 및 MariaDB 10.1.20 이하의 경우 다음을 사용하십시오.

  1. SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

new_password를 선택한 새 암호로 바꾸십시오.

참고: ALTER USER 명령이 작동하지 않으면 일반적으로 더 큰 문제가 있음을 나타냅니다. 그러나 대신 UPDATE ... SET를 시도하여 루트 비밀번호를 재설정할 수 있습니다.

  1. UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

이 후에 그랜트 테이블을 다시 로드해야 합니다.

두 경우 모두 명령이 성공적으로 실행되었다는 확인 메시지가 표시되어야 합니다.

Output
Query OK, 0 rows affected (0.00 sec)

암호가 변경되었으므로 이제 데이터베이스 서버의 수동 인스턴스를 중지하고 이전과 같이 다시 시작할 수 있습니다.

5단계 - 데이터베이스 서버를 정상적으로 다시 시작합니다.

먼저 3단계에서 수동으로 시작한 데이터베이스 서버의 인스턴스를 중지합니다. 이 명령은 MySQL 또는 MariaDB 프로세스의 PID 또는 프로세스 ID를 검색하고 SIGTERM을 전송하여 이후 원활하게 종료하도록 지시합니다. 정리 작업을 수행합니다. 이 Linux 프로세스 관리 자습서에서 자세히 알아볼 수 있습니다.

MySQL의 경우 다음을 사용합니다.

  1. sudo kill `cat /var/run/mysqld/mysqld.pid`

MariaDB의 경우 다음을 사용합니다.

  1. sudo kill `/var/run/mariadb/mariadb.pid`

그런 다음 systemctl을 사용하여 서비스를 다시 시작합니다.

MySQL의 경우 다음을 사용합니다.

  1. sudo systemctl start mysql

MariaDB의 경우 다음을 사용합니다.

  1. sudo systemctl start mariadb

이제 다음을 실행하여 새 비밀번호가 올바르게 적용되었는지 확인할 수 있습니다.

  1. mysql -u root -p

이제 이 명령은 새로 할당된 암호를 묻는 메시지를 표시해야 합니다. 입력하면 예상대로 데이터베이스 프롬프트에 액세스할 수 있습니다.

결론

이제 복원된 MySQL 또는 MariaDB 서버에 대한 관리 액세스 권한이 있습니다. 선택한 새 루트 암호가 강력하고 안전한지 확인하고 안전한 장소에 보관하십시오.