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

閱讀本文大約須要 5 分鐘node

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

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

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

概要

  • 引言sql

  • 全量備份數據庫

  • 恢復全量備份centos

  • 定時備份性能優化

引言

在產品上線以後,咱們的數據是至關重要的,容不得半點閃失,應該作好萬全的準備,搞很差哪一天被黑客入侵或者惡意刪除,那就 gg 了。因此要對咱們的線上數據庫定時作全量備份與增量備份。例如:天天作一次增量備份,每週作一次全量備份。如下所涉及的操做系統爲 centos7 。bash

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
相關文章
相關標籤/搜索