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