ä½è ï¼ç°å®æ
æ¥æºï¼ç°å®æçææ¯å客订é å·ï¼IDï¼tianshouzhi_blogï¼
å¨å½ä»äºèç½è¡ä¸ï¼å¤§å¤æ°äººäºèç½ä»ä¸è 对"åå å"ã"å¼å°å¤æ´»"è¿äºè¯æ±å·²ç»è³çè½è¯¦ãèæ°æ®åæ¥æ¯å¼å°å¤æ´»çåºç¡ï¼ææå ·å¤æ°æ®åå¨è½åçç»ä»¶å¦ï¼æ°æ®åºãç¼åãMQçï¼æ°æ®é½å¯ä»¥è¿è¡åæ¥ï¼å½¢æä¸ä¸ªåºå¤§èå¤æçæ°æ®åæ¥ææã
æ¬æå°å 仿¦å¿µä¸ä»ç»åå åãå¼å°å¤æ´»ãå°±è¿è®¿é®çåºæ¬æ¦å¿µãä¹åï¼å°ä»¥æ°æ®åºä¸ºä¾ï¼è®²è§£å¨æ°æ®åæ¥çæ åµä¸ï¼å¦ä½è§£å³æ°æ®åç¯ãæ°æ®å²çªãæ°æ®éå¤çå ¸åé®é¢ã
ä¸ãä»ä¹æ¯åå å
å¦æä» ä» ä»"åå åâè¿ä¸ªè¯æ±çè§åº¦æ¥è¯´ï¼æä»¬å¯ä»¥çè§£ä¸ºå°æ°æ®ååå°å¤ä¸ªåå è¿è¡åå¨ã"åå "æ¯ä¸ä¸ªæ½è±¡çæ¦å¿µï¼é叏䏿°æ®ä¸å¿(IDC)æ¦å¿µç¸å ³ï¼ä¸ä¸ªåå å¯ä»¥å å«å¤ä¸ªIDCï¼ä¹å¯ä»¥åªå å«ä¸ä¸ªIDCãæ¬æå设ä¸ä¸ªåå åªå¯¹åºä¸ä¸ªIDCã
èèä¸å¼å§åªæä¸ä¸ªIDCçæ åµï¼ææç¨æ·çæ°æ®é½ä¼åå ¥åä¸ä»½åºå±åå¨ä¸ï¼å¦ä¸å¾æç¤ºï¼

1ãé®é¢
è¿ç§æ¶ææ¯å¤§å¤æ°æ®ä¸å°åäºèç½å ¬å¸éç¨çæ¹æ¡ï¼åå¨ä»¥ä¸å 个é®é¢ï¼
1ï¼ä¸åå°åºçç¨æ·ä½éªä¸å
ä¸ä¸ªIDCå¿ ç¶åªè½é¨ç½²å¨ä¸ä¸ªå°åºï¼ä¾å¦é¨ç½²å¨å京ï¼é£ä¹å京çç¨æ·è®¿é®å°ä¼å¾å°å¿«éååºï¼ä½æ¯å¯¹äºä¸æµ·çç¨æ·ï¼è®¿é®å»¶è¿ä¸è¬å°±ä¼å¤§ä¸ç¹ï¼ä¸æµ·å°å京çä¸ä¸ªRTTå¯è½æ20mså·¦å³ã
2ï¼å®¹ç¾é®é¢
è¿é容ç¾ä¸æ¯åå°æºå¨æ éï¼èæ¯ææºæ¿æçµãèªç¶ç¾å®³æè å 纤被ææçé大ç¾å®³ã䏿¦åºç°è¿ç§é®é¢ï¼å°æ æ³æ£å¸¸ä¸ºç¨æ·æä¾è®¿é®ï¼çè³åºç°æ°æ®ä¸¢å¤±çæ åµã
è¿å¹¶ä¸æ¯ä¸å¯è½ï¼ä¾å¦ï¼2015å¹´ï¼æ¯ä»å®æå·ææ°æ®ä¸å¿çå ç¼å°±è¢«ææè¿ï¼2018å¹´9æï¼äºæ 大ä¼ä¸ï¼èèéæå½åºææå·ä¸¤ä¸ªæ°æ®ä¸å¿çç½çº¿åªæã
为äºè§£å³è¿äºé®é¢ï¼æä»¬å¯ä»¥å°æå¡é¨ç½²å°å¤ä¸ªä¸åçIDCä¸ï¼ä¸åIDCä¹é´çæ°æ®äºç¸è¿è¡åæ¥ãå¦ä¸å¾ï¼
2ãè§£å³
éè¿è¿ç§æ¹å¼ï¼æä»¬å¯ä»¥è§£å³åæºæ¿éå°çé®é¢ï¼
1ï¼ç¨æ·ä½éªãä¸åçç¨æ·å¯ä»¥éæ©ç¦»èªå·±æè¿çæºæ¿è¿è¡è®¿é®
2ï¼å®¹ç¾é®é¢ãå½ä¸ä¸ªæºæ¿æäºä¹åï¼æä»¬å¯ä»¥å°è¿ä¸ªæºæ¿ç¨æ·çæµéè°åº¦å°å¦å¤ä¸ä¸ªæ£å¸¸çæºæ¿ï¼ç±äºä¸åæºæ¿ä¹é´çæ°æ®æ¯å®æ¶åæ¥çï¼ç¨æ·æµéè°åº¦è¿å»åï¼ä¹å¯ä»¥æ£å¸¸è®¿é®æ°æ® (æ éåçé£ä¸å»çå°é¨åæ°æ®å¯è½ä¼ä¸¢å¤±)ã
éè¦æ³¨æçæ¯ï¼å ³äºå®¹ç¾ï¼åå¨ä¸ä¸ªå®¹ç¾çº§å«çååï¼ä¾å¦ï¼åæºæ éï¼æºæ¶(rack)æ éï¼æºæ¿æ éï¼åå¸çº§æ éçã
æä»¬è¿éåªè®¨è®ºæºæ¿æ éåå叿 éï¼
- æºæ¿å®¹ç¾ :
ä¸é¢çæ¡ä¾ä¸ï¼æä»¬ä½¿ç¨äº2个IDCï¼ä½æ¯2个IDCå¹¶ä¸è½å ·å¤æºæ¿å®¹ç¾è½åã
è³å°éè¦3个IDCï¼ä¾å¦ï¼ä¸äºåºäºå¤æ°æ´¾åè®®çä¸è´æ§ç»ä»¶ï¼å¦Zookeeperï¼Redisãetcdãconsulçï¼éè¦å¾å°å¤§é¨åèç¹çåæã
ä¾å¦æä»¬é¨ç½²äº3个èç¹ï¼å¨åªæ2ä¸ªæºæ¿çæ åµä¸ï¼ å¿ ç¶æ¯ä¸ä¸ªæºæ¿é¨ç½²2个èç¹ï¼ä¸ä¸ªæºæ¿é¨ç½²ä¸ä¸ªèç¹ã
å½é¨ç½²äº2个èç¹çæºæ¿æäºä¹åï¼åªå©ä¸ä¸ä¸ªèç¹ï¼æ æ³å½¢æå¤æ°æ´¾ã
å¨3æºæ¿çæ åµä¸ï¼æ¯ä¸ªæºæ¿é¨ç½²ä¸ä¸ªèç¹ï¼ä»»æä¸ä¸ªæºæ¿æäºï¼è¿å©2个èç¹ï¼è¿æ¯å¯ä»¥å½¢æå¤æ°æ´¾ãè¿ä¹å°±æ¯æä»¬å¸¸è¯´ç"两å°ä¸ä¸å¿âã
- åå¸çº§å®¹ç¾ï¼
å¨åçé大èªç¶ç¾å®³çæ åµä¸ï¼å¯è½æ´ä¸ªåå¸çæºæ¿é½æ æ³è®¿é®ãä¸äºç»ä»¶ï¼ä¾å¦èèçocean baseï¼ä¸ºäºè¾¾å°åå¸çº§å®¹ç¾çè½åï¼ä½¿ç¨çæ¯"ä¸å°äºä¸å¿"çæ¹æ¡ã
è¿ç§æ åµä¸ï¼3个åå¸å嫿¥æ2ã2ã1ä¸ªæºæ¿ã彿´ä¸ªåå¸åçç¾é¾æ¶ï¼å ¶ä»ä¸¤ä¸ªåå¸ä¾ç¶è³å°å¯ä»¥ä¿è¯æ3ä¸ªæºæ¿ä¾ç¶æ¯åæ´»çï¼åæ ·å¯ä»¥å½¢æå¤æ°æ´¾ã
3ãå°ç»
å¦æä» ä» æ¯èèä¸åå°åºçç¨æ·æ°æ®å°±è¿åå ¥è·ç¦»æè¿çIDCï¼è¿æ¯çº¯ç²¹æä¹ä¸çâåå åâã
ä¸ååå çä¹é´æ°æ®å®æ¶è¿è¡åæ¥ï¼ç¸äºå¤ä»½å¯¹æ¹çæ°æ®ï¼æè½åå°çæ£æä¹ä¸"å¼å°å¤æ´»âã
å®ç°åå åï¼ææ¯å±é¢æä»¬è¦è§£å³çäºæ å¾å¤ï¼ä¾å¦ï¼æµéè°åº¦ï¼å³å¦ä½è®©ç¨æ·å°±è¿è®¿é®éè¿çIDCï¼æ°æ®äºéï¼å¦ä½å®ç°ä¸åæºæ¿ä¹é´æ°æ®çç¸äºåæ¥ã
æµéè°åº¦ä¸å¨æ¬æç讨论èç´å ï¼æ°æ®åæ¥æ¯æ¬æè®²è§£çéç¹ã
äºãå¦ä½å®ç°æ°æ®åæ¥
éè¦åæ¥çç»ä»¶æå¾å¤ï¼ä¾å¦æ°æ®åºãç¼åçï¼è¿é以å¤ä¸ªMySQLé群ä¹é´çæ°æ®åæ¥ä¸ºä¾è¿è¡è®²è§£ï¼å®é ä¸ç¼åç忥æè·¯ä¹æ¯ç±»ä¼¼ã
1ãåºç¡ç¥è¯
为äºäºè§£å¦ä½å¯¹ä¸åMySQLçæ°æ®ç¸äºè¿è¡åæ¥ï¼æä»¬å äºè§£ä¸ä¸MySQL主ä»å¤å¶çåºæ¬æ¶æï¼å¦ä¸å¾æç¤ºï¼
é常ä¸ä¸ªMySQLé群æä¸ä¸»å¤ä»ææãç¨æ·çæ°æ®é½æ¯åå ¥ä¸»åºMasterï¼Masterå°æ°æ®åå ¥å°æ¬å°äºè¿å¶æ¥å¿binary logä¸ã
ä»åºSlaveå¯å¨ä¸ä¸ªIO线ç¨(I/O Thread)ä»ä¸»ä»åæ¥binlogï¼åå ¥å°æ¬å°çrelay logä¸ï¼åæ¶slaveè¿ä¼å¯å¨ä¸ä¸ªSQL Threadï¼è¯»åæ¬å°çrelay logï¼åå ¥å°æ¬å°ï¼ä»èå®ç°æ°æ®åæ¥ã
åºäºè¿ä¸ªèæ¯ç¥è¯ï¼æä»¬å°±å¯ä»¥èèèªå·±ç¼åä¸ä¸ªç»ä»¶ï¼å ¶ä½ç¨ç±»ä¼¼ä¸MySQL slaveï¼ä¹æ¯å»ä¸»åºä¸æåbinlogï¼åªä¸è¿binlog䏿¯ä¿åå°æ¬å°ï¼èæ¯å°binlogè½¬æ¢æsqlæå ¥å°ç®æ MySQLé群ä¸ï¼å®ç°æ°æ®ç忥ã
è¿å¹¶éæ¯ä¸ä»¶ä¸å¯è½å®æçäºï¼MySQLå®ç½ä¸å·²ç»æä¾å¥½ææä½ èªå·±ç¼åä¸ä¸ªMySQL slave 忥binlogæéçç¸å ³èæ¯ç¥è¯ï¼è®¿é®è¿ä¸ªé¾æ¥ï¼https://dev.mysql.com/doc/internals/en/client-server-protocol.htmlï¼ä½ å°å¯ä»¥çå°MySQL客æ·ç«¯ä¸æå¡ç«¯çéä¿¡åè®®ã
ä¸å¾çº¢è²æ¡ä¸å±ç¤ºäºMySQL主ä»å¤å¶çç¸å ³åè®®ï¼
å½ç¶ï¼ç¬è çç®ç并䏿¯å¸æè¯»è çæ£çæç §è¿éçä»ç»å°è¯ç¼åä¸ä¸ªMySQLçslaveï¼åªæ¯æ³åè¯è¯»è ï¼æ¨¡æMySQL slaveæåbinlog并鿝ä¸ä»¶å¾ç¥å¥çäºï¼åªè¦ä½ çç½ç»åºç¡ç¥è¯å¤æå®ï¼å®å ¨å¯ä»¥åå°ã
ç¶èï¼è¿æ¯ä¸ä¸ªåºå¤§è夿çå·¥ä½ã以ä¸äººä¹åï¼è¦å®æè¿ä¸ªå·¥ä½ï¼éè¦å ç¨ä½ 大éçæ¶é´ã
好å¨ï¼ç°å¨å·²ç»æå¾å¤å¼æºçç»ä»¶ï¼å·²ç»å®ç°äºæç §è¿ä¸ªåè®®å¯ä»¥æ¨¡ææä¸ä¸ªMySQLçslaveï¼æåbinlogãä¾å¦ï¼
- é¿é巴巴弿ºçcanal
- ç¾å¢å¼æºçpuma
- linkedin弿ºçdatabus
- ...
ä½ å¯ä»¥å©ç¨è¿äºç»ä»¶æ¥å®ææ°æ®åæ¥ï¼èä¸å¿ éå¤é è½®åãåè®¾ä½ éç¨äºä¸é¢æä¸ªå¼æºç»ä»¶è¿è¡åæ¥ï¼éè¦æç½çæ¯è¿ä¸ªç»ä»¶é½è¦å®ææåºæ¬ç2ä»¶äºï¼
- 仿ºåºæåbinlogå¹¶è¿è¡è§£æï¼ç¬è æè¿é¨ååè½ç§°ä¹ä¸ºbinlog syncerï¼
- å°è·åå°çbinlogè½¬æ¢æSQLæå ¥ç®æ åºï¼è¿ä¸ªåè½ç§°ä¹ä¸ºsql writerã
为ä»ä¹ååæä¸¤åç¬ç«çåè½ï¼å 为binlog订é è§£æçå®é åºç¨åºæ¯å¹¶ä¸ä» ä» æ¯æ°æ®åæ¥ï¼å¦ä¸å¾ï¼
å¦å¾æç¤ºï¼æä»¬å¯ä»¥éè¿binlogæ¥åå¾å¤äºï¼å¦ï¼
- 宿¶æ´æ°æç´¢å¼æï¼å¦ESä¸çç´¢å¼ä¿¡æ¯
- 宿¶æ´æ°Redisä¸çç¼å
- åéå°Kafkaä¾ä¸æ¸¸æ¶è´¹ï¼ç±ä¸å¡æ¹èªå®ä¹ä¸å¡é»è¾å¤çç
- ...
å æ¤ï¼é常æä»¬æbinlog synceråç¬ä½ä¸ºä¸ä¸ªæ¨¡åï¼å ¶åªè´è´£è§£æä»æ°æ®åºä¸æåå¹¶è§£æbinlogï¼å¹¶å¨å åä¸ç¼å(ææä¹ ååå¨)ã
å¦å¤ï¼binlog syncerå¦å¤æä¸ä¸ªsdkï¼ä¸å¡æ¹éè¿è¿ä¸ªsdkä»binlog syncerä¸è·åè§£æåçbinlogä¿¡æ¯ï¼ç¶å宿èªå·±çç¹å®ä¸å¡é»è¾å¤çã
æ¾ç¶ï¼å¨æ°æ®åæ¥çåºæ¯ä¸ï¼æä»¬å¯ä»¥åºäºè¿ä¸ªsdkï¼ç¼åä¸ä¸ªç»ä»¶ä¸é¨ç¨äºå°binlog转æ¢ä¸ºsqlï¼æå ¥ç®æ åºï¼å®ç°æ°æ®åæ¥ï¼å¦ä¸å¾æç¤ºï¼
åäº¬ç¨æ·çæ°æ®ä¸æåå ¥ç¦»èªå·±æè¿çæºæ¿çDBï¼éè¿binlog syncer订é è¿ä¸ªåºbinlogï¼ç¶å䏿¸¸çbinlog writerå°binlogè½¬æ¢æSQLï¼æå ¥å°ç®æ åºã
䏿µ·ç¨æ·ç±»ä¼¼ï¼åªä¸è¿æ¹åç¸åï¼ä¸åèµè¿°ãéè¿è¿ç§æ¹å¼ï¼æä»¬å¯ä»¥å®æ¶çå°ä¸¤ä¸ªåºçæ°æ®åæ¥å°å¯¹ç«¯ãå½ç¶äºæ å¹¶éè¿ä¹ç®åï¼æä»¬æä¸äºéè¦çäºæ éè¦èèã
2ãå¦ä½è·åå ¨é+å¢éæ°æ®ï¼
é常ï¼MySQLä¸ä¼ä¿åææçåå²binlogãåå å¨äºï¼å¯¹äºä¸æ¡è®°å½ï¼å¯è½æä»¬ä¼æ´æ°å¤æ¬¡ï¼è¿ä¾ç¶æ¯ä¸æ¡è®°å½ï¼ä½æ¯é对æ¯ä¸æ¬¡æ´æ°æä½ï¼é½ä¼äº§ç䏿¡binlogè®°å½ï¼è¿æ ·å°±ä¼åå¨å¤§éçbinlogï¼å¾å¿«ä¼å°ç£çå æ»¡ã
å æ¤DBAé常ä¼éè¿ä¸äºé ç½®é¡¹ï¼æ¥å®æ¶æ¸ çbinlogï¼åªä¿çæè¿ä¸æ®µæ¶é´å çbinlogã
ä¾å¦ï¼å®æ¹ççMySQLæä¾äºexpire_logs_daysé 置项ï¼å¯ä»¥è®¾ç½®ä¿åbinlogç天æ°ï¼ç¬è è¿é设置为0ï¼è¡¨ç¤ºé»è®¤ä¸æ¸ 空ï¼å¦æå°è¿ä¸ªå¼è®¾ç½®å¤§äº0ï¼ååªä¼ä¿åæå®ç天æ°ã
å¦å¤ä¸äºMySQLç忝ï¼å¦percona serverï¼è¿å¯ä»¥æå®ä¿çbinlogæä»¶ç个æ°ãæä»¬å¯ä»¥éè¿show binary logsæ¥æ¥çå½åMySQLåå¨å¤å°ä¸ªbinlogæä»¶ï¼å¦ä¸å¾ï¼
é常ï¼å¦æbinlog妿仿¥æ²¡è¢«æ¸ çè¿ï¼é£ä¹binlogæä»¶åååç¼é常æ¯000001ï¼å¦æä¸æ¯è¿ä¸ªå¼ï¼å说æå¯è½å·²ç»è¢«æ¸ çè¿ãå½ç¶ï¼è¿ä¹ä¸æ¯ç»å¯¹ï¼ä¾å¦æ§è¡?imageView2/2/w/1620"reset masterâå½ä»¤ï¼å¯ä»¥å°ææçbinlogæ¸ ç©ºï¼ç¶åä»000001éæ°å¼å§è®¡æ°ã
Whatever! æä»¬ç¥éäºï¼binlogå¯è½ä¸ä¼ä¸ç´ä¿çï¼æä»¥ç´æ¥åæ¥binlogï¼å¯è½åªè½è·åå°é¨åæ°æ®ã
å æ¤ï¼é常ççç¥æ¯ï¼ç±DBAå dumpä¸ä»½æºåºç宿´æ°æ®å¿«ç §ï¼å¢éé¨åï¼åéè¿binlog订é è§£æè¿è¡åæ¥ã
3ãå¦ä½è§£å³éå¤æå ¥
èè以䏿 åµä¸ï¼æºåºä¸ç䏿¡è®°å½æ²¡æå¯ä¸ç´¢å¼ã对äºè¿ä¸ªè®°å½çbinlogï¼éè¿sql writerå°binlogè½¬æ¢æsqlæå ¥ç®æ åºæ¶ï¼æåºäºå¼å¸¸ï¼æ¤æ¶æä»¬å¹¶ä¸ç¥éæ¯å¦æå ¥æåäºï¼åéè¦è¿è¡éè¯ã
妿ä¹åå·²ç»æ¯æå ¥ç®æ åºæåï¼åªæ¯ç®æ åºååºæ¶ç½ç»è¶ æ¶(socket timeout)äºï¼å¯¼è´çå¼å¸¸ï¼è¿ä¸ªæ¶åéè¯æå ¥ï¼å°±ä¼åå¨å¤æ¡è®°å½ï¼é ææ°æ®ä¸ä¸è´ã
å æ¤ï¼é叏卿°æ®åæ¥æ¶ï¼é常ä¼éå¶è®°å½å¿ é¡»æè¦æä¸»é®æè å¯ä¸ç´¢å¼ã
4ãå¦ä½è§£å³å¯ä¸ç´¢å¼å²çª
ç±äºä¸¤è¾¹çåºé½å卿°æ®æå ¥ï¼å¦æé½ä½¿ç¨äºåä¸ä¸ªå¯ä¸ç´¢å¼ï¼é£ä¹å¨åæ¥å°å¯¹ç«¯æ¶ï¼å°ä¼äº§çå¯ä¸ç´¢å¼å²çªã
对äºè¿ç§æ åµï¼é常建议æ¯ä½¿ç¨ä¸ä¸ªå ¨å±å¯ä¸çåå¸å¼IDçæå¨æ¥çæå¯ä¸ç´¢å¼ï¼ä¿è¯ä¸ä¼äº§çå²çªã
å¦å¤ï¼å¦æçç产çå²çªäºï¼åæ¥ç»ä»¶åºè¯¥å°å²çªçè®°å½ä¿å䏿¥ï¼ä»¥ä¾¿ä¹åçé®é¢ææ¥ã
5ã对äºDDLè¯å¥å¦ä½å¤ç
å¦ææ°æ®åºè¡¨ä¸å·²ç»æå¤§éæ°æ®ï¼ä¾å¦åä¸çº§å«ãæè ä¸äº¿ï¼è¿ä¸ªæ¶å对äºè¿ä¸ªè¡¨çDDLåæ´ï¼å°ä¼åå¾éå¸¸æ ¢ï¼å¯è½ä¼éè¦å åéçè³æ´é¿æ¶é´ï¼èDDLæä½æ¯ä¼é表çï¼è¿å¿ ç¶ä¼å¯¹ä¸å¡é ææå¤§çå½±åã
å æ¤ï¼åæ¥ç»ä»¶é常ä¼å¯¹DDLè¯å¥è¿è¡è¿æ»¤ï¼ä¸è¿è¡åæ¥ãDBAå¨ä¸åçæ°æ®åºé群ä¸ï¼éè¿ä¸äºå¨çº¿DDLå·¥å ·(å¦gh-ost)ï¼è¿è¡è¡¨ç»æåæ´ã
6ãå¦ä½è§£å³æ°æ®åç¯é®é¢
æ°æ®åç¯é®é¢ï¼æ¯æ°æ®åæ¥è¿ç¨ä¸ï¼æéè¦çé®é¢ãæä»¬é对INSERTãUPDATEãDELETEä¸ä¸ªæä½æ¥åå«è¿è¡è¯´æï¼
1ï¼INSERTæä½
å设å¨Aåºæå ¥æ°æ®ï¼Aåºäº§çbinlogï¼ä¹å忥å°Båºï¼Båºåæ ·ä¹ä¼äº§çbinlogãç±äºæ¯åå忥ï¼è¿æ¡è®°å½ï¼åä¼è¢«éæ°åæ¥åAåºãç±äºAåºåºåå¨è¿æ¡è®°å½äºï¼äº§çå²çªã
2ï¼UPDATEæä½
å èèé对Aåºææ¡è®°å½Råªæä¸æ¬¡æ´æ°çæ åµï¼å°Ræ´æ°æR1ï¼ä¹åR1è¿ä¸ªbinlogä¼è¢«åæ¥å°Båºï¼Båºåå°R1忥ä¼Aåºã对äºè¿ç§æ åµä¸ï¼Aåºå°ä¸ä¼äº§çbinlogã
å 为Aåºè®°å½å½åæ¯R1ï¼Båºåæ¥åæ¥çè¿æ¯R1ï¼æå³ç弿²¡æåã
å¨ä¸ä¸ªæ´æ°æä½å¹¶æ²¡ææ¹åææ¡è®°å½å¼çæ åµä¸ï¼MySQLæ¯ä¸ä¼äº§çbinlogï¼ç¸å½äºåæ¥ç»æ¢ã
ä¸å¾æ¼ç¤ºäºå½æ´æ°ç弿²¡æåæ¶ï¼MySQLå®é ä¸ä¸ä¼å任使ä½ï¼
ä¸å¾æ°æ®ä¸åæ¬æä¸æ¡è®°å½(1,?imageView2/2/w/1620"tianshouzhiâ)ï¼ä¹åæ§è¡ä¸ä¸ªupdateè¯å¥ï¼å°id=1çè®°å½çnameå¼åæ¬¡æ´æ°ä¸ºâtianshouzhiâï¼æå³çå¼å¹¶æ²¡æåæ´ã
è¿ä¸ªæ¶åï¼æä»¬çå°MySQLè¿åçå½±åçè®°å½å½æ°ä¸º0ï¼ä¹å°±æ¯è¯´å¹¶ä¸ä¼äº§ççæ¯çæ´æ°æä½ãç¶èè¿å¹¶ä¸æå³UPDATE æä½æ²¡æé®é¢ï¼äºå®ä¸ï¼å ¶æ¯INSERTæ´å å±é©ã
èèAåºçè®°å½R被è¿ç»æ´æ°äº2次ï¼ç¬¬ä¸æ¬¡æ´æ°æR1ï¼ç¬¬äºæ¬¡è¢«æ´æ°æR2ï¼è¿ä¸¤æ¡è®°å½åæ´ä¿¡æ¯é½è¢«åæ¥å°Båºï¼Bä¹äº§çäºR1åR2ã
ç±äºBçæ°æ®ä¹å¨å¾A忥ï¼BçR1ä¼è¢«å 忥å°Aï¼èAç°å¨ç弿¯R2ï¼ç±äºå¼ä¸ä¸æ ·ï¼å°ä¼è¢«æ´æ°æR1ï¼å¹¶äº§çæ°çbinlogï¼æ¤æ¶BçR2å忥ä¼Aï¼åç°Aç弿¯R1ï¼åæ´æ°æR2ï¼ä¹äº§çbinlogãç±äºB忥åAçæä½ï¼è®©Aå产çäºæ°çbinlogï¼Aåè¦åæ¥å°Bï¼å¦æ¤åå¤ï¼é·å ¥æ é循ç¯ä¸ã
3ï¼DELETEæä½
åæ ·åå¨å å顺åºé®é¢ãä¾å¦å æå ¥ä¸æ¡è®°å½ï¼åå é¤ãBå¨Aå é¤åï¼åå°æå ¥çæ°æ®åæ¥åAï¼æ¥çåå°Açå 餿ä½ä¹åæ¥åAï¼æ¯æ¬¡é½ä¼äº§çbinlogï¼é·å ¥æ éåç¯ã
å ³äºæ°æ®åç¯é®é¢ï¼ç¬è æçè¡çæè®ï¼æ¾ç»å 为ç¬è ç误æä½ï¼å°ä¸ä¸ªåºçæ°æ®åæ¥å°äºèªèº«ï¼æç»ä¹å¯¼è´æ é循ç¯ï¼åå åæä¸ä¸è¿°æå°çUPDATEãDELETEæä½ç±»ä¼¼ï¼è¯»è å¯èªè¡æèã
é对ä¸è¿°æ°æ®åæ¥å°è¿ç¨ä¸å¯è½ä¼åå¨çæ°æ®åç¯é®é¢ï¼æç»ä¼å¯¼è´æ°æ®æ é循ç¯ï¼å æ¤æä»¬å¿ é¡»è¦è§£å³è¿ä¸ªé®é¢ãç±äºåå¨å¤ç§è§£å³æ¹æ¡ï¼æä»¬å°å¨ç¨åç»ä¸è¿è¡è®²è§£ã
7ãæ°æ®åæ¥æ¶æè®¾è®¡
ç°å¨ï¼è®©æä»¬å ææè·¯å ä»è§£å³æ°æ®åæ¥çå ·ä½ç»èé®é¢è½¬åæ¥ï¼ä»æ´é«çå±é¢è®²è§£æ°æ®åæ¥çæ¶æåºè¯¥å¦ä½è®¾è®¡ãç¨åçå 容ä¸ï¼æä»¬å°è®²è§£åç§é¿å æ°æ®åç¯çåç§è§£å³æ¹æ¡ã
åé¢çæ¶æä¸ï¼åªæ¶åå°2个DBçæ°æ®åæ¥ï¼å¦ææå¤ä¸ªDBæ°æ®éè¦ç¸äºåæ¥çæ åµä¸ï¼æ¶æå°ä¼åå¾é叏夿ãä¾å¦ï¼
è¿ä¸ªå¾æ¼ç¤ºçæ¯å个DBä¹é´æ°æ®éè¦ç¸äºåæ¥ï¼è¿ç§ææç»æé叏夿ã为äºè§£å³è¿ç§é®é¢ï¼æä»¬å¯ä»¥å°æ°æ®åå ¥å°ä¸ä¸ªæ°æ®ä¸è½¬ç«ï¼ä¾å¦MQä¸è¿è¡ä¿åï¼å¦ä¸ï¼
æä»¬å¨ä¸åçæºæ¿åé¨ç½²ä¸å¥MQé群ï¼è¿ä¸ªæºæ¿çbinlog syncerå°éè¦åæ¥çDB binlogæ°æ®åå ¥MQ对åºçTopicä¸ã
å¯¹ç«¯æºæ¿å¦æéè¦åæ¥è¿ä¸ªæ°æ®ï¼åªéè¦éè¿binlog writer订é è¿ä¸ªtopicï¼æ¶è´¹topicä¸çbinlogæ°æ®ï¼æå ¥å°ç®æ åºä¸å³å¯ã
ä¸äºMQæ¯æconsumer groupçæ¦å¿µï¼ä¸åçconsumer groupçæ¶è´¹ä½ç½®offsetç¸äºé离ï¼ä»èè¾¾å°ä¸ä»½æ°æ®ï¼åæ¶ä¾å¤ä¸ªæ¶è´¹è è¿è¡è®¢é çè½åã
å½ç¶ï¼ä¸äºbinlog订é è§£æç»ä»¶ï¼å¯è½å®ç°äºç±»ä¼¼äºMQçåè½ï¼æ¤æ¶åä¸éè¦ç¬ç«é¨ç½²MQã
é£ä¹MQåºè¯¥éæ©ä»ä¹å¢ï¼
å«é®ï¼é®å°±æ¯Kafkaã
ä¸ãè§£å³æ°æ®åç¯é®é¢
æ°æ®åç¯é®é¢æå¤ç§è§£å³æ¹æ¡ï¼éè¿æé¤æ³ï¼ä¸ä¸è¿è¡è®²è§£ã
1ã忥æä½ä¸çæbinlog
å¨MySQLä¸ï¼æä»¬å¯ä»¥è®¾ç½®sessionåéï¼æ¥æ§å¶å½åä¼è¯ä¸çæ´æ°æä½ï¼ä¸äº§çbinlogãè¿æ ·å½å¾ç®æ åºæå ¥æ°æ®æ¶ï¼ç±äºä¸äº§çbinlogï¼ä¹å°±ä¸ä¼è¢«åæ¥ä¼æºåºäºã
ä¸ºäºæ¼ç¤ºè¿ä¸ªææï¼ç¬è æ¸ ç©ºäºæ¬æºä¸çææbinlog(æ§è¡reset master)ï¼ç°å¨å¦ä¸å¾æç¤ºï¼
忽ç¥è¿ä¸¤ä¸ªbinlog eventï¼binlogæä»¶æ ¼å¼æå¼å§å°±æ¯è¿ä¸¤ä¸ªeventã
æ¥çï¼ç¬è æ§è¡set sql_log_bin=0ï¼ç¶åæå ¥ä¸æ¡è¯å¥ï¼æåå¯ä»¥çå°ç确没æäº§çæ°çbinlogäºä»¶ï¼
éè¿è¿ç§æ¹å¼ï¼è²ä¼¼å¯ä»¥è§£å³æ°æ®åç¯é®é¢ãç®æ åºä¸äº§çbinlogï¼å°±ä¸ä¼è¢«åæ¥ä¼æºåºã
使¯ï¼çæ¡æ¯å¦å®çãæä»¬æ¯å¾ç®æ åºçmasteræå ¥æ°æ®ï¼å¦æä¸äº§çbinlogï¼ç®æ åºçslave乿 æ³åæ¥æ°æ®ï¼ä¸»ä»æ°æ®ä¸ä¸è´ãæä»¥ï¼éè¦æé¤è¿ç§æ¹æ¡ã
æç¤ºï¼å¦ææ¢å¤set sql_log_bin=1ï¼æå ¥è¯å¥æ¯ä¼äº§çbinlogï¼è¯»è å¯ä»¥èªè¡æ¨¡æã
2ãæ§å¶binlog忥æ¹å
æ¢ç¶ä¸äº§çbinlogä¸è½è§£å³é®é¢ãé£ä¹æ¢ä¸ç§æè·¯ï¼å¯ä»¥äº§çbinlogã
彿ä¸ä¸ªbinlogè½¬æ¢æsqlæ¶ï¼æå ¥æä¸ªåºä¹åï¼æä»¬å å¤æè¿æ¡è®°å½æ¯ä¸æ¯åæ¬å°±æ¯è¿ä¸ªåºäº§ççï¼å¦ææ¯ï¼é£ä¹å°±æå¼ï¼ä¹å¯ä»¥é¿å åç¯é®é¢ã
ç°å¨é®é¢å°±å为ï¼å¦ä½ç»binlogå 个æ è®°ï¼è¡¨ç¤ºå ¶å®é£ä¸ªMySQLé群产ççãè¿ä¹æå ç§æ¹æ¡ï¼ä¸é¢ä¸ä¸è®²è¿°ã
1ï¼ROW模å¼ä¸çSQL
MySQL主ä»åæ¥ï¼binlogå¤å¶ä¸è¬æ3ç§æ¨¡å¼ï¼STATEMENTï¼ROWï¼MIXEDã
é»è®¤æ åµä¸ï¼STATEMENT模å¼åªè®°å½SQLè¯å¥ï¼ROW模å¼åªè®°å½åæ®µåæ´ååçå¼ï¼MIXEDæ¨¡å¼æ¯äºè æ··åãbinlog忥ä¸è¬ä½¿ç¨ç齿¯ROW模å¼ï¼é«çæ¬MySQL主ä»åæ¥é»è®¤ä¹æ¯ROW模å¼ã
æä»¬æ³éåçæ¹æ¡æ¯ï¼å¨æ§è¡çSQLä¹åå ä¸ä¸æ®µç¹æ®æ è®°ï¼è¡¨ç¤ºè¿ä¸ªSQLçæ¥æºãä¾å¦ï¼
/*IDC1:DB1*/insert into users(name) values("tianbowen")
å ¶ä¸/*IDC1:DB1*/æ¯ä¸ä¸ªæ³¨éï¼è¡¨ç¤ºè¿ä¸ªSQLåå§å¨æ¯IDC1çDB1ä¸äº§ççãä¹åå¨åæ¥çæ¶åï¼è§£æåºSQLä¸çIDCä¿¡æ¯ï¼å°±è½å¤æåºæ¯ä¸æ¯èªå·±äº§ççæ°æ®ã
ç¶èï¼ROW模å¼ä¸ï¼é»è®¤åªè®°å½åæ´ååçå¼ï¼ä¸è®°å½SQLãæä»¥æä»¬è¦éè¿ä¸ä¸ªå¼å ³ï¼è®©MySQLå¨ROW模å¼ä¸ä¹è®°å½INSERTãUPDATEãDELETEçSQLè¯å¥ã
å ·ä½åæ³æ¯ï¼å¨MySQLçé ç½®æä»¶ä¸ï¼æ·»å 以ä¸é ç½®ï¼
binlog_rows_query_log_events =1
è¿ä¸ªé ç½®å¯ä»¥è®©MySQLå¨binlogä¸äº§çROWS_QUERY_LOG_EVENTç±»åçbinlogäºä»¶ï¼å ¶è®°å½çå°±æ¯æ§è¡çSQLã
éè¿è¿ç§æ¹å¼ï¼æä»¬å°±è®°å½ä¸çä¸ä¸ªbinlogæåæ¯ç±åªä¸ä¸ªé群产ççï¼ä¹åå¨åæ¥çæ¶åï¼sql writerå¤æç®æ æºæ¿åå½åbinlogä¸å å«çæºæ¿ç¸åï¼åæå¼è¿æ¡æ°æ®ï¼ä»èé¿å åç¯ã
è¿ç§æè·¯ï¼åè½ä¸æ²¡é®é¢ï¼ä½æ¯å¨å®è·µä¸ï¼ç¡®é常麻ç¦ãé¦å ï¼è®©ä¸å¡å¯¹æ§è¡çæ¯æ¡sqlé½å ä¸ä¸ä¸ªè¿æ ·çæ è¯ï¼å ä¹ä¸å¯è½ãå¦å¤ï¼å¦æå¿è®°å äºï¼å°±ä¸ç¥éæ°æ®çæ¥æºäºã
妿éç¨è¿ç§æ¹æ¡ï¼å¯ä»¥èè卿°æ®åºè®¿é®å±ä¸é´ä»¶å±é¢æ·»å æ¯æå¨sqlä¹åå¢å /*..*/çåè½ï¼ç»ä¸å¯¹ä¸å¡å±è½ã
å³ä½¿è¿æ ·ï¼ä¹ä¸å®ç¾ï¼ä¸è½ä¿è¯ææçsqlé½éè¿ä¸é´ä»¶æ¥æ¥åå ¥ï¼ä¾å¦DBAçä¸äºæ¥å¸¸è¿ç»´æä½ï¼æè æå·¥éè¿MySQLå½ä»¤è¡æ¥æä½æ°æ®åºæ¶ï¼è¯å®ä¼å卿²¡ææ·»å æºæ¿ä¿¡æ¯çæ åµã
æ»çæ¥è¯´ï¼è¿ä¸ªæ¹æ¡ä¸æ¯é£ä¹å®ç¾ã
2ï¼éè¿éå 表
è¿ç§æ¹æ¡ç®åå¾å¤ç¥åäºèç½å ¬å¸å¨ä½¿ç¨ãå¤§è´æè·¯æ¯ï¼å¨dbä¸é½å ä¸å¼ é¢å¤ç表ï¼ä¾å¦å«directionï¼è®°å½ä¸ä¸ªbinlog产ççæºé群çä¿¡æ¯ãä¾å¦ï¼
CREATE TABLE `direction` (
`idc` varchar(255) not null,
`db_cluster` varchar(255) not null,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
idcåæ®µç¨äºè®°å½ææ¡è®°å½åå§äº§ççIDCï¼db_clusterç¨äºè®°å½åå§äº§ççæ°æ®åºé群(注æè¿éè¦ä½¿ç¨é群çåç§°ï¼ä¸è½æ¯server_idï¼å 为å¯è½ä¼åç主ä»åæ¢)ã
åè®¾ç¨æ·å¨IDC1çåºAæå ¥ç䏿¡è®°å½(ä¹å¯ä»¥å¨äºå¡ä¸æå ¥å¤æ¡è®°å½ï¼åæ¡è®°å½ï¼å³ä½¿ä¸å¼å¯äºå¡ï¼MySQLé»è®¤ä¹ä¼å¼å¯äºå¡)ï¼
BEGIN;
insert into users(name) values("tianshouzhiâ);
COMMIT;
é£ä¹Aåºæ°æ®binlogéè¿sql writer忥å°ç®æ åºBæ¶ï¼sql writerå¯ä»¥æå对äºå¡ä¸çä¿¡æ¯å¯ä»¥è¿è¡ä¸äºä¿®æ¹ï¼å¦ä¸æç¤ºï¼
BEGIN;
#å¾ç®æ åºåæ¥æ¶ï¼é¦å é¢å¤æå ¥ä¸æ¡è®°å½ï¼è¡¨ç¤ºè¿ä¸ªäºå¡ä¸çæ°æ®é½æ¯A产ççã
insert into direction(idc,db_cluster) values("IDC1â,"DB_Aâ)
#æå ¥åæ¥çè®°å½ä¿¡æ¯
insert into users(name) values("tianshouzhiâ);
COMMIT;
ä¹åBåºçæ°æ®å¾A忥æ¶ï¼å°±å¯ä»¥æ ¹æ®binlogä¸çç¬¬ä¸æ¡è®°å½çä¿¡æ¯ï¼å¤æè¿ä¸ªè®°å½åæ¬å°±æ¯A产ççï¼è¿è¡æå¼ï¼éè¿è¿ç§æ¹å¼æ¥é¿å åç¯ãè¿ç§æ¹æ¡å·²ç»å·²ç»è¿å¾å¤çå ¬å¸çå®é éªè¯ã
3ï¼éè¿GTID
MySQL 5.6å¼å ¥äºGTID(å ¨å±äºå¡id)çæ¦å¿µï¼æå¤§çç®åçDBAçè¿ç»´ã卿°æ®åæ¥çåºæ¯ä¸ï¼GTIDä¾ç¶ä¹å¯ä»¥åæ¥æå¤§çå¨åã
GTID ç±2个é¨åç»æï¼
server_uuid:transaction_id
å ¶ä¸server_uuidæ¯MySQLéæºçæçï¼å ¨å±å¯ä¸ãtransaction_idäºå¡idï¼é»è®¤æ åµä¸æ¯æ¬¡æå ¥ä¸ä¸ªäºå¡ï¼transaction_idèªå¢1ã
注æï¼è¿éå¹¶ä¸ä¼å¯¹GTIDè¿è¡å ¨é¢çä»ç»ï¼ä» 说æå ¶å¨æ°æ®åæ¥çåºæ¯ä¸ï¼å¦ä½é¿å åç¯ãæ°æ®éå¤æå ¥çé®é¢ã
GTIDæä¾äºä¸ä¸ªä¼è¯çº§åégtid_nextï¼æç¤ºå¦ä½äº§çä¸ä¸ä¸ªGTIDãå¯è½çåå¼å¦ä¸:
- AUTOMATICï¼èªå¨çæä¸ä¸ä¸ªGTIDï¼å®ç°ä¸æ¯åé ä¸ä¸ªå½åå®ä¾ä¸å°æªæ§è¡è¿çåºå·æå°çGTIDã
- ANONYMOUSï¼è®¾ç½®åæ§è¡äºå¡ä¸ä¼äº§çGTIDï¼æ¾å¼æå®çGTIDã
é»è®¤æ åµä¸ï¼æ¯AUTOMATICï¼ä¹å°±æ¯èªå¨çæçï¼ä¾å¦æä»¬æ§è¡sqlï¼
insert into users(name) values("tianbowenâ);
产ççbinlogä¿¡æ¯å¦ä¸ï¼
å¯ä»¥çå°ï¼GTIDä¼å¨æ¯ä¸ªäºå¡(Query->...->Xid)ä¹åï¼è®¾ç½®è¿ä¸ªäºå¡ä¸ä¸æ¬¡è¦ä½¿ç¨å°çGTIDã
仿ºåºè®¢é binlogçæ¶åï¼ç±äºè¿ä¸ªGTIDä¹å¯ä»¥è¢«è§£æå°ï¼ä¹åå¨å¾ç®æ åºåæ¥æ°æ®çæ¶åï¼æä»¬å¯ä»¥æ¾ç¤ºççæå®è¿ä¸ªGTIDï¼ä¸è®©ç®æ èªå¨çæã
ä¹å°±æ¯è¯´ï¼å¾ç®æ åºï¼åæ¥æ°æ®æ¶ï¼åæäº2æ¡SQLï¼
SET GTID_NEXT= '09530823-4f7d-11e9-b569-00163e121964:1â
insert into users(name) values("tianbowen")
ç±äºæä»¬æ¾ç¤ºæå®äºGTIDï¼ç®æ åºå°±ä¼ä½¿ç¨è¿ä¸ªGTIDå½åå½åäºå¡IDï¼ä¸ä¼èªå¨çæãåæ ·ï¼è¿ä¸ªæä½ä¹ä¼å¨ç®æ åºäº§çbinlogä¿¡æ¯ï¼éè¦åæ¥åæºåºã
å徿ºåºåæ¥æ¶ï¼æä»¬æç §ç¸åçæ¹å¼ï¼å 设置GTIDï¼å¨æ§è¡è§£æbinlogåå¾å°çSQLï¼è¿æ¯ä¸é¢çå 容
SET GTID_NEXT= '09530823-4f7d-11e9-b569-00163e121964:1'
insert into users(name) values("tianbowen")
ç±äºè¿ä¸ªGTID卿ºåºä¸å·²ç»åå¨äºï¼æå ¥è®°å½å°ä¼è¢«å¿½ç¥ï¼æ¼ç¤ºå¦ä¸ï¼
mysql> SET GTID_NEXT= '09530823-4f7d-11e9-b569-00163e121964:1';
Query OK, 0 rows affected (0.00 sec)
mysql> insert into users(name) values("tianbowen");
Query OK, 0 rows affected (0.01 sec) #注æè¿éï¼å½±åçè®°å½è¡æ°ä¸º0
注æè¿éï¼å¯¹äºä¸æ¡insertè¯å¥ï¼å ¶å½±åçè®°å½å½æ°å± ç¶ä¸º0ï¼ä¹å°±ä¼æå ¥å¹¶æ²¡æäº§çè®°å½ï¼ä¹å°±ä¸ä¼äº§çbinlogï¼é¿å äºå¾ªç¯é®é¢ã
å¦ä½åå°çå¢ï¼MySQLä¼è®°å½èªå·±æ§è¡è¿çææGTIDï¼å½å¤æä¸ä¸ªGTIDå·²ç»æ§è¡è¿ï¼å°±ä¼å¿½ç¥ãéè¿å¦ä¸sqlæ¥çï¼
ä¸è¿°valueé¨åï¼åå·":?imageView2/2/w/1620"åé¢çæ¯server_uuidï¼åå·åé¢ç1-5ï¼æ¯ä¸ä¸ªèå´ï¼è¡¨ç¤ºå·²ç»æ§è¡è¿1ï¼2ï¼3ï¼4ï¼5è¿ä¸ªå 个transaction_idã
è¿éå°±è½è§£éäºï¼å¨GTID模å¼çæ åµä¸ï¼ä¸ºä»ä¹åé¢çæå ¥è¯å¥å½±åçè®°å½å½æ°ä¸º0äºã
æ¾ç¶ï¼GTIDé¤äºå¯ä»¥å¸®å©æä»¬é¿å æ°æ®åç¯é®é¢ï¼è¿å¯ä»¥å¸®å©æä»¬è§£å³æ°æ®éå¤æå ¥çé®é¢ï¼å¯¹äºä¸æ¡æ²¡æä¸»é®æè å¯ä¸ç´¢å¼çè®°å½ï¼å³ä½¿éå¤æå ¥ä¹æ²¡æï¼åªè¦GTIDå·²ç»æ§è¡è¿ï¼ä¹åçéå¤æå ¥é½ä¼å¿½ç¥ã
å½ç¶ï¼æä»¬è¿å¯ä»¥å徿´å ç»è´ï¼ä¸éè¦æ¯æ¬¡é½å¾ç®æ åºè®¾ç½®GTID_NEXTï¼è¿æ¯ç«æ¯ä¸æ¬¡ç½ç»éä¿¡ã
sql writerå¨å¾ç®æ åºæå ¥æ°æ®ä¹åï¼å å¤æç®æ åºçserver_uuidæ¯ä¸æ¯åå½åbinlogäºå¡ä¿¡æ¯æºå¸¦çserver_uuidç¸åï¼å¦æç¸åï¼åå¯ä»¥ç´æ¥ä¸¢å¼ã
æ¥çç®æ åºçgtidï¼å¯ä»¥éè¿ä»¥ä¸sqlæ§è¡ï¼
GTIDåºè¯¥ç®æ¯ä¸ä¸ªç»æçæ°æ®åç¯è§£å³æ¹æ¡ï¼MySQLåçèªå¸¦ï¼æ¯æ·»å ä¸ä¸ªè¾ å©è¡¨çæ¹å¼æ´è½»éï¼å¼é乿´ä½ã
éè¦æ³¨æçæ¯ï¼è¿å并䏿¯ä¸å®è¯´GTIDçæ¹æ¡å°±æ¯è¾ å©è¡¨å¥½ï¼å ä¸ºè¾ å©è¡¨å¯ä»¥æ·»å æºæ¿çé¢å¤ä¿¡æ¯ã
å¨ä¸äºåºæ¯ä¸ï¼å¦æä¸æ¸¸éè¦ç¥éè¿æ¡è®°å½åå§äº§ççæºæ¿ï¼è¿æ¯éè¦ä½¿ç¨è¾ å©è¡¨ã
åã弿ºç»ä»¶ä»ç»canal/otter
å颿·±å ¥è®²è§£äºåå ååºæ¯ä¸æ°æ®åæ¥çåºç¡ç¥è¯ã读è å¯è½æ¯è¾æå ´è¶£çæ¯ï¼åªäºå¼æºç»ä»¶å¨è¿äºæ¹é¢åçæ¯è¾å¥½ãç¬è 建议çé¦éï¼æ¯canal/otterç»åã
canalçä½ç¨å°±æ¯ç±»ä¼¼äºåé¢æè¿°çbinlog syncerï¼æåè§£æbinlogãotteræ¯canalç客æ·ç«¯ï¼ä¸é¨ç¨äºè¿è¡æ°æ®åæ¥ï¼ç±»ä¼¼äºåææè®²è§£çsql writerãå¹¶ä¸ï¼canalçææ°çæ¬å·²ç»å®ç°äºGTIDã
å¦å¤ï¼ç¬è ä¹å¨èªå·±çå客ä¸åäºä¸ä¸ªcanalç³»åçæºç åææç¨ï¼å®æäºå¤§é¨åãç¸ä¿¡å¯¹äºéè¦æ·±å ¥é 读canalæºç çç¨æ·æä¸å®çåé´æä¹ãç¹å»é 读åæï¼å³å¯æ¥çã