實戰-MySQL定時全量備份(1)
閱讀本文大約需要 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/mysqlusername="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.jsdate_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 增量更新的知識,敬請期待!