MySQL 定時備份

Krisji發表於2019-11-21

1 設定好crontab 定時任務備份

#每天備份三次資料庫
0 5,15,22  * * *  sh /data/script/alldatabase_back.sh &>/dev/null
#每天2點備份
0 2 * * *         sh /data/script/dev_alldatabase_back.sh  &>/dev/null

2 開始寫備份指令碼

#!/bin/bash
backupdir=/data/backup
time=`date +%Y-%m-%d-%H-%M`
if  [ ! -e  /data/backcup  ];then
 mkdir  -p  /data/backup
fi
/usr/bin/mysqldump  --single-transaction  --flush-logs --skip-add-drop-table  -uroot  -p'root@xx'  資料庫  |bzip2 > $backupdir/資料庫$time.sql.bz2

# 清理超過7天沒使用的檔案
find $backupdir -name "資料庫*.sql.bz2" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1

批註:
--single-transaction引數的作用,設定事務的隔離級別為可重複讀,即REPEATABLE READ,這樣能保證在一個事務中所有相同的查詢讀取到同樣的資料,也就大概保證了在dump期間,如果其他innodb引擎的執行緒修改了表的資料並提交,對該dump執行緒的資料並無影響
--skip-add-drop-table  ---取消每個資料表建立之前新增drop資料表語句(預設每個表之前存在drop語句)
--flush-logs  在開始匯出前重新整理伺服器的日誌檔案
最後匯出的資料庫備份檔案 就是這個 xx2019-11-14-02-00.sql.bz2
mysql -u 使用者名稱 -p密碼 資料庫名 < 備份檔案.sql  恢復某個節點資料
bzip2 -d xxg2019-12-19-11-53.sql.bz2  解壓
查詢一個資料庫的引擎
SELECT CONCAT('alter table ',table_name,' engine=InnoDB;') FROM information_schema.tables

WHERE table_schema="xx" AND ENGINE="MyISAM";
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章