반응형

xtrabackup 

DB가 10GB가 넘어가면서 mysqldump로 백업하면 그 시간동안 서버가 기어다님ㅠㅠ

xtrabackup innobackupex 를 쓰고싶었지만 perl DBI mysql 없어서 실행안됨ㅠㅠ

결국 xtrabackup 을 써봤는데 속도도 빠르고 괜찮아서 걍 쓰기로마음먹고 


백업<->복구 

백업->증분백업->복구


테스트해본결과 속도도 괜찮고 몇가지 사항만 숙지한다면 복구도 확실해서 쓰기로 마음먹었으나 사용법이 OTZ


1. 백업 = 전체 백업 -> 증분 백업 

2. 복구 = 증분+전체백업 합치기 -> 복구


백업(전체 백업)

frm 파일은 백업되지 않음으로

mysql 데이터 폴더 (/usr/local/mysql/data)에 database 폴더를 수동으로 백업한다

cp -r /usr/local/mysql/data/mysql /backup/mysql/xtrabackup_mysql
cp -r /usr/local/mysql/data/mydatabase /backup/mysql/xtrabackup_mydatabase

xtrabackup --backup --target-dir=/backup/mysql/xtrabackup_basedir

xtrabackup --prepare --target-dir=/backup/mysql/xtrabackup_basedir


백업(증분 백업)

xtrabackup --backup --target-dir=/backup/mysql/incremental/ --incremental-basedir=/backup/mysql/xtrabackup_basedir/




복구

0. 전체 백업에 증분백업을 합친다

1. mysql 종료

2. mysql 데이터 폴더 (/usr/local/mysql/data) 삭제

3. mysql 데이터 폴더 (/usr/local/mysql/data)에 database 폴더를 수동으로 백업한다 <- 이걸복사

4. 백업데이터를 복사

5. mysql 데이터 폴더 소유권 변경

6. mysql 시작


0. xtrabackup --prepare --apply-log-only --target-dir=/backup/xtrabackup/ --incremental-dir=/backup/mysql/incremental/

1. service mysqld stop

2. rm -rf /usr/local/mysql/data

3. mv /backup/mysql/xtrabackup_basedir /usr/local/mysql/data

4. 

    cp -r /backup/mysql/xtrabackup_mysql /usr/local/mysql/data/myssql

    cp -r /backup/mysql/xtrabackup_mydatabase /usr/local/mysql/data/mydatabase

5. chown -R mysql:mysql /usr/local/mysql/data

6. service mysqld start


crontab 에 등록해서 매월 1일에 전체백업을 하고 월 말까지 날마다 증분 백업하는 스크립트 예

[backup_month.sh]

#!/bin/bash
# xtrabackup
# 매월 첫 달에 실행된다
# DB xtrabackup base point
if [ ! -d /backup/mysql ]
then
mkdir /backup/mysql
mkdir /backup/mysql/$(date +%Y-%m)
fi
cp -r /usr/local/mysql/data/mysql /backup/mysql/$(date +%Y-%m)/xtrabackup_mysql
cp -r /usr/local/mysql/data/mydatabase/backup/mysql/$(date +%Y-%m)/xtrabackup_mydatabase
xtrabackup --backup --target-dir=/backup/mysql/$(date +%Y-%m)/xtrabackup_basedir
xtrabackup --prepare --target-dir=/backup/mysql/$(date +%Y-%m)/xtrabackup_basedir

[backup_day.sh]

#!/bin/bash
# xtrabackup 
# 매 일 실행된다
# DB xtrabackup base point
if [ ! -d /backup/mysql ]
then
mkdir /backup/mysql
mkdir /backup/mysql/$(date +%Y-%m)
fi
# DB xtrabackup increment point
if [ ! -d /backup/mysql/$(date +%Y-%m)/incremental ]
then
mkdir /backup/mysql/$(date +%Y-%m)/incremental
fi
xtrabackup --backup --target-dir=/backup/mysql/$(date +%Y-%m)/incremental/$(date +%d)/ --incremental-basedir=/backup/mysql/$(date +%Y-%m)/xtrabackup_basedir/


실행권한으로 바꾸고

chmod 0700 backup_month.sh

chmod 0700 backup_day.sh


crontab 등록

crontab -e

00 03 1 * * /root/contab/backup_month.sh
00 06 * * * /root/contab/backup_day.sh

반응형

+ Recent posts