天天看點

Linux 下定時備份 MySQL 資料庫

前言

       由于項目需要,要求實作定時備份使用者資料的功能,以便資料庫出現意外時可以恢複資料。本項目為 SaaS 架構,我們會為每個新注冊的公司動态生成一個資料庫,用來存放該公司下的所有資料,是以,我們做資料備份的時候也需要動态備份該項目相關的所有資料庫。

實作思路

      經過一番查閱,決定采用 mysql 自帶的備份指令,配合 Linux 的定時任務,實作每天定時備份所有使用者資料。即編寫一個 shell 腳本,寫入備份指令,然後讓 Linux 去定時執行這個腳本。

實作步驟

1. 建立目錄 /root/mysqlbackup/shell/ ,并将 mysql_dump_script.sh 和 mysqlCron.cron 移動到該目錄下

2. 為 mysql_dump_script.sh 和 mysqlCron.cron 賦予可執行權限:

sudo chmod 777 XXX.XX
           

3. 添加定時任務,執行指令:

crontab mysqlCron.cron
           

4. 檢視定時任務是否成功建立:

crontab -l
           

注:

1. mysql_dump_script.sh 是執行資料庫備份腳本,如本例中每次執行會導出所有以 cloud_ 開頭的資料庫的所有結構和資料,

并存至 xx.sql 檔案,xx為執行時的日期。另外,預設儲存最近 31 份檔案,超出部分會從最原始的檔案開始删除,直至總量保持在 31。

2. mysqlCron.cron 是定時任務檔案

附上本文提及的腳本源碼:

mysql_dump_script.sh

#!/bin/bash
#儲存備份個數,備份31天資料
number=31
#備份儲存路徑
backup_dir=/root/mysqlbackup
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#使用者名
username=root
#密碼
password=1234
#如果檔案夾不存在則建立
if [ ! -d $backup_dir ]; 
then     
    mkdir -p $backup_dir; 
fi
#資料備份指令,導出所有資料結構和資料
mysql -e "show databases;" -u$username -p$password | grep "cloud_*" | xargs mysqldump -u$username -p$password --databases > $backup_dir/backup-$dd.sql
#記錄建立備份日志
echo "create $backup_dir/$backup-$dd.dupm" >> $backup_dir/log.txt
#找出需要删除的備份
delfile=`ls -l -crt  $backup_dir/*.sql | awk '{print $9 }' | head -1`
#判斷現在的備份數量是否大于$number
count=`ls -l -crt  $backup_dir/*.sql | awk '{print $9 }' | wc -l`
if [ $count -gt $number ]
then
  #删除最早生成的備份,隻保留number數量的備份
  rm $delfile
  #寫删除檔案日志
  echo "delete $delfile" >> $backup_dir/log.txt
fi

           

mysqlCron.cron

0 2 * * * /root/mysqlbackup/shell/mysql_dump_script.sh
           

繼續閱讀