728x90
보통 mysql과 mariaDB는 Graceful하게 종료하기 위해 SIGTERM(15) 을 사용한다.
서비스 stop 등을 통한 형태로 SIGTERM 통해 종료가 되면 DB는 문제가 되지 않지만, 갑자기 전원이 나가거나 하는 일이 있어서 내려간 경우 복구가 필요한 경우가 발생한다.
이는 다음과 같은 파일들이나 InnoDB의 파일들이 Write간 내려가서 무결성이 깨지기 때문이다.
ib_logfile0 | 데이터베이스 변경 사항을 기록하는 활성 로그 파일 |
ib_logfile1 | 데이터베이스 변경 사항을 기록하는 백업 로그 파일 |
ibdata1 | 데이터베이스의 모든 테이블 데이터와 인덱스를 저장하는 데이터 파일 |
이 경우 다음과 같은 절차로 복구를 할 수 있다.
1단계: DB정지
service mysqld stop
2단계: 응급모드로 DB설정
/etc/my.cnf.d/server.cnf 의 innodb_force_recovery 를 5 로 설정
3단계: 응급모드로 시작
service mysqld start
4단계: DB덤프
mysqldump -u root -p --databases [저장할DB명] > /dev/shm/덤프대상파일.sql
이때 만약 다른 Socket을 통해 열은 곳을 접근해서 하려면 --protocol=socket 와 -S 옵션 등을 같이 사용하고
다른 호스트에 연결해서 하려면 -h 와 -P 옵션 등을 사용한다.
/dev/shm 을 사용하려면 가용 메모리가 여유가 있으면 속도를 위해 사용하고 아니면 일반 Disk 쪽으로 사용해도 된다.
5단계: DB정지
service mysqld stop
6단계: 응급모드로 DB해제
/etc/my.cnf.d/server.cnf 의 innodb_force_recovery 를 0 로 설정
7단계: 백업경로 설정 및 백업
본래 DB가 /data/mysql 에 있다고 가정
mkdir /data/db_backup
mv /data/mysql/ibdata1 /data/db_backup
mv /data/mysql/ib_logfile0 /data/db_backup
mv /data/mysql/ib_logfile1 /data/db_backup
mv /data/mysql/대상DB명 /data/db_backup
8단계: DB 시작
service mysqld start
9단계: 복구 DB 생성
mysql -u root -p
CREATE DATABASE 복구DB명;
10단계: dump 했던 부분을 복구
mysql -uroot -p --databases 복구DB명 < /dev/shm/덤프대상파일.sql
당연한 이야기지만 DB에 접속하는 웹서비스나 기타 등등은 DB 복구되는 동안에는 막아야 한다.
728x90
'IT > Data|DB' 카테고리의 다른 글
mysql/mariaDB 한 서버에 다른 포트로 2개 올리기 (2) | 2024.01.04 |
---|