$ ./mysqladmin -u root -p ' 수정 됨 '
암호를 입력하십시오 :
mysqladmin : 'localhost'에서 서버 연결 실패 오류 :
'사용자'root '@'localhost '에 대한 액세스가 거부되었습니다 (비밀번호 사용 : YES)'
이 문제를 어떻게 해결할 수 있습니까?
~/.my.cnf
파일을 제거 하십시오.
-p
옵션을 그대로두면 mysql이 암호를 묻습니다.
$ ./mysqladmin -u root -p ' 수정 됨 '
암호를 입력하십시오 :
mysqladmin : 'localhost'에서 서버 연결 실패 오류 :
'사용자'root '@'localhost '에 대한 액세스가 거부되었습니다 (비밀번호 사용 : YES)'
이 문제를 어떻게 해결할 수 있습니까?
~/.my.cnf
파일을 제거 하십시오.
-p
옵션을 그대로두면 mysql이 암호를 묻습니다.
답변:
/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
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'USER 'root'@'localhost' IDENTIFIED BY 'NewPassword'' at line 1
set PASSWORD FOR 'root'@'localhost' = PASSWORD('root');
. 5 단계 후에이 작업을 수행했습니다. 명령 프롬프트 출력은 다음과 같습니다.MariaDB [(none)]> MariaDB [(none)]> set PASSWORD FOR 'root'@'localhost' = PASSWORD('root'); Query OK, 0 rows affected (0.00 sec)
sudo systemctl restart mariadb
내가 찾은 모든 솔루션은 필요한 것보다 훨씬 복잡했으며 나에게 도움이되지 못했습니다. 내 문제를 해결 한 솔루션이 있습니다. mysqld를 다시 시작하거나 특별한 권한으로 시작할 필요가 없습니다.
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
단일 쿼리로 auth_plugin 을 mysql_native_password 로 변경하고 루트 비밀번호를 root로 설정합니다 (쿼리에서 자유롭게 변경)
이제 루트로 로그인 할 수 있어야합니다. 자세한 정보는 mysql 문서 에서 찾을 수 있습니다
( Ctrl + D를 사용 하거나 exit 입력하여 mysql 콘솔을 종료하십시오 )
이 문제를 해결하기 위해 여러 단계를 시도했습니다. 이 문제에 대한 해결책이 너무나 많아서 말도 안되는 소리를 걸러 내기가 어렵습니다. 마침내 여기 에서 좋은 해결책을 찾았 습니다 .
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
3 단계 : 권한 검사없이 데이터베이스 서버 다시 시작
사용자 권한에 대한 정보를로드하지 않고 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;
이제 루트 비밀번호를 변경할 수 있습니다.
들어 MySQL은 5.7.6 및 최신 뿐만 아니라 MariaDB 10.1.20 및 최신 , 다음 명령을 사용합니다 :
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
선택한 새 비밀번호 로 바꾸십시오 .
참고 : 은 IF 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 서버에 대한 관리 액세스 권한이 복원되었습니다. 선택한 새 루트 비밀번호가 강력하고 안전한지 확인하고 안전한 곳에 보관하십시오.
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
이 나를위한 생명의 은인이었습니다!
위의 답변 중 어느 것도이 문제에 도움이되지 않았으므로 여기에 내가 찾은 해결책이 있습니다.
관련 부분 :
MySQL 5.7 이상 버전을 실행하는 Ubuntu 시스템에서 루트 MySQL 사용자는 비밀번호가 아닌 auth_socket 플러그인을 사용하여 기본적으로 인증하도록 설정되어 있습니다. 이것은 많은 경우에 더 큰 보안과 유용성을 허용하지만 외부 프로그램 (예 : phpMyAdmin)이 사용자에게 액세스하도록 허용해야 할 때 상황을 복잡하게 만들 수도 있습니다.
비밀번호를 사용하여 루트로 MySQL에 연결하려면 인증 방법을 auth_socket에서 mysql_native_password로 전환해야합니다. 이렇게하려면 터미널에서 MySQL 프롬프트를 엽니 다.
sudo mysql
다음으로, 각 MySQL 사용자 계정이 다음 명령으로 사용하는 인증 방법을 확인하십시오.
SELECT user,authentication_string,plugin,host FROM mysql.user;
산출
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)
이 예에서는 루트 사용자가 실제로 auth_socket 플러그인을 사용하여 인증하는 것을 볼 수 있습니다. 비밀번호로 인증하도록 루트 계정을 구성하려면 다음 ALTER USER 명령을 실행하십시오. 비밀번호를 선택한 강력한 비밀번호로 변경해야하며이 명령은 2 단계에서 설정 한 루트 비밀번호를 변경합니다.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
그런 다음 서버에 권한 부여 테이블을 다시로드하고 새 변경 사항을 적용하도록 지시하는 FLUSH PRIVILEGES를 실행하십시오.
FLUSH PRIVILEGES;
auth_socket 플러그인을 사용하여 루트가 더 이상 인증되지 않는지 확인하려면 각 사용자가 사용한 인증 방법을 다시 확인하십시오.
SELECT user,authentication_string,plugin,host FROM mysql.user;
산출
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)
이 예제 출력에서 루트 MySQL 사용자가 이제 비밀번호를 사용하여 인증하는 것을 볼 수 있습니다. 자신의 서버에서이를 확인하면 MySQL 셸을 종료 할 수 있습니다.
exit
( 다른 배포판, 특히 데비안 기반 배포판에서 작동 할 수 있음)
다음을 실행하여 root
비밀번호없이 연결하십시오.
sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf
--defaults-file
으로 연결할 때마다 추가하지 않으려면 홈 디렉토리에 root
복사 /etc/mysql/debian.cnf
하십시오.
sudo cp /etc/mysql/debian.cnf ~/.my.cnf
그리고:
sudo mysql
다른 모든 답변을 시도한 후에 마침내 이것이 나를 위해 일한 것입니다.
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
skip-grant-table
(my.conf 또는 mysql
명령에서)를 사용하는 다른 답변이 작동하지 않았습니다. 서비스 계정 ( askubuntu.com/a/120769/169836 )을 사용할 수 UPDATE mysql.user SET Password=PASSWORD('') WHERE User='root';
는 있지만 작동하지 않았습니다. 플러그인 부분을 사용할 때만 작동했습니다. 감사합니다 ~
새로운 리눅스 사용자에게는 어려운 작업이 될 수 있습니다. mysql 8로 업데이트하겠습니다 (2018 년 9 월 12 일 현재 최신 버전은 8.0.12입니다)
그게 다야.
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
어-아무것도 나를 위해 일하지 않았다! mariadb 5.5.64를 실행하는 CentOS 7.4 컴퓨터가 있습니다.
내가해야했던 것은 yum에서 mariadb를 설치 한 직후입니다.
# systemctl restart mariadb
# mysql_secure_installation
을 mysql_secure_installation
포함, 여러 단계를 통해 당신을 데려 갈 것이다 "설정 루트 암호? [Y / N]". "y"라고 말하고 비밀번호를 입력하십시오. 원하는대로 다른 질문에 대답하십시오.
그런 다음 비밀번호를 사용하여 들어갈 수 있습니다.
# mysql -u root -p
살아남을 것이다
# systemctl restart mariadb
열쇠
그런 다음 /bin/mysql_secure_installation
소스 코드를 검사하여 루트 암호를 마술처럼 변경하는 방법과 다른 답변은 없었습니다. 가져 오기 비트는 다음과 같습니다.
do_query "UPDATE mysql.user SET Password=PASSWORD('$esc_pass') WHERE User='root';"
... SET Password=...
그렇지 않습니다 SET authentication_string = PASSWORD...
. 따라서이 버전 (5.5.64)의 올바른 절차는 다음과 같습니다.
login using mysql -u root -p , using the password you already set.
Or, stop the database and start it with:
mysql_safe --skip-grant-tables --skip-networking &
mysql> 프롬프트에서 :
use mysql;
select host,user,password from user where user = 'root';
(observe your existing passwords for root).
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root' AND host = 'localhost';
select host,user,password from user where user = 'root';
flush privileges;
quit;
실행중인 mysqld_safe를 종료하십시오. mariadb를 다시 시작하십시오. 루트로 로그인하십시오 : mysql -u -p
. 새 비밀번호를 사용하십시오.
원하는 경우 모든 루트 비밀번호를 한 번에 설정할 수 있습니다. 나는 이것이 현명하다고 생각한다.
mysql -u root -p
(login)
use mysql;
select host,user,password from user where user = 'root';
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root';
select host,user,password from user where user = 'root';
flush privileges;
quit;
이렇게하면 모든 루트 비밀번호 (예 : "localhost", "127.0.0.1"및 ":: 1")에 대한 업데이트가 수행됩니다.
앞으로 RHEL8 또는 무엇을 방문 할 때 / bin / mysql_secure_installation을 확인하고이 OS에 대해 mariadb를 구성한 사람이 누구인지를 기억하도록 노력할 것입니다.
좋아, 나는 이것이 오래된 스레드라는 것을 알고 있지만, 내가했던 것처럼 Google을 통해이 페이지에 도달했는데 위의 해결책 중 어느 것도 효과가 없다면, 내 말에 100 % 어리 석음이라는 것이 밝혀졌습니다. 서버에 연결하지 않았습니다. 연결되면 모든 것이 순조롭게 항해되었습니다.
내 설정을 이해하는 데 도움이되는 경우 Sequel Pro를 사용하고 있으며 NPM 패키지 mysql을 사용하여 노드와 연결하려고합니다. 내 앱에서 이미 그렇게했기 때문에 실제로 Sequel Pro를 실행하지 않고 연결해야한다고 생각하지 않았습니다.