인프런 커뮤니티 질문&답변

유은혜님의 프로필 이미지

작성한 질문수

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

강의 준비 영상 - 스프링 프로젝트를 시작하는 첫 번째 방법

mysql 비밀번호 재설정

해결된 질문

작성

·

13K

1

 https://goodteacher.tistory.com/291

 

위 블로그를 참고해서 비밀번호를 초기화했는데

mysql -u root -p
Enter password: ************
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

위와 같이 나옵니다. 위 에러 메시지는 비밀번호를 잘못입력했을 때 나오는 걸로 아는데

저 한영 잘못친 것도 없고 numlock도 풀려있어서 제대로 잘 입력했는데 왜 그럴까요ㅠ

 

mysql --version 해보면 mysql ver8.0.27 로 잘 나옵니다

답변 2

1

에러 메시지가 'Access denied for user 'root'@'localhost' (using password: YES)' 이라면 입력한 비밀번호가 틀렸다는 의미입니다. 아마도 비밀번호 초기화 과정에서 무언가 잘못 입력하거나 저장하지 않아서 발생한 문제일 수도 있습니다.

비밀번호를 초기화할 때 다음과 같은 절차를 따르셨는지 확인해보세요.

  1. MySQL 서버를 정지합니다.

  2. 다음 명령을 실행하여 MySQL을 권한 없이 실행합니다.

    sudo mysqld_safe --skip-grant-tables
    
  3. 다른 터미널 창을 열고 MySQL을 실행합니다.

    mysql -u root
    
  4. 다음 명령을 실행하여 MySQL에서 비밀번호를 재설정합니다.

     UPDATE mysql.user SET authentication_string=password('새로운비밀번호') WHERE user='root' AND Host = 'localhost';
     FLUSH PRIVILEGES;
    
  5. MySQL 서버를 정상적으로 시작합니다.

    sudo systemctl start mysql
    
  6. 다시 로그인하여 새로운 비밀번호가 잘 적용되었는지 확인합니다.

     mysql -u root -p
유은혜님의 프로필 이미지
유은혜
질문자

관리자모드로 cmd 들어가서 mysqld_safe --skip-grant-tables 했는데

 

C:\Program Files\MySQL\MySQL Server 8.0\bin>mysqld_sage --skip-grant-tables

'mysqld_sage'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는

배치 파일이 아닙니다.

 

라고 나옵니다ㅠ

cmd 들어가서 경로를 mysql 설치되어있는 경로로 옮겨서도 해봤는데 같은 메시지가 나와요..


  1. mysql을 종료시키고

  2. cmd를 관리자권한으로 들어가서

  3. mysql 설치 경로로 옮긴 후

  4. mysqld.exe --skip-grant-tables --console --shared-memory

  5. 다른 cmd 창을 관리자권한으로 들어가서

  6. (말씀해주신 UPDATE문은 SQL syntax 에러가 나옵니다) use mysql;

  7. UPDATE user SET authentication_string=null WHERE User='root';

  8. select authentication_string from user;

  9. flush privileges;

  10. 나가기 위해 exit

  11. 재접속을 위해 mysql

  12. ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '새로 설정할 비밀번호';

하면 된다고 하는데 전 안됐습니다..

에러 메시지에는 mysqld_sage이라고 나와서 mysqld_safe를 실행시키지 못하고 있는 것 같습니다. mysqld_sage 대신 mysqld_safe를 실행해 보세요.

또한, UPDATE문에 문법 오류가 있다면 MySQL 버전에 따라서 쿼리 문법이 달라질 수 있습니다. 다음과 같이 새로운 비밀번호를 지정하는 방법으로 시도해 보세요.

ALTER USER 'root'@'localhost' IDENTIFIED BY '새로운비밀번호';

위 명령어는 MySQL 5.7 이상에서 사용할 수 있는 문법입니다. MySQL 5.7 이하 버전에서는 다음과 같이 사용합니다.

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('새로운비밀번호');

비밀번호 초기화 과정에서 무언가 잘못 입력하거나 저장하지 않은 것으로 추정됩니다. 초기화 절차를 다시 확인해보시고, 새로운 비밀번호를 설정하는 방법을 정확히 입력해 보세요.

유은혜님의 프로필 이미지
유은혜
질문자

Q1. alter문으로 비밀번호를 변경할 때 affected row가 0으로 나오면 안되는 거겠죠?

Q2. authentication_string = null로 만들고 나서 exit 하고 다시 use mysql 한 후select authentication_string from user; 했는데 null값이었던 곳에 무언가가 적혀져 있는데 이건 왜 그런 걸까요?

Q3. mysqld.exe --skip-grant-tables --console --shared-memory 후 새로운 cmd창을 관리자 모드로 열어 mysql -u root로 접속한 다음 ALTER USER 'root'@'localhost' IDENTIFIED BY '++++'; 를 입력하면 ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement 라고 나옵니다.

Q4. 비밀번호를 바꾼 후 해당 cmd 창에서 exit로 나간 후 mysql -u root -p로 변경한 비밀번호롤 통해 접속하면 들어가지는데 해당 cmd 창을 닫고 새로운 cmd창을 열어 실행하면 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 라 나옵니다. 관리자모드로 열어도 똑같은 에러메시지가 나와요.

 

계속 비슷한 질문을 들여 번거롭게 한 것 같아 죄송합니다. 맞게 했다고 생각되는데 계속 안되네요 mysql을 재설치하는 것도 괜찮은 방법일까요? 😥

유은혜님의 프로필 이미지
유은혜
질문자

재설치하고 성공했습니다!!!!!!!!!!!!!!!! 답변해주셔서 감사합니다 :)

0

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요, 1026999님!! 대신 답변해주셔서 고개 숙여 감사드립니다!! 🙏🙏

 

은혜님도 해결하셔서 정말 다행이네요!! 😊

이미 지난 사안이지만, 도움이 될 수 있을까 하여 마지막 질문 남겨주신 부분들에 대해 답변 드려보겠습니다!!

 

Q1. alter문으로 비밀번호를 변경할 때 affected row가 0으로 나오면 안되는 거겠죠?

넵넵!! affected row 0으로 나오면 설정이 적용된 값이 0개라는 의미로 잘 적용되지 않았다는 의미입니다!

 

Q2. authentication_string = null로 만들고 나서 exit 하고 다시 use mysql 한 후select authentication_string from user; 했는데 null값이었던 곳에 무언가가 적혀져 있는데 이건 왜 그런 걸까요?

아마 null 자체를 문자열로 인식했고, 비밀번호를 저장할 때 암호화되어 저장하느라 null이 아닌 무언가가 적혀있는 걸거에요!!

Q3. mysqld.exe --skip-grant-tables --console --shared-memory 후 새로운 cmd창을 관리자 모드로 열어 mysql -u root로 접속한 다음 ALTER USER 'root'@'localhost' IDENTIFIED BY '++++'; 를 입력하면 ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement 라고 나옵니다.

MySQL 서버가 현재 Table의 GRANT (권한 관리) 기능이 제외된 채로 실행되어 그렇습니다!

mysql.exe --skip-grant-tables로 하실 때 넣은 --skip-grant-tables 가 권한 관리 기능 제외 옵션이고, 사용하신 ALTER USER ... SQL이 권한 관리 기능이라 해당 기능을 사용할 수 없었던 것으로 생각됩니다.

Q4. 비밀번호를 바꾼 후 해당 cmd 창에서 exit로 나간 후 mysql -u root -p로 변경한 비밀번호롤 통해 접속하면 들어가지는데 해당 cmd 창을 닫고 새로운 cmd창을 열어 실행하면 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 라 나옵니다. 관리자모드로 열어도 똑같은 에러메시지가 나와요.

비밀번호가 틀려서 그러실것으로 생각됩니다! 🥺 혹은 비밀번호를 바꾸셨다고 생각했지만, Q1과 같은 이유로 정상 적용되지 않은 것일 수도 있습니다.

재설치를 통해 해결하셨다니 정말 다행입니다!

감사합니다! 🙏