日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

MySQL復(fù)制(一) --- 二進(jìn)制日志干什么的

系統(tǒng) 3141 0

與小站點(diǎn)相比,大型站點(diǎn)的數(shù)據(jù)庫管理員,需要提前做好以下的事情:

  • 提供災(zāi)難發(fā)生時核心業(yè)務(wù)數(shù)據(jù)的恢復(fù)計劃。理論上這個過程至少需要執(zhí)行一次。
  • 通過采集大量用戶數(shù)據(jù)并監(jiān)控網(wǎng)站各節(jié)點(diǎn)的負(fù)載,提供優(yōu)化計劃
  • 當(dāng)用戶數(shù)量急劇增長時的快速橫向擴(kuò)展計劃
對于所有這些事情,提前計劃并準(zhǔn)備好必要時的快速應(yīng)對是很重要的。

?

為了保證站點(diǎn)可響應(yīng)和可用性,需要做兩件事:系統(tǒng)的數(shù)據(jù)備份和冗余。備份可以將節(jié)點(diǎn)恢復(fù)到它崩潰之前的狀態(tài),備份根據(jù)需求有幾種比如及時恢復(fù)(PITR:point-in-time-recovery),在線備份等等;而冗余則保證即使在一個或更多節(jié)點(diǎn)停止服務(wù)的情況下,站點(diǎn)仍能繼續(xù)運(yùn)行,備份一般通過硬件副本來實(shí)現(xiàn),讓幾個實(shí)例并行運(yùn)行,并通過復(fù)制在幾個機(jī)器上保存相同數(shù)據(jù)的多個可用副本。復(fù)制的主要應(yīng)用場景:1)針對高讀寫比的,scale out;2)添加冗余保證高可用性,比如雙主配置(dual-master setup)。

?

二進(jìn)制日志(binlog)

復(fù)制過程需要二進(jìn)制日志。二進(jìn)制日志的目的是記錄數(shù)據(jù)庫中表的更改,然后用于復(fù)制和PITR,另外少數(shù)審計情況下也會用到。

傳統(tǒng)意義上說,MySQL復(fù)制記錄了產(chǎn)生變化的SQL語句,稱為基于語句的復(fù)制(statement-based replication)。基于語句的復(fù)制的缺點(diǎn)是無法保證所有語句都正確復(fù)制。所以在5.1版本中,MySQL還提供了基于行的復(fù)制(row-based replication)。

查看二進(jìn)制日志:

      
        #
      
      
         強(qiáng)制把緩存的東西刷到LOGS中,并產(chǎn)生一個Rotate事件寫入binlog中,后面的寫入會寫到新的binlog中
      
      
        
FLUSH LOGS;

# 正常使用很久的DB不建議使用這個命令,需要加參數(shù),指定具體的binlog文件名 【IN 'xxxx'】
SHOW BINLOG EVENTS\G

二進(jìn)制日志中事件所包含的字段:

      Event_type: 比如Format_desc, Query, Rotate
      
Server_id : 創(chuàng)建事件的服務(wù)器id
Log_name : 存儲事件的文件名,一個事件只能存儲在一個文件中
Pos : 事件在文件中的開始位置,及事件的第一個字節(jié)
End_log_pos:事件在文件中的結(jié)束位置,也就是下一個事件的開始位置
Info : 具體事件的信息,Query的時候就是SQL語句

二進(jìn)制日志的結(jié)構(gòu)和內(nèi)容:

二進(jìn)制日志不是一個的單獨(dú)的文件,它包括一組存儲實(shí)際內(nèi)容的二進(jìn)制日志文件和一個二進(jìn)制日志索引文件。每個二進(jìn)制日志文件都以format description event開始,以rotate event結(jié)束。rotate event包含下一個二進(jìn)制日志文件的名稱,以告知二進(jìn)制日志繼續(xù)寫入哪個文件。因此FLUSH LOGS的時候會新建一個新binlog文件。?

獲取當(dāng)前正在寫入的是哪一個二進(jìn)制日志文件:

      SHOW MASTER STATUS\G
    

RESET MASTER 命令刪除了所有的二進(jìn)制日志文件并清空了二進(jìn)制日志索引文件。 RESET SLAVE 命令刪除了Slave復(fù)制所用的所有文件,重新開始。

CHANGE MASTER TO 命令用于改變slave連接master的一些參數(shù),其中就包括slave讀取master二進(jìn)制日志文件的參數(shù)。比如使用MASTER_LOG_FILE和MASTER_LOG_POS來指定master開始發(fā)送事件的binlog位置。

如何建立新Slave

      
        1
      
      :配置新的Slave
      
2 :備份Master(或者備份已經(jīng)復(fù)制了Master的Slave)
3 :接下該備份相應(yīng)的binlog位置
4 :在新Slave上恢復(fù)備份
5 :配置Slave從這個binlog位置開始復(fù)制

區(qū)別就在于第二步,一種是直接從Master進(jìn)行備份,一種是通過現(xiàn)有Slave備份,下面分別介紹兩種。

1:克隆Master:

      
        #
      
      
         刷新所有的表并鎖定數(shù)據(jù)庫,防止在檢查binlog位置之前數(shù)據(jù)庫發(fā)生改變
      
      
        
FLUSH TABLES WITH READ LOCK

# 獲取當(dāng)前的binlog文件和pos
SHOW MASTER STATUS\G

# 備份master
mysqldump --all-databases --host=master- 1 >backup.sql

# 解鎖
UNLOCK TABLES;

# 在slave上恢復(fù)備份
mysql --host=slave- 1 <backup.sql

# 配置slave
CHANGE MASTER TO
MASTER_HOST = ' master-1 ' ,
MASTER_PORT = 3306 ,
MASTER_USER = ' slave-1 ' ,
MASTER_PASSWORD = ' xxxx ' ,
MASTER_LOG_FILE = ' master-bin.000042 ' ,
MASTER_LOG_POS = 546552 ;

# 啟動slave
START SLAVE;

其實(shí)mysqldump命令提供了 master_data 選項,自動把MASTER_LOG_FILE和MASTER_LOG_POS信息dump到backup.sql中

另外:FLUSH TABLES WITH READ LOCK對于InnoDB是不安全的,因為雖然會鎖表,不會產(chǎn)生新事務(wù),但是后臺仍然有一些活動在繼續(xù)進(jìn)行。

所以安全的創(chuàng)建InnoDB數(shù)據(jù)表的備份可以使用下面的方法。

      
        1
      
      :關(guān)閉服務(wù)器,然后復(fù)制文件。如果數(shù)據(jù)庫很大 ,最好采取這種方法,因為這時使用mysqldump進(jìn)行數(shù)據(jù)恢復(fù)會很慢
      

2 :執(zhí)行FLUSH TABLES WITH READ LOCK之后,使用mysqldump

3 :執(zhí)行FLUSH TABLES WITH READ LOCK之后,使用快照的方法,比如LVM(Linux),ZFS(Solaris)快照

?

2:克隆Slave:

      
        #
      
      
         防止出現(xiàn)不一致的備份映像,備份Slave之前需要先停止replication
      
      
        
STOP SLAVE;

# 確定從哪里開始復(fù)制,注意Relay_Master_Log_File和Exec_Master_Log_Pos
SHOW SLAVE STATUS\G

# 配置新的slave,指向master
CHANGE MASTER TO
MASTER_HOST = ' master-1 ' ,
MASTER_PORT = 3306 ,
MASTER_USER = ' slave-1 ' ,
MASTER_PASSWORD = ' xxxx ' ,
MASTER_LOG_FILE = ' master-bin.000042 ' ,
MASTER_LOG_POS = 546632 ;

# 啟動新的slave
START SLAVE

?

---待續(xù)

MySQL復(fù)制(一) --- 二進(jìn)制日志干什么的


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 灵寿县| 文安县| 清徐县| 四子王旗| 交城县| 渝北区| 太和县| 赣州市| 石台县| 封丘县| 来安县| 丹江口市| 镇远县| 龙山县| 平阴县| 桑日县| 洛阳市| 芮城县| 普定县| 土默特右旗| 诏安县| 昆明市| 天祝| 长汀县| 华宁县| 西青区| 双峰县| 团风县| 宣汉县| 石城县| 嫩江县| 永昌县| 任丘市| 高密市| 榆树市| 会东县| 南宁市| 新泰市| 马公市| 贺兰县| 高陵县|