mysql의 루트 비밀번호를 재설정 할 수 없습니다


28

로컬 mysql 설치의 루트 비밀번호를 재설정해야하지만 그렇게 할 수는 없습니다. 나는 이것을 시도했다 :

$ sudo /etc/init.d/mysql stop
 * Stopping MySQL database server mysqld                                                                                                              [ OK ] 
[1]-  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
[2]+  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
reg@regDesktopHome:~$ sudo mysqld --skip-grant-tables &
[1] 13651
reg@regDesktopHome:~$ 140627 19:02:02 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.

reg@regDesktopHome:~$ mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
reg@regDesktopHome:~$ sudo mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[1]+  Exit 1                  sudo mysqld --skip-grant-tables

비밀번호 재설정은 어떻게합니까? 편집 1 나는 이것을 얻었다 :

$ ps ax| grep mysql
16515 ?        Ssl    0:00 /usr/sbin/mysqld
16551 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ sudo kill -9 16515
reg@regDesktopHome:~/semios/v3upgrade$ ps ax| grep mysql
16678 ?        Ssl    0:00 /usr/sbin/mysqld
16715 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

프로세스가 죽이 자마자 mysql을 자동으로 다시 시작하는 것처럼 보입니다 ...

답변:


43

먼저 사용해보십시오

mysql -u root -p

sql-root 사용자로 로그인하라는 메시지가 표시되면 암호 (기억하는 경우)를 입력하십시오 (스위치 -p는 암호 용임).

mysql에 대한 루트 비밀번호를 정말로 재설정해야한다면, 다음과 같이 패키지를 쉽게 재구성 할 수있다 dpkg-reconfigure.

mySQL 루트 비밀번호를 재설정하는 쉬운 단계 :

  1. 귀하의 버전을 확인하십시오 mysql-server;

    apt-cache policy mysql-server
    

    다른 정보 중에서 설치된 버전을 보여주는 행을 참조하십시오. 예를 들어 내 설치의 경우 :

    Installed: 5.5.37-0ubuntu0.12.04.1
    

    (이것으로 mysql-server-5.5시스템에 설치 되었음을 알 수 있습니다.)

  2. 다음을 사용하여 재구성을 시작하십시오.

    sudo dpkg-reconfigure mysql-server-*.*
    

    사용 mysql-server-*.*중인 버전으로 대체해야합니다. (나를 위해 mysql-server-5.5). 데이터베이스 데몬이 중지됩니다. 그러면 새 비밀번호를 입력하고 재구성을 확인해야하는 메시지가 나타납니다.

    snap1

    재구성이 완료된 후 데몬이 자동으로 시작됩니다.

  3. 그런 다음 다음을 사용하여 로그인 할 수 있습니다.

    mysql -u root -p
    

    데이터베이스 관리 작업을 시작하십시오.

참고 문헌 :

  1. https://help.ubuntu.com/community/MysqlPasswordReset [페이지에 표시된대로 곧 정리 될 것입니다.]

  2. 특정 버전과 관련된 Ubuntu 서버 안내서 .


2
dpkg-reconfigure mariadb-server-10.1다른 모든 솔루션이 작동하지 않았을 때 MariaDB에 효과적 임을 확인할 수 있습니다. 감사합니다.
liviucmg

19
dpkg-reconfigure암호를 입력하라는 메시지가 표시되지 않았습니다. 암호를 적용 할 방법이 있습니까?
Unirgy

15
나를 위해 일하지 않았다. 위와 같은 명령을 사용하고 "업데이트가 필요한지 확인 중입니다.이 MySQL 설치는 이미 5.7.13으로 업그레이드되었습니다. 여전히 mysql_upgrade를 실행해야하는 경우 --force를 사용하십시오"라는 메시지가 나타납니다. --force를 사용하면 같은 반응을 보였습니다.
Anthony Scaife

5
분명히 이것은 더 이상 작동하지 않습니다.
dpi

1
@Paulo Henrique No. 상황에 따라 우리는 서버를 완전히 다시 설치하는 것이 우리의 시간을 최대한 활용하기로 결정했습니다.
Anthony Scaife

21

이 블로그에서 가져온 참조 :

1 단계 : MySQL 서비스를 중지합니다.

sudo service mysql stop

2 단계 : 실행중인 모든 mysqld를 종료합니다.

sudo killall -9 mysqld

3 단계 : 안전 모드에서 mysqld 시작

sudo mysqld_safe --skip-grant-tables --skip-networking &

4 단계 : MySQL 클라이언트 시작

mysql -u root

5 단계 : 로그인에 성공하면이 명령을 실행하여 비밀번호를 변경하십시오.

FLUSH PRIVILEGES;

6 단계 : mysql 루트 비밀번호를 업데이트 할 수 있습니다.

UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

mysql> 5.7의 경우 위 대신 이것을 사용하십시오.

UPDATE mysql.user SET authentication_string=PASSWORD('newpwd') WHERE User='root';

7 단계 :이 명령을 실행하십시오.

FLUSH PRIVILEGES;

8 단계 : MySQL 콘솔 종료

exit

9 단계 : mysqld_safe 종료 및 mysql 시작

sudo killall mysqld_safe && sudo service mysql start

1
해야 sudo service mysql stop하지sudo stop mysql
knocte

1
또한, 결국에는 단계가 sudo killall mysqld_safe && sudo service mysql start
빠져서

3
MYSQL 5.7의 경우 비밀번호 변경 구문이 다음과 같이 변경되었습니다.ALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'
Tarek Fadel

7
참고 ! MySQL 5.7에는 auth_socket이라는 새로운 짐승이 있습니다. 루트 암호없이 mysql을 설치하면 짐승이 당신을 공격하고 50 개의 체력을 잃게됩니다. 위의 6 단계에서해야합니다 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';. 여기에서 읽을 수 있습니다 . 이론적으로 (내가 시도하지 않았다), "sudo su-"가 루트가 되려면 비밀번호없이 mysql에 로그인 할 수 있어야한다.
olafure

3
ALTER USER ...작동하지 않는 경우UPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
olafure

9

Ubuntu 16.04 및 mysql-server-5.7에서 정답은 olafure의 마지막 주석이며 dpkg-reconfigure mysql-server-5.7더 이상 작동하지 않습니다.

sudo service mysql stop
sudo killall mysqld
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

이제 MySQL 콘솔에서 >mysql

USE mysql;
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE user='root';
FLUSH PRIVILEGES;
\q

좋은 mysql 과정을 다시 시작

sudo killall mysqld
sudo service mysql start

새 비밀번호 확인

mysql -u root -p
Enter password: newpass
mysql>

5
mysqld_safe실행 시 오류가 발생 Directory '/var/run/mysqld' for UNIX socket file don't exists.합니다. 그래서 나는 달렸고 sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld위의 나머지 대답은 효과가 있습니다. 우분투 16의 버그입니까? 이전에 비밀번호를 업데이트하는 이러한 모든 문제를 경험 한 적이 없습니다.
체스터

@Chester 대단히 감사합니다 !! 이것은 다른 모든 솔루션에서 오류가 발생하여 마침내 작동 한 유일한 방법이었습니다. (우분투 서버 16.04 여기)이 대답에 추가되어야합니다
derHugo

3

MySQL 5.7 부터 초기 설치 중 비밀번호를 비워두면 해당 사용자에 대한 인증이 auth_socket플러그인을 기반으로 합니다.

비밀번호를 변경하는 올바른 방법은 다음과 같습니다.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/


이것은 나의 정확한 경우 (mysql 5.7에서 설치하는 동안 빈 암호)였으며 이것이 내 경우의 유일한 해결책이었습니다.
cherouvim

내가 메시지를 얻을 :ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
user2513149

@ user2513149 --skip-grant-tables옵션 없이 MySQL 서버를 다시 시작 하고이 솔루션이 작동하는지 확인하십시오.
Barun

@Barun, 아니요, --skip-grant-tables옵션이 없으면 MySQL로 루트로 로그인 할 수도 없습니다. 그것은 말한다ERROR 1698 (28000): Access denied for user 'root'@'localhost'
user2513149

해결되었습니다! mysqld_safe비밀번호가없는 루트 로 일반 MySQL 콘솔 (아닌 ) 에 로그인해야했습니다 . 우분투 18.04와 mysql-server-5.7이 있습니다. 이 답변이 도움이되었습니다. askubuntu.com/a/767252/585252 (하단 부분 참조)
user2513149

1

나머지 답변에서 아무것도 효과가 없었습니다. 이것은 내 솔루션입니다.

sudo service mysql stop
sudo mysqld_safe &
sudo mysql -u root

거기에:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
FLUSH PRIVILEGES;
QUIT;

그때:

sudo killall mysqld
sudo service mysql start
sudo mysql -u root -p

1
나머지는 나에게도 효과가 없다 ... 나도 당신의 해결책은 불행히도 : 2017-05-30T06:33:22.291126Z mysqld_safe Logging to syslog. 2017-05-30T06:33:22.294375Z mysqld_safe Logging to '/var/log/mysql/error.log'. 2017-05-30T06:33:22.296874Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
여전히이

1
이것은 내가 시도한 여섯 가지 제안 중 나에게 도움이되는 유일한 조언이지만 "UNIX 소켓 파일이 존재하지 않습니다"오류를 피하기 위해 @Chester 비트를 추가했습니다. sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld이것은 mysql 5.7 및 ubuntu 18.04에 있습니다. .
twowheeler

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.