操做環境
數據庫:mysql5.7 操做系統:centos (centos6與7兼容此方案)
數據庫全量備份流程
1)、建立數據庫備份文件與備份日誌所保存的文件夾mysql
#!/bin/bash cd /home # 建立備份文件夾 mkdir mysqlbak cd mysqlbak # 建立保存全量數據的文件夾 mkdir mysql_full # 建立備份日誌文件夾 mkdir log # 建立保存全量與執行腳本的文件夾 mkdir bin
2)、建立全量備份執行腳本sql
#!/bin/bash vim /home/mysqlbak/bin/backfull.sh
#!/bin/bash #須要備份的數據庫,多個數據庫用空格分開 dbname='cqrgi' #用戶名 username='root' #密碼 password='pwd' #備份時間 backtime=`date +%Y%m%d%H%M%S` #日誌備份路徑 logpath='/home/mysqlbak/log' #數據備份路徑 datapath='/home/mysqlbak/mysql_full' #日誌記錄頭部 echo ‘"備份時間爲${backtime},備份數據庫表 ${dbname} 開始" >> ${logpath}/mysqllog.log #正式備份數據庫 for table in $dbname; do source=`/usr/local/mysql5.7/bin/mysqldump --single-transaction -u${username} -p${password} ${table}> ${datapath}/${backtime}.sql` 2>> ${logpath}/mysqllog.log; #備份成功如下操做 if [ "$?" == 0 ];then cd $datapath #刪除七天前備份,也就是隻保存7天內的備份 find $datapath -name "*.sql" -type f -mtime +7 -exec rm -rf {} \; echo "數據庫表 ${dbname} 備份成功!!" >> ${logpath}/mysqllog.log else #備份失敗則進行如下操做 echo "數據庫表 ${dbname} 備份失敗!!" >> ${logpath}/mysqllog.log fi done
3)、賦予腳本可執行權限數據庫
#!/bin/bash chmod u+x /home/mysqlbak/bin/backfull.sh chown mysql:mysql -R /home/mysqlbak/
4)、增長定時任務vim
#!/bin/bash # 編輯定時任務 vim /etc/crontab # 新增定時任務 每晚10點執行備份 00 22 * * * root /home/mysqlbak/bin/backfull.sh # 使定時任務生效 crontab /etc/crontab
數據庫增量備份流程
1)、建立增量備份數據所保存文件夾centos
#!/bin/bash cd /home # 建立備份文件夾 mkdir mysqlbak cd mysqlbak # 建立保存增量數據的文件夾 mkdir mysql_bin # 建立記錄增量索引的文件夾 mkdir mysql_index # 建立備份日誌文件夾 mkdir log # 建立保存增量與執行腳本的文件夾 mkdir bin
2)、開啓mysql的binlog功能bash
#!/bin/bash vim /etc/my.cnf log_bin=/home/mysqlbak/mysql_bin/mysql-bin log_bin_index=/home/mysqlbak/mysql_index/mysql-bin.index server-id=1
3)、建立增量備份可執行腳本操作系統
#!/bin/bash vim /home/mysqlbak/bin/backbin.sh
#!/bin/bash #在使用以前,請提早建立如下各個目錄 #增量備份時複製mysql-bin.00000*的目標目錄,提早手動建立這個目錄 mysqlbinpath=/home/mysqlbak/mysql_bin logFile=/home/mysqlbak/log/bakbin.log username=root password='pwd' #mysql的數據目錄 #mysql的index文件路徑,放在數據目錄下的 /usr/local/mysql5.7/bin/mysqladmin -u${username} -p${password} flush-logs #這個是用於產生新的mysql-bin.00000*文件 #刪除三天前備份的數據 find $mysqlbinpath -name "mysql-bin.*" -type f -mtime +3 -exec rm -rf {} \; echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next Bakup succ! >> $logFile
4)、賦予備份文件夾權限rest
#!/bin/bash chown mysql:mysql -R /home/mysqlbak/ chmod u+x /home/mysqlbak/bin/backbin.sh
5)、重啓mysql服務日誌
service mysqld restart
6)、增長定時任務code
#!/bin/bash # 編輯定時任務 vim /etc/crontab # 新增定時任務 天天每小時0分執行增量備份 00 * * * * root /home/mysqlbak/bin/backbin.sh # 使定時任務生效 crontab /etc/crontab