데이터를 풀백업을 11시에 했을 경우 11시 30분에 장애가 나면 Oracle이나 MSSQL 같은 경우
redo log나 트랜잭션 로그를 사용하여 데이터를 복원합니다.
그리고 mysql에서도 undo/redo log를 사용하여 시작할 때 데이터를 복구가 가능합니다.
(그런 장애가 난 적이 없고 해당하는 부분은 저도 조금 더 공부를 해야봐 알겠네요.
일단 여러 참고자료에서는 가능하다고 적혀 있어서 적어 놓았습니다.)
그런데 11시에 풀백업이 되고 11시 30분에 장애가 나거나 실수로 쿼리를 잘못 날렸을 경우
실수로 실행한 쿼리문 이전으로 복구하는 방법을 알려 드리고자 합니다.
빈로그 복원에 대한 시나리오 1. 11시에 데이터가 풀백업되었다. 2. 테이블 생성 후 프로시저로 TESTDB에 해당 테이블에 10000개의 데이터 입력 3. 11시 반에 데이터에 문제가 발생한다. (지금은 11시 반에 TESTDB를 drop database로 날렸다는 가정) 4. 11시 데이터를 먼저 복원 후에 binlog를 이용하여 11시 30분까지의 데이터를 복원한다.
1. TESTDB에 테스트 테이블 생성 create table seq_test(a int, b int);
2. 10000개의 데이터를 입력 할 procedure 생성 DELIMITER $$ USE `TESTDB`$$ DROP PROCEDURE IF EXISTS `pGet_TESTDB_Insert_data`$$
CREATE DEFINER=`username`@`localhost` PROCEDURE `pGet_TESTDB_Insert_data`() BEGIN set @i = 0; while (@i < 10000) DO set @insert_member = concat("insert into seq_test values(",@i,", ",@i,")"); SELECT @insert_member; PREPARE stmt FROM @insert_member; EXECUTE stmt; set @i = @i + 1; end while; end$$
DELIMITER ;
3. procedure 실행 call pGet_TESTDB_Insert_data();
4. database 날림 drop database TESTDB;
5. bin로그를 전부 취합 /usr/local/mysql5/bin/mysqlbinlog -u username -p /usr/local/mysql5/data/mysql-bin.000001 >> /test_db/mysql-bin.sql /usr/local/mysql5/bin/mysqlbinlog -u username -p /usr/local/mysql5/data/mysql-bin.000002 >> /test_db/mysql-bin.sql /usr/local/mysql5/bin/mysqlbinlog -u username -p /usr/local/mysql5/data/mysql-bin.000003 >> /test_db/mysql-bin.sql /usr/local/mysql5/bin/mysqlbinlog -u username -p /usr/local/mysql5/data/mysql-bin.000004 >> /test_db/mysql-bin.sql /usr/local/mysql5/bin/mysqlbinlog -u username -p /usr/local/mysql5/data/mysql-bin.000005 >> /test_db/mysql-bin.sql
6. 백업한 11시 데이터를 복원 create database TESTDB; /usr/local/mysql5/bin/mysql -u username -p TESTDB < TESTDB_11hour.sql
6. 11시 00분부터 11시 30분까지의 데이터를 남기고 mysql-bin.sql 나머지 데이터를 전부 삭제 /*!*/; <- 이 문구 나오기 전까지 자름 #End of log file 이후는 자름
7. binlog 데이터 복원 /usr/local/mysq5/bin/mysql -u username -p TESTDB < mysql-bin.sql |
저는 이렇게 해서 해당 DATA를 복구하였습니다.
해당하는 기술은 엄청나게 유용하게 사용됩니다.
나중에 장애나 쿼리를 잘못 실행했을 때 사용해 보실 수 있으실 겁니다.
http://blog.cafe24.com/1659
[출처] 빈로그를 이용한 데이터 복원방법|작성자 theswice
'연구개발 > MYSQL' 카테고리의 다른 글
MySQL 5.5의 특징 정리 (0) | 2014.12.21 |
---|---|
sh: 0: 어쩌구 나오면 (0) | 2014.12.20 |
[MySQL] sql_mode 설정 (0) | 2014.12.18 |
'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)' (0) | 2014.12.18 |
Table / Column Comment 추출하는 쿼리 (0) | 2014.12.16 |