Mysql數(shù)據(jù)庫備份與恢復(fù)
數(shù)據(jù)庫備份對于業(yè)務(wù)型系統(tǒng)是非常必要的,像系統(tǒng)崩潰、硬盤損壞、硬盤壞道、人為的誤刪、誤改數(shù)據(jù)庫等,都會造成災(zāi)難性的后果,所以,數(shù)據(jù)庫備份是非常必要的。
Mysql自身提供了一系列的數(shù)據(jù)庫備份策略,方便我們根據(jù)需要選擇適合系統(tǒng)的備份策略
Mysql 5.7.20-log ,win10
1.使用MySQL Enterprise Backup進行熱備份,這是Mysql為Mysql企業(yè)版進行開發(fā)的專門用于備份的產(chǎn)品,他可以備份整個mysql實例,也可以根據(jù)選擇的備份特定的數(shù)據(jù)庫,或者數(shù)據(jù)庫中的特定表,其原理即物理的復(fù)寫數(shù)據(jù)庫的所有數(shù)據(jù)文件,速度快,此處不便演示,需要購買mysql相關(guān)服務(wù)才可使用。
2.使用mysqldump進行熱備份,對于Myisam引擎,可配合lock-all-tables(鎖表)來保證數(shù)據(jù)庫的數(shù)據(jù)的準確性,生成對應(yīng)的sql文件,下面分別進行演示
截圖分別演示了MyISAM的數(shù)據(jù)備份
1>第一條sql是對整個Mysql實例的全量備份
2>第二條sql是對test數(shù)據(jù)庫的全量備份
3>第二條sql是對test數(shù)據(jù)庫中user表的全量備份
同樣的,對于InnoDB,把參數(shù)lock-all-tables 替換為single-transaction即可在熱備份的時候保證數(shù)據(jù)庫的事務(wù)性
3.制作分隔的文本文件備份(熱備份,針對表中的數(shù)據(jù))
導(dǎo)出表中的數(shù)據(jù)到文件中,目前支持.txt,.xls,.xlsx,csv
注意:mysql 5.7以后,配置文件添加了參數(shù)secure-file-priv,若為NULL,則不允許文件的導(dǎo)入導(dǎo)出,若制定了文件目錄,則會導(dǎo)入到制定的文件夾下。若設(shè)置為/,可導(dǎo)入到任意目錄,' '同 / . 一定要確保當(dāng)前用戶擁有制定文件夾的寫的權(quán)限,否則導(dǎo)出失敗。
4.使用Binlog進行增量備份
前提是binlog必須先開啟,即修改mysql的配置文件,為log-bin指定目錄即可。
例如:log-bin=C:/ProgramDataMySQLMySQL Server 5.7mysql-bin
使用binlog備份,同樣是copy指定目錄下的所有binlog 文件即可,這樣你就可以根據(jù)時間點或者log文件進行選擇性的恢復(fù)。
使用FLUSH LOGS即更新日志,mysql會自動創(chuàng)建一個新的binlog文件
mysqldump --flush-logs同F(xiàn)LUSH LOGS
5.使用主從復(fù)制從服務(wù)器的master.info和relay log備份
6.除此之外,針對MySIAM引擎,mysql本身提供了修復(fù)崩潰table的能力,在你使用備份進行數(shù)據(jù)庫恢復(fù)之前,不防先使用 REPAIR TABLE 或者 myisamchk -r ,它能解決99.9%的case.
總結(jié):一般大企業(yè)都會選擇Mysql 企業(yè)版的備份產(chǎn)品,但也不排除有些公司在2,3,4進行的加強以支持定制化。數(shù)據(jù)庫備份無非文件備份(binlog方式)和邏輯備份(2,3熱備份)。大部分公司都會寫一個或多個定時腳本,對重要的數(shù)據(jù)庫文件和熱點數(shù)據(jù)進行定期的備份。
本文部分資料來自于Mysql官方5.7參考文檔,鏈接:
https://dev.mysql.com/doc/refman/5.7/en/backup-methods.html。
下一篇:MySQL數(shù)據(jù)庫備份與恢復(fù)策略:Java實踐指南