MySQL主從同步加速Transfer–FAQ

丁奇發表於2016-03-24

 

Q: Transfer是什麼

A: 是一個解決MySQL原生主從同步延遲的方案。 Transfer本身是一個在MySQL原始碼上打的patch,可以用於當Slave,也可以用於當第三方工具,將Master的資料同步發給Slave。 利用多執行緒實現主從無延遲。

 

Q: Transfer目前的釋出形式?

A: 目前的釋出形式是可執行的mysqld檔案。

最後更新日期 2013-12-01

Transfer.2.3 下載地址 

 

Q: Transfer模式下,主庫執行grant 語句會導致同步停止?

     報錯資訊為 Access denied for user `xxx`@`xx.xx.xx.xx` (using password: YES). (Thanks @落葉思雪)

A: 在Transfer模式下需要在transfer中配置訪問真實slave的帳號資訊,該帳號必須是root許可權,且必須包括grant許可權。

 

Q: 怎麼看多執行緒的效果?

A: mysqladmin –socket=run/mysql.sock -uroot   extended-status –relative –sleep=1 | grep  Com_ts

  詳細說明見 此文

 

Q: 若出現很多serial_number,怎麼分析原因?

A: set global transfer_verbos= on; 看errlog的輸出。

 

Q: Transfer是否會改變主庫上的binlog在從庫上的執行順序,導致資料不一致?

A:會改變執行順序。但Transfer保證對於相同記錄的操作都是按順序的,因此不會導致資料不一致。

 

Q: 我使用了transfer模式,但是transfer的錯誤日誌為什麼一直在輸出 “trans->inner_events 3″,而從庫上沒有更新?

A: Transfer啟動前需要保證Transfer裡面要有與slave上相同的表和表結構,請先確認下,若無,則需要從slave把schema都dump 過去。

 

Q: 需要配置上做什麼改變

A:若使用Slave模式,可直接替換mysqld,無須修改配置

     transfer 模式請參考此文

 

Q: 對主從庫有什麼配置限制

A:有以下限制

     1) 主庫的binlog格式必須是row

     2) 主庫的表建議有unique key ,若無則會降低提升的倍數

     3) 主庫的單個事務大小不能超過 1G

 

Q: 我覆蓋了mysqld後,Transfer整個例項起不來?

A:先確認一下mysqld是否有可執行許可權, 若無,執行 chmod 755 mysqld.

      若提示errmsg.sys相關的錯誤,則需要替換對應based版本的errmsg.sys檔案

 

Q: 我用slave模式,能夠隨時替換回原來的版本嗎?

A: 若原先沒有修改過任何引數,可以直接替換;若有,則可以把增加的引數都加上loose_字首,這樣替換mysqld,重啟,start slave,就可以了。

 

Q: 什麼情況下不適合用Transfer?

A: 其實一個簡單的原則,如果你的原生從庫不延遲,就不需要用(貌似是廢話).

 

Q: 如何監控transfer是否延遲

A: 在Transfer裡面檢測是否同步請用 Master_Log_File=Relay_Master_Log_File 且 Read_Master_Log_Pos=Exec_Master_Log_Pos

 

Q: 我的測試場景下transfer的TPS比原生的還慢?感謝 @-周博

A:  若是從空表開始壓力,並且你的BP開很大,io效能很好,更新語句簡單,qps很高(這個case裡是12w/s),此時單執行緒完全能夠執行得飛快。Transfer模型中的生產+消費環節和多執行緒爭用反而會導致效能下降(在這個case裡面是6w/s)。

      在實際線上場景中,更多的情況是io瓶頸,此時才能利用好多執行緒的效果,Transfer的效果才能體現出來。在我們一個線上場景的測試中是原生500/s,用Transfer後6000/s.

 

PS: 個人比較建議用原始碼安裝,Percona Server的 原始碼地址 

我的cmake引數

CFLAGS=”-O3 -g -fno-exceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing”
CXX=gcc
CXXFLAGS=”-O3 -g -fno-exceptions -fno-rtti -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing”
export CFLAGS CXX CXXFLAGS
#cmake . -DCMAKE_INSTALL_PREFIX=/home/dingqi.lxb/mysql5 -DEXTRA_CHARSETS=all
cmake .
  -DCMAKE_BUILD_TYPE:STRING=Release            
  -DSYSCONFDIR:PATH=/home/mysql5           
  -DCMAKE_INSTALL_PREFIX:PATH=/home/mysql5 
  -DENABLED_PROFILING:BOOL=ON                  
  -DENABLE_DEBUG_SYNC:BOOL=OFF                 
  -DMYSQL_DATADIR:PATH=/home/dingqi.lxb/mysql5/data   
  -DMYSQL_MAINTAINER_MODE:BOOL=OFF             
  -DWITH_EXTRA_CHARSETS:STRING=all 
  -DWITH_BIG_TABLES:BOOL=ON
  -DWITH_FAST_MUTEXES:BOOL=ON
  -DENABLE-PROFILING:BOOL=ON
  -DWITH_SSL:STRING=bundled                    
  -DWITH_UNIT_TESTS:BOOL=OFF                   
  -DWITH_ZLIB:STRING=bundled                   
  -DWITH_PARTITION_STORAGE_ENGINE:BOOL=ON      
  -DWITH_PLUGINS=heap,csv,partition,innodb_plugin,myisam
  -DDEFAULT_CHARSET=gbk -DDEFAULT_COLLATION=gbk_chinese_ci -DWITH_EXTRA_CHARSETS=ALL
  -DENABLED_ASSEMBLER:BOOL=ON                  
  -DENABLED_LOCAL_INFILE:BOOL=ON               
  -DENABLED_THREAD_SAFE_CLIENT:BOOL=ON         
  -DENABLED_EMBEDDED_SERVER:BOOL=OFF            
  -DWITH_CLIENT_LDFLAGS:STRING=all-static                
  -DINSTALL_LAYOUT:STRING=STANDALONE           
  -DCOMMUNITY_BUILD:BOOL=ON; 


相關文章