루트 비밀번호를 사용할 수 없는 경우 --skip-grant-tables를 사용하여 MySQL을 다시 시작하는 방법은 무엇입니까?

루트 비밀번호를 사용할 수 없는 경우 --skip-grant-tables를 사용하여 MySQL을 다시 시작하는 방법은 무엇입니까?

옵션 이 활성화된 Ubuntu 16.04에서 MySQL을 다시 시작해야 --skip-grant-tables하지만 루트 비밀번호를 모르거나 작동하지 않습니다. --skip-grant-tables비밀번호 없이 어떻게 설정할 수 있나요 ?

일반 사용자로 사용해 보면 다음과 같습니다.

mysqld --skip-grant-tables

나는 이것을 본다:

mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13 - Permission denied)

그래서 저는 /etc/init.d/mysql에서 이 예제를 파헤쳐 --skip-grant-tables매개변수를 추가했습니다:

su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
Password: 
su: Authentication failure

따라서 su는 작동하지 않으며 루트 비밀번호도 작동하지 않습니다. 나는 또한 이것을 시도했다:

sudo su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
No directory, logging in with HOME=/

--skip-grant-tables를 사용하여 mysql을 어떻게 시작할 수 있나요?

답변1

루트 비밀번호를 모르는 경우(또는 'ERROR 1045 (28000): Access denied for user 'root'@'localhost'액세스 차단과 같은 오류가 발생한 경우) MySQL 구성 파일에 옵션을 추가하여 액세스할 수 있습니다. 먼저 편집을 위해 엽니다.

sudo nano /etc/mysql/my.cnf

[mysqld]그런 다음 아래에서 다음 값을 검색 하여 입력하세요.

[mysqld]
# For debugging and recovery only #
skip-grant-tables
skip-networking
###################################

보시다시피 여기에 명령줄 매개변수를 추가하는 방법은 --매개변수 앞에서 를 삭제하는 것입니다. 지금mysql 서비스를 다시 시작하세요그리고 테이블에 액세스하여 루트 사용자 비밀번호를 재설정하거나 필요한 거의 모든 작업을 재설정할 수 있습니다. (단, 그랜트 테이블은 로드되지 않았기 때문에 아무것도 할 수 없습니다.)

조심하세요.이 모드에 있는 동안 로그인한 모든 사용자는 전체 데이터베이스에 액세스할 수 있습니다. 그래서 skip-networking복구하는 동안 원격 사용자가 테이블에 액세스할 수 없도록 위의 옵션을 추가했습니다.

해당 행을 주석 처리하고 완료되면 mysql을 다시 한 번 다시 시작하여 서버를 다시 보호하십시오.

답변2

댓글에서.

init.rc 구성의 경우:

가장 쉬운 방법은 옵션을 포함하도록 /etc/init.d/mysql을 일시적으로 수정한 --skip-grant-tables다음 이 스크립트(/etc/init.d/mysql start)로 시작하는 것입니다.

Ubuntu 16.04와 같은 신생 시스템에서는 이 작업을 /lib/systemd/system/mysql.service.

관련 정보