MySQL root 패스워드 분실

(MySQL root 패스워드 초기화에서 넘어옴)
MySQL 초기 패스워드 지정
MySQL root 패스워드 분실
MySQL root 패스워드 초기화
MySQL root 패스워드 재설정

1 mysqld 중지[ | ]

Bash
Copy
systemctl stop mysqld    # CentOS
systemctl stop mysql     # Ubuntu
Console
Copy
[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]#

2 mysqld_safe 실행[ | ]

  • 인증 생략 옵션 + 안전모드로 데몬 실행
Bash
Copy
/usr/bin/mysqld_safe --skip-grant &
/usr/bin/mysqld_safe --skip-grant-tables &
Console
Copy
[root@localhost ~]# /usr/bin/mysqld_safe --skip-grant-tables &
[1] 32055
Starting mysqld daemon with databases from /var/lib/mysql

→ 이제 패스워드 없이 mysql에 접속할 수 있게 되었다.[1]

3 새 패스워드 지정[ | ]

mysql 콘솔로 들어가자.[2]

Bash
Copy
/usr/bin/mysql -u root mysql

다음 SQL 명령어를 입력하여 원하는 패스워드로 변경한다.

MySQL 5.7.6 이상
MySQL
Copy
ALTER USER 'root'@'localhost' IDENTIFIED BY '패스워드';
MySQL 5.7.5 이하
MySQL
Copy
-- MySQL 5.6에서 성공 ★
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('패스워드');
MySQL
Copy
-- MySQL 5.7 이상
UPDATE mysql.user SET authentication_string=PASSWORD('패스워드') WHERE user='root' AND Host='localhost';
FLUSH PRIVILEGES;
MySQL
Copy
-- MySQL 5.7 미만
UPDATE mysql.user SET password=PASSWORD('패스워드') WHERE user='root' AND Host='localhost';
FLUSH PRIVILEGES;


실행 예시
Console
Copy
[root@localhost ~]# /usr/bin/mysql -uroot mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> update user set password=password('P@ssw0rd') where user='root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

4 mysqld 재시작[ | ]

이제 패스워드를 입력해야만 mysql을 사용할 수 있도록 하기 위해, mysqld를 재시작한다.

Bash
Copy
systemctl restart mysqld    # CentOS
systemctl restart mysql     # Ubuntu
Console
Copy
[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# 
[1]+  Done                    /usr/bin/mysqld_safe --skip-grant
→ 백그라운드로 실행 중이던 무인증 안전모드 mysqld 프로세스가 중지되고 정상모드 mysqld로 재시작되었다.

5 같이 보기[ | ]

6 참고[ | ]

  1. 로컬에서는 인증 없이 mysql의 root 권한을 사용가능하게 됨
  2. ERROR 1049 (42000): Unknown database 'mysql' 라고 나오면서 안들어 가지는 경우가 있을 수 있는데, mysql 설치 이후 한번도 root 패스워드를 지정하지 않은 상태이다. 이 때는 본 문서를 따르지 말고 service mysqld restart한다. 그러면 mysqladmin을 통한 패스워드 설정 방법이 나올 것이다.
편집자 J Jmnote 121.165.242.127 221.156.245.138
  • CentOS MySQL 설치
    RHEL5.x 버전에서 MySQL-5.5.45 버전 설치시, /usr/bin/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data 와 같이 설정해 주지 않으면 정상 동작하지 않는 경우가 있었습니다. 확인 바랍니다.
  • MySQL BigDump
    'MySQL server has gone away'는 백업본 전체의 크기가 크다기 보다는, 특정 쿼리문 1개의 크기가 너무 커서 처리를 못하는 거라서, 이런 도구로 해결하기는 어려울 것 같습니다.J Jmnote
  • MySQL STRICT TRANS TABLES
    @Jmnote 감사합니다.~ John Jeong
  • MySQL 외래키 옵션 변경
    진짜 필요한 거였는데 이런걸 이제야 알다니 정말 감사합니다. 문태부
  • MySQL 컬럼명으로 테이블 찾기
    회사 가서 쓰기 좋은 코드 1추 Stly3466