備份類型分為:
完全備份、增量備份、差異備份
熱備、溫備、冷備
邏輯備份、物理備份
每種類型區別:
增量備份:根據上一次備份的增量備份或完全備份備份
差異備份:根據上一次備份的完全
溫備:備份過程中只支持讀備份備份
熱備:備份過程中支持讀寫
冷備:停服務備份
邏輯備份:schema和數據存儲在一起,巨大的sql語句、單個巨大的備份文件,恢復備份較慢。優點可以還原于任何數據庫引擎中(當數據文件達到G級別不建議使用)。
物理備份:相當于直接復制數據文件、備份速度較快恢復也較快,但只支持還原于相同數據庫引擎中。
備份工具:
mysqldump:完全備份+備份2進制文件完成增量備份(熱備是靠巨大的事務完成,數據量較大時速度慢,不建議使用) 邏輯備份。
lvm2:使用lvm快照功能實現備份,缺點需要鎖表后執行快照功能以實現備份 物理備份。
xtrabackup:完全備份+增量備份,數據文件G級別以上建議使用此方法 物理備份。
…還有很多。
任何備份方式均不能實現時間點還原,因此,如果需要基于時間點還原需要配合二進制日志文件執行。
這里只演示用mysqldump和xtrabackup實現備份以及還原。
這里可以看到我有一個名為hellodb的庫,庫里面有一張students表,我就備份此表好了
-E:備份指定庫的事件調度器
-R:備份存儲過程和存儲函數
–triggers:備份觸發器
–master-data=2:指定此事件記載的2進制文件開始位置,及哪個文件
–flush-log:滾動一下日志,以方便用二進制日志文件進行時間點還原
–single-transaction:mysqldump熱備時需要執行此選項,備份是啟用一個大的事務完成的備份(在常用的兩種數據庫引擎中,myisam僅支持溫備,innodb支持熱備)
–databases:指定備份哪一個數據庫
還實際工作中,我們還應該備份一下數據庫的配置文件
接著我們就可以看一下我們備份出來的數據了
這里箭頭所指出很重要,指明了此次備份完成后,二進制文件的截止事件位置,可以看到是一個新文件,而且處于剛開始的位置,這也是我們之前為什么要執行–flush-log的原因了,到時候我們根據時間點還原,不用去從哪個文件中間重讀一遍。(當然這一切得先開啟二進制文件)
現在我們在去刪幾條數據
我已經刪了stuid為20-25之間的,也確實少了,現在假設存放數據的磁盤損壞了,并且二進制日志我們保存在其他位置(我們單獨將二進制文件復制出來。)
我刪除了數據目錄下的所有文件(二進制文件已經備份出來了哦~)
接著我們重啟mariadb,并且恢復備份的數據
可以看到我們之前備份出來的確實已經還原了,但連我們之前刪除的stuid為20-25的也恢復出來了,接著我們繼續做時間點還原
–start-positon=245: 指明開始重讀的時間,之前已經提過了
另外我是CP二進制日志文件出來再TMP目錄下的,實際應用過程中記得把二進制文件和數據文件分磁盤放?。。。。。。。。。硗舛M制文件實際上都是寫sql語句,以后如果需要修改什么可以直接修改在恢復),mysqldump的增量備份只有靠備份二進制文件來完成,這里就不演示了,已經演示了二進制日志還原了,無非就是每天flush-log一次然后直接CP命令復制出來即可
接著來xtrabackup
xtrabackup 是percona公司開源的項目,并沒有收錄進epel源中,需要在官網自行下載 https://www.percona.com/
發現在centos7的epel源中有一個測試版本??? 不過我已經在官網下了并且安裝上了,就不管他了。
接著把數據庫恢復最先的狀態
就在此狀態下,我在此備份一次
直接–databases指明備份哪個庫,到哪個位置即可
最后我們看見completed ok!就代表成功了~ (另外這里提一句使用innobackupex,執行任何備份、恢復操作在結束處都應該見到complete ok,即代表成功)
接著我們就在來改動一下并進行增量備份
新建了一張表,并且插入了兩條數據,接著去進行增量備份吧
–incremental:指明這次增量備份
–incremental-basedir:指明以那一次為基礎的增量
另外可以在備份出來的目錄里面看見type 一個為FULL 一個為increment (并且xtrabackup是根據名為LSN的序列號進行增量備份的,可以看見上圖兩個備份是完全接上的)
接著就可以去刪數據目錄了
先給完全備份進行事務的提交,這里只做了提交,因為我們后面還有增量備份,不一定需要回滾,說不定下個增量備份里面未提交的事務就已經提交了喲~ (另外此項操作其實可以不做,上問就提到過了xtrabackup屬于物理備份,直接備份出來了文件,mariadb在啟動時會自動進行事務的回滾和提交)
接著需要把增量備份給他重建只完全備份上!
–incremental-dir:指明增量備份是哪一個,其他選項和上面介紹的一樣
查看完全備份的checkpoints文件,可以看到最后記錄的lsn號碼已經是增量備份的了,接著可以拿去還原了~
在次提醒 以上所有操作 均需在末尾見到“complete ok” 即代表成功
–copy-back:代表還原,要注意的是指明的目錄為完全備份的目錄,并且同樣要看到complete ok
這里需要注意!! 在還原之前確定數據目錄必須為空?。?!否則還原報錯, 還原過后注意權限是否正常,否則啟動數據庫報錯!?。?!
整個增量備份就是這樣 ~ 完成了,另外如果需要進行時間點還原,仍然依賴二進制文件,步驟同上面的一樣 就不演示了,至此備份恢復就到這
——————————————————————————————————————————————————————————————————————————————–
mysql主從
主服務器工作流程:
主服務器的dump線程負責接收從服務器的二進制文件請求并發送給對方
從服務器工作流程
從服務器的I/O線程負責向主服務器請求二進制文件,并記錄與中繼日志文件中
從服務器的SQL線程負責讀取中繼文件中的sql語句,進行重放,以此達到數據同步的效果(上面備份的時候已經提到過了二進制文件記錄的是所有sql語句,所以從服務器拿來過后進行重新運行一遍就OK了~)
另外主從服務器的server id 不可重復,二進制文件中會標明serverid mysql的工作機制遇到同樣的serverid 是不會進行重放的,以此避免循環復制
了解完這些過后配置就僅僅只有幾步就可完成
主服務器啟用二進制文件
標明serverid
提供一個有復制權限的賬號
從服務器啟用中繼日志
標明serverid
使用有復制權限的賬號
啟動復制線程
主服務器my.cfg配置
從服務器my.cfg配置
接著就可以繼續了,接著授權一個賬號
grant replication client,replication slave on *.* to repli@192.168.20.105 identified by ‘111’;
只授予復制客戶端和從服務器請求,并只給予105這個ip 因為我的從服務器是此IP
changemaster 指明從服務器是哪一個 其他選項挺好理解的。
master_log_file:指明從主服務哪個二進制文件開始同步
master_log_pos:指明從此文件哪個position開始同步
在主服務器授權完后使用 show master status 看一看,
啟動線程變查看是否啟動,接著我們就可以去主服務器創建數據庫查看是否能同步了~至此主從也完了~
但是需要思考客戶端進行寫操作過后是否需要從服務器同步完成過后,在響應客戶端,不然萬一客戶端進行讀操作時被前端調度到了從服務器,從服務器還未同步,客戶端訪問之前提交的操作發現居然沒有,這就很尷尬啊。
這個問題其實只需要裝2個插件就能解決
semisync_master.so
semisync_slave.so
一個是主服務器安裝,一個是從服務器安裝,這里我是使用的yum安裝,自行就有這兩個插件
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
分別在主從上安裝兩個插件
安裝完插件過后會看到變量中會多了幾個參數,接著我們只需要分別在主從上把插件功能打開~如果需要設置等待的超時時長修改就可以了,記得先在從服務器停掉同步線程在進行
一切做完以后,我們可以查看具體同步進行的數據了~ 隨便新建幾個數據庫
可以看到客戶端有一個~ 平均同步時間875毫秒~ 同步總耗時3503,同步次數4次..等等~~~
雙主也就是同時啟用中繼日志和二進制日志,并且同時指定對方為主服務器,就行了。但是雙主會帶來很多問題,例如自增長的字段混亂,如果恰好遇到同時插入使用了同樣的自增號碼,并且根本沒有解決到寫的負載。。等等等
原創文章,作者:N24_Ghost,如若轉載,請注明出處:http://www.www58058.com/70324
總結的很好,思路清晰,加油!