mysql的備份和恢復

今天特分享一款實用的腳本,數據庫備份和恢復,對新手運維適用。互聯網上什麼最重要?無疑是數據。無論是程序員還是運維都不希望誤操作數據丟失,或一些意想不到因素導致數據損壞或丟失。所以數據備份和恢復至關重要,也是運維的首要任務,也是標配。我們都不希望刪庫跑路。

一、mysql備份:
1.備份腳本如下:

#!/bin/bash
#備份存放的路徑
backup_dir="/backup/mysql/full"
#備份用戶
mysql_user="root"
#備份密碼
mysql_passwd="password"
#備份記錄日誌
log="./mysql_backup.log"
[ -d $backup_dir ] || mkdir -p $backup_dir
function backup_mysql_full(){
      #1.全量備份,在full目錄生成一個以日期命名的備份文件夾
      echo "Start to backup at `date +"%Y-%m-%d %H:%M:%S"`">>$log
      innobackupex --user=$mysql_user --password=$mysql_passwd $backup_dir
      if [ $? -eq 0 ];then
              echo "Backup success at "`date +"%Y-%m-%d %H:%M:%S"`>>$log 
              #刪除1天前的備份
              find $backup_dir -type d -mtime +7|xargs rm -rf >>$log
      else
              echo "Backup fail at "`date +"%Y-%m-%d %H:%M:%S"`>>$log
      fi
}
backup_mysql_full

2.添加定時備份,每天凌晨2點開始自動備份,運行crontab -e
00 02 * bash /opt/xtrabackup_scripts/backup_mysql_full.sh

說明:前提需安裝xtrabackup備份工具,一款物理備份,速度相比mysqldump的邏輯備份快很多。

腳本的特點:
1.屬於物理熱備,速度快,不影響業務。
2.定時自動備份
3.自動保留7天的備份,並刪除舊備份,防止磁盤佔滿
4.備份日誌記錄,備份失敗或沒有備份方便查找原因
5.全庫備份
二、mysql數據庫的恢復

#!/bin/bash
# 使用方法 先刪除數據rm -rf /data/mysqldata/, 然後 sh recover_mysql_full.sh 2018-08-08_16-33-07
 #恢復的目標庫的用戶名
mysql_user="root"

#恢復的目標庫的密碼
mysql_passwd="password"

#備份文件存放的目錄
mysql_recover_dir="/backup/mysql/full"   

#恢復的目標庫數據庫文件路徑    
mysql_dir="/data/mysqldata/"

#目標庫的數據配置文件
my_cnf="/etc/my.cnf"

#日誌記錄
log="./mysql_recover.log"

#自動創建恢復目錄
[ -d $mysql_recover_dir ] || mkdir -p $mysql_recover_dir

#備份數據數據中可能包含未提交的事務或已經提交但未同步至數據文件中的事務,此時數據還處於不一致狀態。因此需要通過回滾未提交的事務及已經提交的事務至數據文件,使得數據文件
處於一致性狀態

innobackupex --defaults-file=$my_cnf --user=$mysql_user --password=$mysql_passwd --apply-log $mysql_recover_dir/$1

#開始真正的恢復數據
service mysqld stop
rm -rf $mysql_dir/* >>$log
innobackupex --defaults-file=$my_cnf --user=$mysql_user --password=$mysql_passwd --copy-back $mysql_recover_dir/$1>>$log

chown mysql.mysql -R $mysql_dir >>$log
service mysqld start
[ $? -ne 0 ] && service mysqld start

腳本說明:
此恢復腳本可以和備份腳本組合在一起,加個定時任務,就可以做每天定時同步生產數據自動同步到測試環境。對於數據量幾十上百G不大的情況也挺實用,當然如果數據量很大,200G以上
則可考慮阿里的otter數據的消費和訂閱,後面會講到此方案的用法。

三、恢復到一臺新的數據庫
很多時候我們數據出了問題,並不想直接還原到原先的庫,畢竟數據缺少一天的。還原直接損失一天的數據,因此我們想還原到別的地方做對比看看。
準備好新搭建的一臺數據庫

1.恢復數據前的準備(合併xtabackup_log_file和備份的物理文件),應用備份文件
innobackupex —apply-log /backup/mysql/full/2019-01-02_02-00-02
刪除原先數據庫裏的數據
service mysqld stop
cd /var/lib/mysql/
rm -rf *
3.恢復
innobackupex —copy-back /backup/mysql/full/2019-01-02_02-00-02
chown -R mysql.mysql /var/lib/mysql/
service mysqld restart
最後查看新數據庫已有原來的數據。

更多精彩,關注公衆號

mysql的備份和恢復

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章