MySql日誌詳解及應用實戰

1.mysql主從有主-從、主-主形式mysql

其中主從形式,主負責寫入,從負責讀取,主數據庫若是掛掉則將另外一臺從數據庫提高爲主,更換主庫速度較慢sql

主主形式用於搜索引擎,與主從的區別爲,當有數據寫入時,若是寫入數據庫A成功則默認A爲主庫,一旦寫入A異常則當即更換B庫寫入,此時B庫就提高爲主庫,與主從形式相比,由於不存在嚴格的主從關係,因此更換主庫速度快。缺點是由於兩臺數據庫均可以變動數據,容易致使數據紊亂(主要表如今自增主鍵)。數據庫

多臺寫入致使自增主鍵紊亂能夠經過 修改自增主鍵自增量(若有2臺數據庫,能夠修改成2,具體修改方法我忘記了,要用了能夠百度),安全

而後不一樣的數據庫給於一個不一樣的初始主鍵值,例如2臺數據庫,則一個由1開始,一個由2開始,那麼他們的主鍵永遠都不會重複。異步

 

2.主從數據庫數據複製方法工具

能夠分爲異步模式,半同步模式,同步模式。搜索引擎

其實現顧名思義,異步模式是在主庫寫入完成以後發送寫入信息給從庫,一旦信息發送完成則繼續本身的任務日誌

同步模式是在主庫寫入完成以後發送寫入信息給從庫,從庫寫入完成以後返回信息給主庫,只有接收到返回信息主庫纔會繼續本身的任務blog

半同步模式是在主庫寫入完成以後發送寫入信息給從庫,從庫接受到該信息以後通知主庫,而後再進行本身的寫入操做,主庫在接收到該通知後就會繼續本身的任務。索引

三者速度天然是  異步 > 半同步 > 同步

三者安全性是  異步 < 半同步 < 同步

 

3.主從數據庫複製策略

首先給出兩個例子。

(1)經過非主鍵,例如用戶表中的email,查詢到單條用戶信息,並進行了修改,例如修改了phone。則sql語句爲

UPDATE users SET phone=13777777777 WHERE email='11111@qq.com'

(2)管理員批量修改男同窗爲女同窗,則sql語句爲

UPDATE users SET sex=1 WHERE sex=0

 爲了知足兩種不一樣的操做狀況都能有良好的效率,給出兩種不一樣的複製策略

① 按sql語句複製,即主庫進行了什麼sql語句的操做,就把該語句傳遞給從庫,這種方式對於例子2的效率很高,可是對於例子1的效率很低

② 按row複製,即主庫操做了哪幾行數據,就把操做的行的數據發送給從庫,所以例子1的數據可使用主鍵查找,效率很高,可是對於例子2效率低下

理想狀態是,當sql語句效率低時則利用row複製,當row複製效率低於sql語句時則使用sql語句複製,那個講的小哥好像還推薦了一個什麼庫仍是第三方工具,忘記叫什麼了。。。

而複製的動做則要依賴主庫的binlog,由於主庫會把它的sql語句或者row改動信息存放在binlog中。

 

3.數據庫數據備份和誤操做還原

首先是手動備份,通常每週一次全量備份,天天一次增量備份。手動的備份大多數時候都能知足回滾,還原的需求,但有時候業務要求經不住1天的數據差,因而就要使用mysql自身的日誌來進行還原操做。

mysql日誌自己有不少種類,innodb下特有的有undo和redo日誌,分別用於回滾和前滾。redo日誌的應用場景爲當事務進行到一半mysql忽然掛掉的時候,那麼mysql就會讀取redo日誌,將未進行完的事務操做進行完成。

而備份主要依賴的和上面複製中主要依賴的同樣都是binlog。

首先binlog功能是須要手動開啓的,mysql默認是不開啓的。如主從複製策略中所說的,binlog總共分爲3個模式,statement,row,mixed,全都顧名思義,分別爲sql語句記錄,row記錄和混合記錄。

binlog是二進制文件,不能直接打開,須要使用mysqlbinlog 工具來查看。

使用binlog來進行數據還原有效加強了時效性,也減小了大庫備份還原動則一兩天的時間。

 

在這節課上,主要認識了數據庫主從結構,mysql中的binlog的做用能夠說是受益不淺。

 

9-22 MySql日誌詳解及應用實戰

相關文章
相關標籤/搜索