實戰-MySQL定時全量備份(1)

zone發表於2018-08-03

閱讀本文大約需要 5 分鐘

實戰-MySQL定時全量備份(1)

實戰-MySQL定時增量備份(2)

實戰-將MySQL備份上傳到私有云(3)

概要

  • 引言

  • 全量備份

  • 恢復全量備份

  • 定時備份

引言

在產品上線之後,我們的資料是相當重要的,容不得半點閃失,應該做好萬全的準備,搞不好哪一天被黑客入侵或者惡意刪除,那就 gg 了。所以要對我們的線上資料庫定時做全量備份與增量備份。例如:每天做一次增量備份,每週做一次全量備份。以下所涉及的作業系統為 centos7 。

GitHub 地址:

https://github.com/zonezoen/MySQL_backup
複製程式碼

全量備份

/usr/bin/mysqldump -uroot -p123456  --lock-all-tables --flush-logs test > /home/backup.sql
複製程式碼

如上一段程式碼所示,其功能是將 test 資料庫全量備份。其中 MySQL 使用者名稱為:root 密碼為:123456備份的檔案路徑為:/home (當然這個路徑也是可以按照個人意願修改的。)備份的檔名為:backup.sql 引數 —flush-logs:使用一個新的日誌檔案來記錄接下來的日誌引數 —lock-all-tables:鎖定所有資料庫

以下為我使用的資料庫備份指令碼檔案:

指令碼檔案功能不是很複雜,首先是各種變數賦值。然後備份資料庫,接著是進入到備份檔案所在的目錄,再將備份檔案壓縮。其中倒數第三行是使用 nodejs 將備份的資料庫檔案上傳到七牛雲中,這裡就不在過多的闡述了,與本文主題不符,想看具體實現可以檢視 GitHub 原始碼。其中相應的變數改成自己的值即可拿過來使用。

#!/bin/bash
#在使用之前,請提前建立以下各個目錄
#獲取當前時間
date_now=$(date "+%Y%m%d-%H%M%S")
backUpFolder=/home/db/backup/mysql
username="root"
password="123456"
db_name="zone"
#定義備份檔名
fileName="${db_name}_${date_now}.sql"
#定義備份檔案目錄
backUpFileName="${backUpFolder}/${fileName}"
echo "starting backup mysql ${db_name} at ${date_now}."
/usr/bin/mysqldump -u${username} -p${password}  --lock-all-tables --flush-logs ${db_name} > ${backUpFileName}
#進入到備份檔案目錄
cd ${backUpFolder}
#壓縮備份檔案
tar zcvf ${fileName}.tar.gz ${fileName}

# use nodejs to upload backup file other place
#NODE_ENV=$backUpFolder@$backUpFileName node /home/tasks/upload.js
date_end=$(date "+%Y%m%d-%H%M%S")
echo "finish backup mysql database ${db_name} at ${date_end}."
複製程式碼

恢復全量備份

mysql -h localhost -uroot -p123456 < bakdup.sql
複製程式碼

或者

mysql> source /path/backup/bakdup.sql
複製程式碼

嗯,回覆全量備份也就這樣兩句,似乎不用多說什麼了。對了,在恢復全量備份之後,要將全量備份之後的增量備份也恢復回資料庫中。

定時備份

輸入如下命令,進入 crontab 定時任務編輯介面:

crontab -e
複製程式碼

新增如下命令,其意思為:每分鐘執行一次備份指令碼:

* * * * * sh /usr/your/path/mysqlBackup.sh
複製程式碼

每五分鐘執行 :

*/5 * * * * sh /usr/your/path/mysqlBackup.sh
複製程式碼

每小時執行:

0 * * * * sh /usr/your/path/mysqlBackup.sh
複製程式碼

每天執行:

0 0 * * * sh /usr/your/path/mysqlBackup.sh
複製程式碼

每週執行:

0 0 * * 0 sh /usr/your/path/mysqlBackup.sh
複製程式碼

每月執行:

0 0 1 * * sh /usr/your/path/mysqlBackup.sh
複製程式碼

每年執行:

0 0 1 1 * sh /usr/your/path/mysqlBackup.sh
複製程式碼

關於 crontab 命令的格式說明如下:

image

後面會有專門的一篇文章來寫寫 Linux 的定時任務 crontab。

ok,今天就分享這些知識,下一篇分享 MySQL 增量更新的知識,敬請期待!


關注微信公眾號,回覆【mysql資源】,獲取 mysql 效能優化高階視訊教程

image

相關文章