반응형
MySQL 프로세스를 강제 종료하지 않고 정상 종료하는 방법
MySQL root 패스워드를 분실했을 경우 --skip-grant-tables 옵션으로 인증을 우회하여 패스워드를 재설정할 수 있다.
이때 kill -9 같은 강제 종료 방식 대신 mysqladmin shutdown 명령을 사용하면 안전하게 MySQL을 종료할 수 있다.
1. 로그 디렉토리 생성
MySQL 에러 로그 디렉토리가 없는 경우 생성한다.
로그 디렉토리 및 파일 생성
sudo mkdir -p /usr/local/mysql/log
sudo touch /usr/local/mysql/log/error.log
소유권 및 권한 설정
sudo chown -R mysql:mysql /usr/local/mysql/log
sudo chmod 755 /usr/local/mysql/log
sudo chmod 644 /usr/local/mysql/log/error.log
2. MySQL 인증 우회 모드로 기동
--skip-grant-tables 옵션으로 권한 검사를 비활성화하여 MySQL을 실행한다.
/usr/local/mysql/bin/mysqld_safe \
--defaults-file=/usr/local/mysql/my.cnf \
--skip-grant-tables \
--skip-networking &
옵션 설명
- --skip-grant-tables 사용자 인증 비활성화
- --skip-networking TCP 네트워크 접속 차단 (보안 강화)
- mysqld_safe 장애 발생 시 자동 재시작 지원
3. MySQL 접속
/usr/local/mysql/bin/mysql \
-uroot \
--socket=/tmp/mysql-3306.sock
4. root 패스워드 재설정
MySQL 8.x 기준
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
FLUSH PRIVILEGES;
mysql_native_password 방식 사용 시
- 일부 구버전 애플리케이션 또는 PHP 연동 환경에서는 mysql_native_password 플러그인이 필요할 수 있다.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPassword';
728x90
5. MySQL 정상 종료 (중요)
기존에는 아래와 같이 PID 기반 kill 명령으로 종료하는 경우가 많다.
sudo kill `cat /usr/local/mysql/data/mysqld.pid`
하지만 이 방식은 비정상 종료로 이어질 수 있으며 InnoDB Recovery가 발생할 가능성이 있다.
따라서 아래와 같이 mysqladmin shutdown 명령으로 정상 종료하는 것을 권장한다.
- 권장 방법
/usr/local/mysql/bin/mysqladmin \
-uroot \
--socket=/tmp/mysql-3306.sock \
shutdown
장점
- InnoDB Flush 정상 처리
- Binary Log 안전 종료
- 데이터 손상 위험 감소
- Crash Recovery 방지
6. MySQL 정상 모드로 재기동
/usr/local/mysql/bin/mysqld \
--defaults-file=/usr/local/mysql/my.cnf \
--user=mysql &
7. 변경된 패스워드로 접속 확인
/usr/local/mysql/bin/mysql \
-uroot -p \
--socket=/tmp/mysql-3306.sock
현재 인증 플러그인 확인
SELECT user, host, plugin FROM mysql.user;
- unix_socket이면 → 비밀번호 없이 OS 로그인으로 인증됨
- mysql_native_password면 → 비밀번호 인증
DB가 응답 없을 때 (단계적 접근)
1단계: 정상 종료 시도 (30초 정도 기다림)
sudo kill `cat /var/run/mysqld/mysqld.pid`
2단계: 그래도 안 되면 (1-2분 후)
sudo kill -15 `cat /var/run/mysqld/mysqld.pid`
3단계: 진짜 최후의 수단 (수 분 후에도 반응 없을 때)
sudo kill -9 `cat /var/run/mysqld/mysqld.pid`
kill -9 사용 후 반드시 해야 할 일
1. 잔여 파일 정리
sudo rm -f /var/run/mysqld/mysqld.pid
sudo rm -f /var/lib/mysql/mysql.sock
2. 테이블 검사/복구
/usr/local/mysql/bin/mysqld \
--defaults-file=/usr/local/mysql/my.cnf \
--user=mysql &
mysqlcheck --all-databases --auto-repair
3. 로그 확인
sudo tail -f /var/log/mysql/error.log
728x90
반응형
'리눅스' 카테고리의 다른 글
| Linux Bash 명령어 이력을 Syslog로 중앙 수집하는 방법 (0) | 2026.05.11 |
|---|---|
| 리눅스에서 사용자 명령어(history)를 rsyslog 중앙 로그 서버로 전송하는 방법 (0) | 2026.05.10 |
| 우분투 24.04에서 자동 업그레이드 및 자동 재부팅을 비활성화 방법 (0) | 2026.05.07 |
| 우분투에서 pbzip2를 설치하고 사용하는 방법 (0) | 2026.05.04 |
| VIM에서 Visual 모드를 비활성화하는 방법 (0) | 2026.04.30 |