1. 程式人生 > >Mysql備份(全量+增量+恢復)方案操作記錄

Mysql備份(全量+增量+恢復)方案操作記錄

1、開啟mysql的binlog日誌&檢視$備份

2、shell指令碼

mysqldump 變數說明

--all-databases針對所有資料庫進行備份

 --databases databasename 針對單個數據庫進行備份
--flush-logs為結束當前日誌,生成新日誌檔案;
--master-data=2 選項將會在輸出SQL中記錄下完全備份後新日誌檔案的名稱,

用於日後恢復時參考,例如輸出的備份SQL檔案中含有:
CHANGE MASTER TO MASTER_LOG_FILE=’MySQL-bin.000002′, MASTER_LOG_POS=106;

3.mysqldump 增量備份其他說明:
如果mysqldump 加上–delete-master-logs 則清除以前的日誌,以釋放空間。但是如果伺服器配置為映象的複製主伺服器,用mysqldump –delete-master-logs刪掉MySQL二進位制日誌很危險,因為從伺服器可能還沒有完全處理該二進位制日誌的內容。在這種情況下,使用 PURGE MASTER LOGS更為安全。

每日定時使用 MySQLadmin flush-logs來建立新日誌,並結束前一日誌寫入過程。並把前一日誌備份,例如上例中開始儲存資料目錄下的日誌檔案 MySQL-bin.000002 , ...

#!/bin/bash
user=root
passwd=root!
backup_dir=/var/lib/mysql/backup/
name_dir=$(date +%F"-%H")
single_database=test
binlog_dir=/var/lib/mysql/binlog

if [ ! -d $backup_dir ];  then
	mkdir -p $backup_dir
fi
if [ ! -d  $backup_dir$name_dir ];  then
	mkdir -p $backup_dir$name_dir
fi
#全量備份
mysql_all(){
	
	cd $backup_dir$name_dir
	mysqldump -u$user -p$passwd  --master-data --flush-logs --all-databases > $backup_dir$name_dir/$name_dir.sql
}
#單個數據庫備份
mysql_single(){
	
	cd $backup_dir$name_dir
	mysqldump -u$user -p$passwd --master-data --flush-logs --databases $single_database > $backup_dir$name_dir/$name_dir-$single_database.sql
}
#增量備份
mysql_increment(){
	
    cd $binlog_dir
	mysqladmin -u$user -p$passwd flush-logs
	cp $(ls mysql-bin.[0-9]* | head -n -1 | sort -rg | head -n 1) $backup_dir$name_dir/
}
$1

3、自動執行備份

該指令碼已經測試過,可以使用。只需要設定計劃任務即可。
設定計劃任務:

在週五實行全備。

在週一到週六實行增量備份。

因為過期日誌在七天會自動清除。

crontab -e
0 1 * * 0 /bin/bash /root/mysqldump.sh mysql_all >/dev/operate_`date +"\%Y\%m\%d"`.log 2>&1
0 1 * * 1-6 /bin/bash /root/mysqldump.sh mysql_increment >/dev/operate_`date +"\%Y\%m\%d"`.log 2>&1

4、生成檔案

5、恢復檔案

(1)use對應的資料庫;
(2)利用source命令即可恢復資料。