閱讀本文大約需要 5 分鐘
概要
-
引言
-
全量備份
-
恢復全量備份
-
定時備份
引言
在產品上線之後,我們的資料是相當重要的,容不得半點閃失,應該做好萬全的準備,搞不好哪一天被黑客入侵或者惡意刪除,那就 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 命令的格式說明如下:
後面會有專門的一篇文章來寫寫 Linux 的定時任務 crontab。
ok,今天就分享這些知識,下一篇分享 MySQL 增量更新的知識,敬請期待!