今天特分享一款實用的腳本,數據庫備份和恢復,對新手運維適用。互聯網上什麼最重要?無疑是數據。不管是程序員仍是運維都不但願誤操做數據丟失,或一些意想不到因素致使數據損壞或丟失。因此數據備份和恢復相當重要,也是運維的首要任務,也是標配。咱們都不但願刪庫跑路。mysql
1、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.shsql
說明:前提需安裝xtrabackup備份工具,一款物理備份,速度相比mysqldump的邏輯備份快不少。數據庫
腳本的特色:
1.屬於物理熱備,速度快,不影響業務。
2.定時自動備份
3.自動保留7天的備份,並刪除舊備份,防止磁盤佔滿
4.備份日誌記錄,備份失敗或沒有備份方便查找緣由
5.全庫備份
2、mysql數據庫的恢復bash
#!/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數據的消費和訂閱,後面會講到此方案的用法。app
3、恢復到一臺新的數據庫
不少時候咱們數據出了問題,並不想直接還原到原先的庫,畢竟數據缺乏一天的。還原直接損失一天的數據,所以咱們想還原到別的地方作對比看看。
準備好新搭建的一臺數據庫運維
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
最後查看新數據庫已有原來的數據。ide
更多精彩,關注公衆號工具