MySQL是一款常用的關系型數據庫管理系統,而Linux中則常常使用增量備份與恢復的方式來對數據庫進行備份。下面將介紹在Linux中使用MySQL增量備份與恢復的方法。
一、增量備份
#!/bin/bash #每次增量備份前,將上次備份(也就是全量備份)拷貝到本地 cp -r /data/mysql/backup/full /data/mysql/backup/incremental #統計需要備份的數據庫數量 num=`grep -cvE '^#|^$' /data/mysql/backup/conf.txt` #逐個備份每個數據庫,并記錄備份的日志到指定目錄 for i in `seq $num`;do db=`sed -n "${i}p" /data/mysql/backup/conf.txt` innobackupex --user=root --password='passwd' --incremental /data/mysql/backup/incremental --incremental-basedir=/data/mysql/backup/incremental/$(ls -t /data/mysql/backup/incremental|head -n1) --databases "$db" >>/data/mysql/backup/incremental/backup.log 2>&1 done #備份完成后記錄備份時間,用于后續恢復使用 date '+%F %T' > /data/mysql/backup/incremental/last_backup_time.txt
二、增量恢復
#!/bin/bash #獲取最后一次備份的時間 last_backup_time=`cat /data/mysql/backup/incremental/last_backup_time.txt` #如果從未備份過,則只還原全量備份版本 if [ -z "$last_backup_time" ];then #獲取最后一個全量備份的目錄 full_backup=`ls -t /data/mysql/backup/full | grep '[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}.*'| head -n1` #使用全量備份還原數據庫 innobackupex --apply-log /data/mysql/backup/full/$full_backup >/dev/null 2>&1 innobackupex --copy-back /data/mysql/backup/full/$full_backup >/dev/null 2>&1 else #獲取最近一次增量備份的目錄 incremental_backup=`ls -t /data/mysql/backup/incremental | grep '[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}.*'| head -n1` #獲取最后一個全量備份的目錄 full_backup=`ls -t /data/mysql/backup/full | grep '[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}.*'|head -n1` #恢復最近一次增量備份 innobackupex --apply-log /data/mysql/backup/full/$full_backup >/dev/null 2>&1 innobackupex --apply-log /data/mysql/backup/incremental/$incremental_backup --incremental-basedir=/data/mysql/backup/full/$full_backup >/dev/null 2>&1 innobackupex --copy-back /data/mysql/backup/full/$full_backup >/dev/null 2>&1 fi
以上兩個腳本實現了Linux中MySQL增量備份與恢復,通過使用增量備份可以有效減小備份文件的大小、降低備份時間,提高備份的效率,同時也能夠在恢復數據時以最近的一次備份為基礎,大大減小了數據恢復時間。大家在進行備份與恢復時可將以上腳本作為參考,簡化自己的操作。