MYSQL的mysqldump+binlog備份
MySQL所使用的 SQL 語言是用於訪問數據庫的最常用標準化語言。MySQL 軟件采用了雙授權政策,分為社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站數據庫。
由於其社區版的性能卓越,搭配PHP和Apache可組成良好的開發環境。
自我感覺數據庫的存亡代表了一個公司的命脈,數據庫GG(game over)了哪一個公司估計也差不多了。所以數據的備份才尤其的重要。目前數據庫的備份有三種;熱備,冷備,溫備。
按照方式劃分的三種備份方式:
1.熱備:在數據庫可讀可寫的情況下進行備份,沒有影響
2.冷備:在數據庫停止的情況下進行備份
3.溫備:在數據庫不可寫的情況下備份 #需要一個全局讀鎖來保持數據的一致性 。
備份形式又分為兩種:物理備份和邏輯備份。
物理備份:直接復制數據文件
優點:無需額外的工具,直接拷貝恢復直接復制文件即可
缺點:與儲存引擎有關,跨平臺能力較弱
邏輯備份:從數據庫中導出數據另存而進行的備份
優點:能使用編輯器處理,恢復簡單,能基於網絡恢復,有助於避免數據損壞
缺點:備份文件較大,備份較慢,無法保證浮點數的精度,使用邏輯備份數據回復後,還需要手動重建索引,十分消耗cpu資源。
數據的備份類型大致三種:1.完全備份#把整個數據庫都備份一份 2.增量備份#只備份增加的某些數據 3.差異備份
經常用的備份方式有三種:一般是由某兩種類型結合而成的。
1.mysqldump+binlog #完全備份加上增量備份
2.xtrabackup
3.lvm快照+增量備份
現在實現一個企業經常用備份方式,mysqldump+binlog!
實現這個備份需要吧二進制日誌功能打開,在/etc/my.cnf文件內配置。
指定文件名(.log 後綴會省略 在/var/lib/mysql/下有個bin.000001)
mysqldump是mariadb自帶的命令binlog是二進制備份方式,這可形成一個完整的備份。究竟怎麽做呢,我們一起來看看
1.首先創建一個專門放日誌備份的目錄:#我會創建庫表代表數據!
2.進行完全備份:#相關mysqldump命令可以mysqldump --help來查看
#mysqldump --all-database所有的庫 --locak-all-tables鎖表(防止寫)
3.現在往數據庫中插入數據,表示增量!show master status;查看Position值(此值也可以用作主從復制)
插入數據後的數值
4.指定開啟二進制日誌時指定的文件(每flush logs一次二進制日誌重重新記錄一個新的文件)所以現在是bin.000010這個文件,show master status;也會顯示當前所使用的文件名。
#這時候差不多就完成了 !!!但是!!!一般情況,數據庫是在使用中突然中斷或服務關閉,當時你是不可能做備份的,所以上一次做備份的時間到數據庫掛掉的時間內這段數據是沒有備份的!現在插入數據在把數據庫刪掉,模擬情況。
因為數據庫的內容都是在mysql/下以文件或目錄形式存在的,直接把shuju這個數據庫刪掉,則shuju這個數據庫也不存在了。
5.這個時候最重要的是保護沒有備份的最後那些數據。(也就是上次增量備份完後來加的數據,二進制日誌文件還是存在的)
首先show master status;#查看這時候的position值,之後執行mysqlbinlog命令從上次的436到這次查看的值備份。查看值的我就不截圖了。
6.這時候在找一臺沒有數據的機器恢復所有的數據,也就完成了恢復數據。
沒恢復數據之前
第一次插入的數據,第二次增量的數據和第三次增量的數據都恢復了。
二進制日誌尤為重要,所以數據保護要看中二進制日誌。
MYSQL的mysqldump+binlog備份