Mysql備份(全量+增量+恢復)方案操作記錄
阿新 • • 發佈:2019-01-14
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命令即可恢復資料。