天天看點

MySQL BlackHole 存儲引擎使用

BlackHole “黑洞”,高大上的樣子,但它 No transaction,no xa,no savepoint,這些都沒有阻擋他的應用;show engines 中會顯示 blackhole  的comment 為:/dev/null storage engine (anything you write to it disappears)

   它有自己特定的應用場景:

   1、充當dummy master

   當master後面挂載過多的slave,利用 blackhole 來充當一個 "dummy master" 來減輕master的負載(延遲是需要考慮的);這裡需要提一下的是: 對于 master來說“dummy master” 還是一個slave的角色, 由于binlog 設計中是不記錄 engine=xxxx 關鍵字的,采用預設的存儲引擎(除非在create 語句中 顯式聲明 engine=innodb),是以對于dummy master 來說 隻要設定 default_storage_engine=blackhole 就能實作主從 使用不一緻的存儲引擎;

   2、充當日志伺服器

   3、充當增量備份伺服器

   免去拷貝binlog的問題,如果機器資料量多,也需要多個 blackhole的slave執行個體,這是一個成本問題;其次是 master  binlog  pos 位置和 blackhole 重新産生的pos 是不一緻的,在恢複資料的時候需要手動來恢複,不知道有沒有工具之類的來做對比; 如果MySQL版本達到 5.6+ 那啟用GTID 這個選項可以很容易的實作 增量的恢複;

   注意事項:

   master千萬不要有blackhole的存儲引擎來複制到其他slave;

   造成的影響如下:

   1、如果binlog format 格式為 row或者 mixed 模式,那 delete 和update 是不會記錄在binlog裡面,并産生warning

   2、對于具有auto_incrment屬性的column,由于blackhole 是 no op模式,沒有任何記錄,是以每次插入的記錄,主鍵ID列都是相同的,造成複制失敗;

   3、對于trigger 由于 for each row關鍵字 ,trigger不會被執行,因為沒有一條row

本文轉自 位鵬飛 51CTO部落格,原文連結:http://blog.51cto.com/weipengfei/1329628,如需轉載請自行聯系原作者