1. 程式人生 > >實戰-MySQL定時全量備份(1)

實戰-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 命令的格式說明如下:

image

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

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

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

image