$ ./mysqladmin -u root -p ' 수정 됨 '
암호를 입력:
mysqladmin : 'localhost'에서 서버에 연결하지 못했습니다. 오류 :
'사용자'root '@'localhost '(암호 사용 : YES)에 대한 액세스가 거부되었습니다.'
이 문제를 어떻게 해결할 수 있습니까?
/etc/my.cnf
또는 /etc/mysql/my.cnf
을 열고 편집하십시오.skip-grant-tables
밑에 [mysqld]
를 추가하십시오mysql -u root -p
mysql> flush privileges;
실행ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
에 의해 새 암호 설정mysql -u root -p
내가 찾은 모든 솔루션은 필요한 것보다 훨씬 복잡했으며 나에게 도움이되지 못했습니다. 내 문제를 해결 한 솔루션이 있습니다. mysqld를 다시 시작하거나 특별한 권한으로 시작할 필요가 없습니다.
Sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
단일 쿼리로 auth_plugin 을 mysql_native_password 로 변경하고 루트 암호를 root (조회에서 자유롭게 변경할 수 있음)
이제 루트로 로그인 할 수 있어야합니다. 자세한 내용은 mysql documentation 에서 찾을 수 있습니다.
( Ctrl + D 로 mysql 콘솔을 종료하거나 exit )
이 문제를 해결하기 위해 여러 단계를 시도했습니다. 이 문제에 대한 해결책이 너무나 많아서 말도 안되는 소리를 걸러 내기가 어렵습니다. 나는 마침내 좋은 해결책을 찾았습니다 here :
1 단계 : 데이터베이스 버전 식별
$ mysql --version
MySQL을 사용하면 다음과 같은 결과를 볼 수 있습니다 :
$ mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
MariaDB의 경우 이와 같은 출력 :
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
나중에 사용할 데이터베이스와 실행중인 버전을 기록해 두십시오. 다음으로 데이터베이스를 수동으로 액세스 할 수 있도록 중지해야합니다.
2 단계 : 데이터베이스 서버 중지
루트 암호를 변경하려면 미리 데이터베이스 서버를 종료해야합니다.
MySQL의 경우 다음과 같이 할 수 있습니다.
$ Sudo systemctl stop mysql
그리고 MariaDB의 경우 :
$ Sudo systemctl stop mariadb
단계 : 권한 확인없이 데이터베이스 서버 다시 시작
사용자 권한에 대한 정보를로드하지 않고 MySQL 및 MariaDB를 실행하는 경우 비밀번호를 제공하지 않고 루트 권한으로 데이터베이스 명령 행에 액세스 할 수 있습니다. 이를 통해 데이터베이스를 몰라도 데이터베이스에 액세스 할 수 있습니다.
이를 수행하려면 데이터베이스가 사용자 권한 정보를 저장하는 권한 부여 테이블을로드하지 못하게해야합니다. 이것은 약간의 보안 위험이므로 다른 클라이언트가 연결하지 못하도록 네트워킹을 건너 뛰어야합니다.
그랜트 테이블을로드하거나 네트워킹을 활성화하지 않고 데이터베이스를 시작하십시오.
$ Sudo mysqld_safe --skip-grant-tables --skip-networking &
이 명령의 끝에있는 앰퍼샌드는이 프로세스를 백그라운드에서 실행하므로 터미널을 계속 사용할 수 있습니다.
이제 루트 사용자로 데이터베이스에 연결할 수 있으며, 비밀번호를 요구해서는 안됩니다.
$ mysql -u root
대신 데이터베이스 셸 프롬프트가 즉시 나타납니다.
MySQL 프롬프트
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
MariaDB 프롬프트
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
이제 루트 액세스 권한이 있으므로 루트 비밀번호를 변경할 수 있습니다.
4 단계 : 루트 비밀번호 변경
mysql> FLUSH PRIVILEGES;
이제 루트 암호를 변경할 수 있습니다.
MariaDB 10.1.20 이상뿐만 아니라 MySQL 5.7.6 이상의 경우 다음 명령을 사용하십시오.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
MySQL 5.7.5 이상 및 MariaDB 10.1.20 이상의 경우 다음을 사용하십시오.
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
new_password
을 (를) 선택한 새 비밀번호로 바꾸십시오.
참고 :ALTER USER
명령이 작동하지 않으면 일반적으로 더 큰 문제를 나타냅니다. 그러나 대신 UPDATE ... SET
를 사용하여 루트 비밀번호를 재설정 할 수 있습니다.
[중요] 다음은 내 특정 문제를 해결 한 특정 줄입니다.
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
그 후에 부여 테이블을 다시로드해야합니다.
두 경우 모두 명령이 성공적으로 실행되었다는 확인 메시지가 표시됩니다.
Query OK, 0 rows affected (0.00 sec)
비밀번호가 변경되었으므로 이제 데이터베이스 서버의 수동 인스턴스를 중지하고 이전과 같이 다시 시작할 수 있습니다.
5 단계 : 데이터베이스 서버를 정상적으로 다시 시작]
튜토리얼은 데이터베이스를 다시 시작하기 위해 몇 가지 추가 단계를 수행하지만 내가 사용한 유일한 부분은 다음과 같습니다.
MySQL의 경우 : $ Sudo systemctl start mysql
MariaDB의 경우 :
$ Sudo systemctl start mariadb
이제 다음을 실행하여 새 비밀번호가 올바르게 적용되었는지 확인할 수 있습니다.
$ mysql -u root -p
이제 명령에 새로 할당 된 비밀번호를 묻는 메시지가 표시됩니다. 입력하면 예상대로 데이터베이스 프롬프트에 액세스 할 수 있습니다.
결론
이제 MySQL 또는 MariaDB 서버에 대한 관리 액세스 권한이 복원되었습니다. 선택한 새 루트 비밀번호가 강력하고 안전한지 확인하고 안전한 곳에 보관하십시오.
Root로 연결하려면 다음을 실행하십시오 (암호없이).
Sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf
새로운 리눅스 사용자들에게는 이것이 어려운 일이 될 수 있습니다. mysql 8로 업데이트하겠습니다. (현재 사용 가능한 최신 버전은 2018 년 9 월 12 일에 8.0.12입니다.)
그게 전부 야.
다른 모든 답변을 시도한 후에 마침내 이것이 나를 위해 일한 것입니다.
Sudo mysql -- It does not ask me for any password
-- Then in MariaDB/MySQL console:
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILEGES;
exit;
이 게시물에서 답을 찾았습니다 : https://medium.com/@chiragpatel_52497/solved-error-access-denied-for-user-root-localhost-of-mysql-programming-school-6e3611838d06 =
귀하의 MySQL 워크 벤치에서 왼쪽 사이드 바에 가서 관리 아래의 "사용자 및 권한"에서 사용자 계정 아래의 루트를 클릭하고 오른쪽 섹션에서 "계정 제한"탭을 클릭하여 최대 쿼리, 업데이트 등을 확장 할 수 있습니다. 그런 다음 "Administrative Roles"탭을 클릭하고 계정에 액세스 할 수 있도록 상자를 선택하십시오. 희망이 도움이됩니다!
OSx에서 MySQL의 초기 설정에서 루트 암호를 설정하기 위해이 작업을 수행했습니다. 터미널을 엽니 다.
Sudo sh -c 'echo /usr/local/mysql/bin > /etc/paths.d/mysql'
터미널을 닫고 새 터미널을 엽니 다. 그리고 다음은 Linux에서 루트 암호를 설정하는 데 사용됩니다.
Sudo /usr/local/mysql/support-files/mysql.server stop
Sudo mysqld_safe --skip-grant-tables
(Sudo mysqld_safe --skip-grant-tables : 이것은 처음에는 나에게 도움이되지 못했지만 두번째 시도는 성공이었다.)
그런 다음 MySQL에 로그인하십시오.
mysql -u root
FLUSH PRIVILEGES;
이제 비밀번호를 변경하십시오.
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
MySQL을 다시 시작하십시오.
Sudo /usr/local/mysql/support-files/mysql.server stop
Sudo /usr/local/mysql/support-files/mysql.server start
충분한 권한이없는 경우 발생할 수 있습니다. su
을 입력하고 루트 비밀번호를 입력 한 후 다시 시도하십시오.
필자의 경우 데비안 10에서 오류가 발생했습니다.
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
(GOOD WAY)에 의해 해결되었습니다.
Sudo mysql -u root -p mysql
나쁜 방법:
mysql -u root -p mysql
나처럼 위의 모든 제안이 실패한 경우 컴퓨터에서 모든 버전의 mysql을 제거하고 mysql이있는 모든 파일 또는 디렉토리 Sudo find / -name "mysql"
및 rm -rf
명령을 사용하여 나머지 모든 mysql 파일을 검색하십시오. 첨부 된 이름 (프로그래밍 언어 라이브러리와 관련된 파일을 건너 뛰어야 함). 이제 새로운 MySQL 버전을 설치하고 즐기십시오. 주의 : 모든 데이터를 잃어 버리므로 옵션의 무게를 먼저 측정하십시오.