2018年5月28日這個日子已通過去20幾天了,那天發生的一切到如今回想一下都有些後怕。最近看了一篇文章裏面有一句話挺好,刪庫(數據庫損壞)只有兩條路能夠走,一是恢復,二是跑路。很明顯我選擇了第一條路,有一份幸運也有一份執着最終仍是把數據恢復了回來。爲何說「幸運」呢?由於rpm方式安裝的MySQL數據庫默認打開了binlog日誌,並且日誌文件被完整的保存了下來。mysql
雖然數據恢復了回來,可是我真心的不但願數據再次丟失了,由於下一次可能沒有那麼幸運。恢復數據只是在萬不得已的狀況下采起的補救措施,咱們應該把備份數據做爲平常維護的好習慣。程序員
數據備份是咱們使用計算機的同窗平常的工做。不只數據庫須要定時備份,計算機上面重要的文件也須要按期作備份,那咱們今天就來談談MySQL是怎樣進行備份的。sql
MySQL給咱們提供了一個實用的工具 mysqldump,使用該工具前要肯定MySQL服務已經啓動,那咱們就直接來上實例吧!shell
備份全部的數據庫數據庫
mysqldump -u數據庫帳號 -p數據庫密碼 > 導出的文件名centos
mysqldump -uroot -proot > mysql_all.sql服務器
備份某一個數據庫工具
mysqldump -u數據庫帳號 -p數據庫密碼 數據庫名 > 導出的文件名和路徑編碼
mysqldump -uroot -proot test > test.sqlcentos7
備份遠程服務器上面的某一個數據庫
mysqldump -h數據庫服務器地址 -u數據庫帳號 -p數據庫密碼 數據庫名 > 導出的文件名
mysqldump -h192.168.1.11 -uroot -proot test > test.sql
平常中我使用的備份命令
mysqldump -uroot -proot test --default-character-set=utf8 > test.sql
這裏我加了一個參數:--default-character-set=utf8,對於中國的程序員來講亂碼問題是咱們的必修課。爲了避免給數據或程序帶來亂碼的困惑,咱們確定會給程序設定統一的編碼方式。我一般使用的編碼爲UTF8,這裏咱們和數據庫的編碼保持一致便可。
既然咱們說到備份,數據還原是必不可少的,這時咱們用到了MySQL經常使用mysql工具。
數據庫還原
mysql -u數據庫帳號 -p數據庫密碼 數據庫名 < 導入的文件名和路徑 mysql -uroot -proot test < test.sql
平常中我使用的還原數據庫命令
mysql -uroot -proot test --default-character-set=utf8 < test.sql
咱們瞭解了數據庫備份及數據庫還原,這時出現了一個疑問? 備份一般是每隔一段時間都須要進行一次,數據增量較小的話一天一次,可是數據增量要是很大的話須要天天屢次,咱們不可能每次都是手動去備份,故而咱們會考慮有沒有一種方式是讓電腦定時幫咱們完成這個任務。
Linux服務器有一個定時任務工具:crontab,維基百科是這麼說的:crontab命令常見於Unix和類Unix的操做系統之中,用於設置週期性被執行的指令。該命令從標準輸入設備讀取指令,並將其存放於「crontab」文件中,以供以後讀取和執行。該詞來源於希臘語chronos(χρόνος),原意是時間。
那咱們就直接開始吧!
首先咱們來建立一個shell文件
touch mysql_backup.sh
打開文件的執行權限
chmod +x mysql_backup.sh
編輯該文件
sudo vi mysql_backup.sh
#!/bin/sh backupdir='/home/mysql' time=`date +%Y%m%d%H%M` mysqldump -uroot -proot test --default-character-set=utf8 > $backupdir/test_$time.sql
內容說明
設定定時任務
crontab -e
30 * * * * sh mysql_back.sh # 每30分鐘執行一次該命令
crontab的文件格式
分 時 日 月 周 要運行的命令
查看定時任務
crontab -l
定時任務控制(操做系統爲:centos6,服務的控制centos7是不同的噢)
service crond start # 開啓服務
service crond stop # 關閉服務
service crond restart # 重啓服務
寫到這裏數據庫備份恢復基本已經到一個段落了,作好數據備份是咱們每一位計算機使用者良好的習慣,能夠更好的避免數據丟失。但願咱們能把它看成一種責任。
本文所使用的操做系統及數據庫版本說明: