Linux下MySQL定時自動完整備份(mysqldump+crontab)

一、前言

1、本文主要內(nèi)容

  • 實現(xiàn)數(shù)據(jù)庫全量備份
  • 實現(xiàn)定時執(zhí)行備份
  • 實現(xiàn)定時清理7天之前的備份

2、環(huán)境信息

環(huán)境/工具 說明
MySQL v5.7.x
mysqldump MySQL自帶的數(shù)據(jù)導(dǎo)出工具
crontab 功能相當(dāng)于Windows的任務(wù)計劃工具

二、備份準(zhǔn)備&備份測試

1、備份目錄準(zhǔn)備

#mysql專用目錄
mkdir /mysql
#mysql備份目錄
mkdir /mysql/backup
#mysql備份腳本
mkdir /mysql/backup/scripts
#mysql備份文件
mkdir /mysql/backup/files
#mysql備份日志
mkdir /mysql/backup/logs

2、備份腳本準(zhǔn)備

  • 新建完整備份腳本
vi /mysql/backup/scripts/backup_full.sh

  • 腳本內(nèi)容
#!/bin/bash

#備份目錄
BACKUP_ROOT=/mysql/backup
BACKUP_FILEDIR=$BACKUP_ROOT/files
BACKUP_LOGDIR=$BACKUP_ROOT/logs

#當(dāng)前日期
DATE=$(date +%Y%m%d)

######備份######

#查詢所有數(shù)據(jù)庫
#-uroot -p123456表示使用root賬號執(zhí)行命令,且root賬號的密碼為:123456
DATABASES=$(mysql -uroot -p123456 -e "show databases" | grep -Ev "Database|sys|information_schema")
#DATABASES=$(mysql -uroot -p123456 -e "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('sys','mysql','information_schema','performance_schema');" | grep -v "SCHEMA_NAME","ken.io") 
echo $DATABASES
#循環(huán)數(shù)據(jù)庫進行備份
for db in $DATABASES
do
echo
echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN----------
mysqldump -uroot -pRoot@1024 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz
echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE----------
echo
done

echo "done"

3、備份測試&驗證

注意此處的報錯:mysqldump: Got errno 11 on write
是因為保存的文件夾不存在,需要提前手動創(chuàng)建sh腳本里面涉及到的所有文件夾

#執(zhí)行備份腳本
sh /mysql/backup/scripts/backup_full.sh

#查看備份文件
ll /mysql/backup/files -h

#解壓指定文件({file}自己替換成備份的文件)
gunzip /mysql/backup/files/{file}

三、定時任務(wù)

  • 安裝crontab
yum install -y crontab

1、定時執(zhí)行MySQL完整備份

  • 創(chuàng)建定時備份任務(wù)
#添加定時任務(wù)
crontab -e

#每天凌晨3點執(zhí)行
00 3 * * * sh /mysql/backup/scripts/backup_full.sh

#查看定時任務(wù)
crontab -l

2、定時清理7天以前的備份

  • 創(chuàng)建文件清理腳本
#創(chuàng)建腳本文件
vi /mysql/backup/scripts/backup_full_clean.sh

#寫入以下內(nèi)容
#!/bin/bash
find /mysql/backup/files -mtime +7 -name "*.gz" -exec rm -rf {} \;

  • 創(chuàng)建定時清理任務(wù)
#添加定時任務(wù)
crontab -e

#每天凌晨1點執(zhí)行
00 1 * * * sh /mysql/backup/scripts/backup_full_clean.sh

#查看定時任務(wù)
crontab -l

四、備注

1、crontab命令示例

命令 說明
* * * * * command 每1分鐘執(zhí)行一次command
30 * * * * command 每30分鐘執(zhí)行一次command
3,59 * * * * myCommand 每小時的第3和第59分鐘執(zhí)行
3,59 9-18 * * * myCommand 在上午9點到18點的第3和第59分鐘執(zhí)行
3,59 9-18 */2 * * myCommand 每隔兩天的上午9點到18點的第3和第59分鐘執(zhí)行
3,59 9-18 * * 1 myCommand 每周一上午9點到18點的第3和第59分鐘執(zhí)行

2、附錄


本文由 ken.io 創(chuàng)作,采用CC BY 3.0 CN協(xié)議 進行許可。 可自由轉(zhuǎn)載、引用、甚至修改,但需署名作者且注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容