1. 程式人生 > 其它 >Centos7中MySQL資料庫使用mysqldump進行每日自動備份

Centos7中MySQL資料庫使用mysqldump進行每日自動備份

資料庫的備份,對於生產環境來說尤為重要,資料庫的備份分為物理備份和邏輯備份。我們將使用mysqldump命令進行資料備份。使用自動任務進行每日備份。

一、需求說明:

資料庫的備份,對於生產環境來說尤為重要,資料庫的備份分為物理備份和邏輯備份。

物理備份:使用相關的複製命令直接將資料庫的資料目錄中的資料複製一份貨多分副本,常使用工具:XtraBackup。

邏輯備份:使用mysql自帶的mysqldump命令把需要備份的資料以sql語句的形式儲存起來。

下邊我們將使用mysqldump命令進行資料備份。使用自動任務進行每日備份。

二、執行檔案編寫:

1、建立資料夾,執行的sh檔案和資料庫的備份檔案都存在這個資料夾下

mkdir /usr/local/mysqlDataBackup
cd /usr/local/mysqlDataBackup

2、建立sh檔案並編寫shell指令碼:

backup.sh

單資料庫指令碼:

#!/bin/bash
#This scripts is for auto backup databases
#create by weijb at 2021-07-28
#delete data from 7 day before

DATAdelete=‘date +%F -d "-7 day"‘
rm -rf /usr/local/mysqlDataBackup/*_${DATAdelete}.sql.gz

MYSQL_CMD=/usr/bin/mysqldump
MYSQL_USER=賬號
MYSQL_PWD=密碼
DATA=‘date +%F‘
DBname=test_db

${MYSQL_CMD} -u${MYSQL_USER} -p${MYSQL_PWD} --compact -B ${DBname} | gzip >/usr/local/mysqlDataBackup/${DBname}_${DATA}.sql.gz

解析:

  (1)刪除7天前的備份資料,節省空間:

    DATAdelete=‘date +%F -d "-7 day"‘ 當前時間前7天的日期

rm -rf /usr/local/mysqlDataBackup/*_${DATAdelete}.sql.gz 刪除前7天的備份資料,節省空間,只保留最新的7天資料

  (2)定義變數:  

    MYSQL_CMD=/usr/bin/mysqldump    mysql自帶的mysqldump命令所在的位置
    MYSQL_USER=賬號                  mysql連線的賬號
    MYSQL_PWD=密碼            mysql連線的密碼
    DATA=‘date +%F‘                  獲取當前日期,%F 表示格式:%Y-%m-%d 例如:2021-07-28
    DBname=test_db                   需要備份的資料庫名,當前的資料庫名為:test_db

  (3)執行備份命令: 

    ${MYSQL_CMD} -u${MYSQL_USER} -p${MYSQL_PWD} --compact -B ${DBname} | gzip >/usr/local/mysqlDataBackup/${DBname}_${DATA}.sql.gz
    --compact 優化輸出資訊
    -B 包含建庫的語句
    gzip 壓縮備份,減少備份的檔案大小
    usr/local/mysqlDataBackup/${DBname}_${DATA}.sql.gz 備份檔案儲存的路徑以及名字

多資料庫備份:

#!/bin/bash
#This scripts is for auto backup databases
#create by weijb at 2021-07-28
#delete data from 7 day before
DATAdelete
=‘date +%F -d "-7 day"‘ rm -rf /usr/local/mysqlDataBackup/*_${DATAdelete}.sql.gz MYSQL_CMD=/usr/bin/mysqldump MYSQL_USER=賬號 MYSQL_PWD=密碼 DATA=‘date +%F‘ DBname=‘ mysql -u${MYSQL_USER} -p${MYSQL_PWD} -e "show databases;" | sed '1,5d'‘ for DBname in ${DBname} do ${MYSQL_CMD} -u${MYSQL_USER} -p${MYSQL_PWD} --compact -B ${DBname} | gzip >/usr/local/mysqlDataBackup/${DBname}_${DATA}.sql.gz done

解析:

  (1) 擷取需要備份的資料庫

  -e "show databases;" | sed '1,5d'‘  顯示所有的資料庫,並擷取mysql自帶的information_schema、mysql、performance_schema、sys意外的所有資料庫。

  (2) 其他的和單庫備份相同

3、驗證指令碼是否編寫成功:

(1)指令碼檔案授權:

cd /usr/local/mysqlDataBackup

chmod +x backup.sh

(2) 執行指令碼:

sh backup.sh
/usr/local/mysqlDataBackup 下生成檔案說明編寫成功。

4、編寫自動任務:

每天凌晨1點對資料庫進行備份:
crontab -e

輸入i進行編輯:

00 01 * * * /usr/local/mysqlDataBackup/backup.sh

使用esc退出檔案編輯,輸入 :wq 儲存並退出。

查詢任務是否設定成功:

crontab -l

重啟crontab服務:

service crond restart

至此,mysql的自動任務指令碼備份資料庫到此完成。