MySQL備份腳本,應該這麼寫

前言:mysql

數據庫備份的重要性不言而喻,特別是在生產環境,任何數據的丟失均可能產生嚴重的後果。因此,不管什麼環境,咱們都應該有相應的備份策略來定時備份數據庫。在 MySQL 中,比較經常使用的邏輯備份工具是 mysqldump,本篇文章將介紹 MySQL 定時備份的方法。sql

1.制定合適的備份策略

對於不一樣的數據庫環境,咱們應該考慮不一樣的備份策略。制定備份策略時,應考慮如下幾點因素:shell

  • 物理備份仍是邏輯備份。這個能夠由數據庫大小決定,好比說小於100G用邏輯備份,大於100G用物理備份。
  • 備份文件保留時間。這個能夠由磁盤大小決定,通常至少保留7天。
  • 備份執行時間。通常放在業務低峯期,好比凌晨執行備份操做。
  • 備份間隔時間。通常推薦一天一備,若是系統不過重要,備份間隔也能夠延長。
  • 是否有從庫。有從庫的話,推薦放在從庫上備份,減少對主庫的壓力。

2.Linux系統備份腳本

Linux 系統下,咱們能夠利用 crontab 定時任務來執行備份腳本,若是你你對 crontab 還不瞭解,能夠參考如下介紹快速學習下。數據庫

crontab是一個命令,常見於Unix和類Unix的操做系統之中,用於設置週期性被執行的指令。

格式:
*  *  *  *  * command
分 時 日 月 周  命令

第1列表示分鐘1~59 每分鐘用*或者 */1表示
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)
第6列要運行的命令

crontab -e 編輯該用戶下的定時任務設置
crontab -l 列出該用戶下的全部定時任務

下面咱們來正式書寫備份腳本,廢話很少說,先給出腳本模板:bash

#!/bin/bash
# -------------------------------------------------------------------------------
# FileName:    mysql_backup.sh 
# Describe:    Used for database backup
# Revision:    1.0
# Date:        2020/08/11
# Author:      wang

# 設置mysql的登陸用戶名和密碼(根據實際狀況填寫)
mysql_user = "root"
mysql_password = "yourpassword"
mysql_host = "localhost"
mysql_port = "3306"
backup_dir = /data/mysql_backup

dt=date +'%Y%m%d_%H%M'
echo "Backup Begin Date:" $(date +"%Y-%m-%d %H:%M:%S")

# 備份所有數據庫
mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -R -E --all-databases --single-transaction > $backup_dir/mysql_backup_$dt.sql

find $backup_dir -mtime +7 -type f -name '*.sql' -exec rm -rf {} \;
echo "Backup Succeed Date:" $(date +"%Y-%m-%d %H:%M:%S")

以上腳本可根據實際狀況修改,好比備份某一個庫、保留時間變動等等。腳本寫完後要注意調試,調試完成後就能夠部署了,好比咱們打算天天凌晨2點進行備份,則能夠這樣設置定時任務。工具

# 注意腳本執行權限及修改腳本路徑
00 02 * * * sh /root/scripts/mysql_backup.sh > /root/scripts/mysql_backup.log 2>&1

3.Windows系統備份腳本

Windows 系統備份腳本也是相似的,只不過變成了bat腳本,須要設置計劃任務來定時執行。好比咱們能夠在E盤下建立一個 MySQLdata_Bak 目錄,此目錄下建立 mysql_backup 目錄存放備份文件,mysql_bak.bat 是備份腳本,腳本內容以下(自動刪除7天前的備份文件):學習

rem auther:wang
rem date:20200811
rem ******MySQL backup start********
@echo off
forfiles /p "E:\MySQLdata_Bak\mysql_backup" /m backup_*.sql -d -7 /c "cmd /c del /f @path"
set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%"
"E:\mysql5.7.23\bin\mysqldump" -uroot -p123456 -P3306 --default-character-set=utf8 -R -E --single-transaction  --all-databases > "E:\MySQLdata_Bak\mysql_backup\backup_%Ymd%.sql"
@echo on
rem ******MySQL backup end********

以上腳本僅供參考,能夠根據本身的環境稍加改動。一樣的,腳本調試完成後就能夠加入計劃任務了,若是你對 Windows 計劃任務還不瞭解,能夠百度下,也是比較方便簡單的。spa

4.備份可用性校驗

除了備份,很是重要的一件事情就是驗證備份數據的可用性。想象一下,當你須要進行數據恢復的時候,突然發現過去的備份數據都是無效的,那得有多難受。不少朋友在寫好備份腳本加到定時任務後,只是檢查下定時任務有執行,備份目錄有文件就再也不關注了,每每到了須要使用備份文件的時候才發現備份數據有問題。操作系統

目前對於備份文件的數據校驗沒有很是方便的辦法,用的比較多的仍是定時把備份文件拉出來作備份恢復演練,例如一個月作一次備份恢復演練就能夠有效提升備份文件可用性,內心也踏實。調試

因此,千萬不要覺得有了備份就萬無一失了,平時也要多檢查備份腳本執行是否正確,生產的備份腳本內容是否可用,最好能夠按期作恢復演練。

總結:

本篇文章主要分享了 Linux 系統及 Windows 系統下的 MySQL 定時備份腳本,腳本內容比較簡單明瞭,功能並不複雜,若是你有其餘備份需求,能夠在此基礎上修改完善。若是這篇文章對你有所幫助的話,請多多分享轉發。

wx_blog.png

相關文章
相關標籤/搜索