it-swarm-ko.tech

MySQL 오류 : ''root '@'localhost '사용자의 액세스가 거부되었습니다.

$ ./mysqladmin -u root -p ' 수정 됨 '
암호를 입력:

mysqladmin : 'localhost'에서 서버에 연결하지 못했습니다. 오류 :
'사용자'root '@'localhost '(암호 사용 : YES)에 대한 액세스가 거부되었습니다.'

이 문제를 어떻게 해결할 수 있습니까?

134
Harsh Trivedi
  1. 배포판에 따라 /etc/my.cnf 또는 /etc/mysql/my.cnf을 열고 편집하십시오.
  2. skip-grant-tables 밑에 [mysqld]를 추가하십시오
  3. MySQL을 다시 시작하십시오.
  4. 아래 명령을 사용하여 mysql에 로그인 할 수 있어야합니다. mysql -u root -p
  5. mysql> flush privileges; 실행
  6. ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';에 의해 새 암호 설정
  7. /etc/my.cnf 및 remove/comment skip-grant-tables로 돌아갑니다.
  8. MySQL을 다시 시작하십시오.
  9. 이제 새 암호로 로그인 할 수 있습니다 mysql -u root -p
206

내가 찾은 모든 솔루션은 필요한 것보다 훨씬 복잡했으며 나에게 도움이되지 못했습니다. 내 문제를 해결 한 솔루션이 있습니다. 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 )

397
user1878906

이 문제를 해결하기 위해 여러 단계를 시도했습니다. 이 문제에 대한 해결책이 너무나 많아서 말도 안되는 소리를 걸러 내기가 어렵습니다. 나는 마침내 좋은 해결책을 찾았습니다 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 서버에 대한 관리 액세스 권한이 복원되었습니다. 선택한 새 루트 비밀번호가 강력하고 안전한지 확인하고 안전한 곳에 보관하십시오.

36
Blairg23

우분투/데비안 사용자

Root로 연결하려면 다음을 실행하십시오 (암호없이).

Sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf
20
Fab

새로운 리눅스 사용자들에게는 이것이 어려운 일이 될 수 있습니다. mysql 8로 업데이트하겠습니다. (현재 사용 가능한 최신 버전은 2018 년 9 월 12 일에 8.0.12입니다.)

  1. "mysqld.cnf"설정 파일을 "/etc/mysql/mysql.conf.d/"에 열어 라.
  2. Mysql 텍스트의 다음 줄에 skip-grant-tables 를 추가하고 저장하십시오.
  3. Mysql 서비스를 "Sudo service mysql restart"로 다시 시작하십시오. 이제 당신의 mysql은 어떤 인증도받지 않는다.
  4. Mysql 클라이언트 (mysql-shell이라고도 함)에 mysql -u root -p 로 연결하십시오. 현재 암호를 입력 할 암호가 없습니다.
  5. sQL 명령을 실행 플러시 권한;
  6. 이제 암호를 ALTER USER 'root'@ 'localhost'로 다시 설정하십시오. 'MyNewPassword'로 식별하십시오.
  7. 이제 정상 상태로 돌아 가자. "mysqld.cnf"에서 "skip-grant-tables"라인을 지우고 서비스를 다시 시작하십시오.

그게 전부 야.

12
Amit Kr

다른 모든 답변을 시도한 후에 마침내 이것이 나를 위해 일한 것입니다.

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 =

4
Pico12

귀하의 MySQL 워크 벤치에서 왼쪽 사이드 바에 가서 관리 아래의 "사용자 및 권한"에서 사용자 계정 아래의 루트를 클릭하고 오른쪽 섹션에서 "계정 제한"탭을 클릭하여 최대 쿼리, 업데이트 등을 확장 할 수 있습니다. 그런 다음 "Administrative Roles"탭을 클릭하고 계정에 액세스 할 수 있도록 상자를 선택하십시오. 희망이 도움이됩니다!

4
Colleen Purcell

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
2
Sadee

충분한 권한이없는 경우 발생할 수 있습니다. su을 입력하고 루트 비밀번호를 입력 한 후 다시 시도하십시오.

0
vitaly goji

필자의 경우 데비안 10에서 오류가 발생했습니다.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

(GOOD WAY)에 의해 해결되었습니다.

Sudo mysql -u root -p mysql

나쁜 방법:

mysql -u root -p mysql
0
klor

나처럼 위의 모든 제안이 실패한 경우 컴퓨터에서 모든 버전의 mysql을 제거하고 mysql이있는 모든 파일 또는 디렉토리 Sudo find / -name "mysql"rm -rf 명령을 사용하여 나머지 모든 mysql 파일을 검색하십시오. 첨부 된 이름 (프로그래밍 언어 라이브러리와 관련된 파일을 건너 뛰어야 함). 이제 새로운 MySQL 버전을 설치하고 즐기십시오. 주의 : 모든 데이터를 잃어 버리므로 옵션의 무게를 먼저 측정하십시오.

0
Michael Ogala