{"id":641,"date":"2018-03-01T14:50:20","date_gmt":"2018-03-01T06:50:20","guid":{"rendered":"https:\/\/blog.jsjs.org\/?p=641"},"modified":"2018-03-01T14:50:20","modified_gmt":"2018-03-01T06:50:20","slug":"%e7%bc%93%e5%ad%98%e4%b8%80%e8%87%b4%e6%80%a7%e5%92%8c%e8%b7%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%9f%a5%e8%af%a2%e7%9a%84%e6%95%b0%e6%8d%ae%e5%bc%82%e6%9e%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88canal","status":"publish","type":"post","link":"https:\/\/blog.jsjs.org\/?p=641","title":{"rendered":"\u7f13\u5b58\u4e00\u81f4\u6027\u548c\u8de8\u670d\u52a1\u5668\u67e5\u8be2\u7684\u6570\u636e\u5f02\u6784\u89e3\u51b3\u65b9\u6848canal"},"content":{"rendered":"<p>https:\/\/www.cnblogs.com\/huangxincheng\/p\/7456397.html<\/p>\n<p>\u5f53\u4f60\u7684\u9879\u76ee\u6570\u636e\u91cf\u4e0a\u53bb\u4e86\u4e4b\u540e\uff0c\u901a\u5e38\u4f1a\u9047\u5230\u4e24\u79cd\u60c5\u51b5\uff0c\u7b2c\u4e00\u79cd\u60c5\u51b5\u5e94\u662f\u6700\u5927\u53ef\u80fd\u7684\u4f7f\u7528cache\u6765\u5bf9\u6297\u4e0a\u5c42\u7684\u9ad8\u5e76\u53d1\uff0c\u7b2c\u4e8c\u79cd\u60c5\u51b5\u540c\u6837\u4e5f\u662f\u9700\u8981\u4f7f\u7528\u5206\u5e93<\/p>\n<p>\u5206\u8868\u5bf9\u6297\u4e0a\u5c42\u7684\u9ad8\u5e76\u53d1\u3002\u3002\u3002\u903c\u903c\u903c\u8d77\u6765\u5bb9\u6613\uff0c\u505a\u8d77\u6765\u5e76\u4e0d\u90a3\u4e48\u4e50\u89c2\uff0c\u7531\u6b64\u5f15\u5165\u7684\u95ee\u9898\uff0c\u4e0d\u89c1\u5f97\u4f60\u6709\u597d\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u4e0b\u9762\u5c31\u5177\u4f53\u5206\u4eab\u4e0b\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u4e00\uff1a\u5c3d\u53ef\u80fd\u7684\u4f7f\u7528Cache<\/p>\n<p>\u6bd4\u5982\u5728\u6211\u4eec\u7684\u5343\u4eba\u5343\u9762\u7cfb\u7edf\u4e2d\uff0c\u4f1a\u9488\u5bf9\u5546\u54c1\uff0c\u8ba2\u5355\u7b49\u7ef4\u5ea6\u4e3a\u67d0\u4e00\u4e2a\u5546\u5bb6\u5e97\u94fa\u81ea\u52a8\u5316\u5efa\u7acb\u5927\u7ea6400\u4e2a\u6570\u636e\u6a21\u578b\uff0c\u7136\u540e\u4e70\u5bb6\u5728\u6dd8\u5b9d\u4e0b\u8ba2\u5355\u4e4b\u540e\uff0c\u6dd8\u5b9d\u4f1a\u5c06\u8ba2\u5355\u63a8<\/p>\n<p>\u9001\u8fc7\u6765\uff0c\u8ba2\u5355\u4f1a\u5728400\u4e2a\u6a21\u578b\u4e2d\u515c\u4e00\u5708\uff0c\u4ece\u800c\u63a8\u9001\u66f4\u8d34\u5207\u7b26\u5408\u8be5\u4e70\u5bb6\u884c\u4e3a\u4e60\u60ef\u7684\u77ed\u4fe1\u548c\u90ae\u4ef6\uff0c\u8fd9\u662f\u4e00\u4e2a\u771f\u5b9e\u7684\u4e1a\u52a1\u573a\u666f\uff0c\u4e3a\u4e86\u5e94\u5bf9\u9ad8\u5e76\u53d1\uff0c\u8fd9\u4e9b\u6a21\u578b\u81ea\u7136\u90fd\u662f\u7f13<\/p>\n<p>\u5b58\u5728Cache\u4e2d\uff0c\u6a21\u578b\u90fd\u662f\u4ecedb\u4e2d\u704c\u5230redis\u7684\uff0c\u90a3\u5982\u679c\u6709\u65b0\u7684\u6a21\u578b\u8fdb\u6765\u4e86\uff0c\u6211\u5982\u4f55\u901a\u77e5redis\u8fdb\u884c\u7f13\u5b58\u66f4\u65b0\u5462\uff1f\uff1f\uff1f\u901a\u5e38\u7684\u505a\u6cd5\u5c31\u662f\u5728\u6dfb\u52a0\u6a21\u578b\u7684\u65f6\u5019\uff0c\u987a\u4fbf\u66f4\u65b0<\/p>\n<p>redis\u3002\u3002\u3002\u5bf9\u5427\uff0c\u5982\u4e0b\u56fe\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images2017.cnblogs.com\/blog\/214741\/201708\/214741-20170830220347577-1429929161.jpg\" alt=\"\" \/><\/p>\n<p>\u8bf4\u7684\u7b80\u5355\uff0cweb\u5f00\u53d1\u7684\u7a0b\u5e8f\u5458\u4f1a\u8bf4\uff0c\u9ebb\u86cb\u7684\uff0c\u6211\u7ba1\u4f60\u4ec0\u4e48\u4e1a\u52a1\uff0c\u66f4\u65b0\u4f60\u59b9\u554a\u3002\u3002\u3002\u6211\u628a\u81ea\u5df1\u7684\u624b\u5934\u4ee3\u7801\u5199\u597d\u5c31\u53ef\u4ee5\u4e86\uff0c\u6211\u8981\u9ad8\u5185\u805a\uff0c\u6240\u4ee5\u4f60\u5fc5\u987b\u78b0\u4e00\u9f3b\u5b50\u7070\u3002<\/p>\n<p>\u9664\u4e86\u4e00\u9f3b\u5b50\u7070\u4e4b\u540e\uff0c\u4e5f\u8bb8\u4f60\u8fd8\u4f1a\u9047\u5230\u66f4\u65b0database\u6210\u529f\uff0c\u518d\u66f4\u65b0redis\u7684\u65f6\u5019\u5931\u8d25\uff0c\u53ef\u4eba\u5bb6\u4e0d\u7ba1\uff0c\u800c\u4e14\u9519\u8bef\u65e5\u5fd7\u8fd8\u662f\u522b\u4eba\u7684\u65e5\u5fd7\u7cfb\u7edf\u91cc\u9762\uff0c\u6240\u4ee5\u4f60\u5f88\u96be\u751a\u81f3<\/p>\n<p>\u65e0\u6cd5\u4fdd\u8bc1\u8fd9\u4e2adb\u548ccache\u7684\u7f13\u5b58\u4e00\u81f4\u6027\uff0c\u90a3\u8fd9\u4e2a\u65f6\u5019\u80fd\u4e0d\u80fd\u6362\u4e2a\u601d\u8def\uff0c\u6211\u76f4\u63a5\u5199\u4e2a\u7a0b\u5e8f\u8ba2\u9605database\u7684binlog\uff0c\u4ecebinlog\u4e2d\u5206\u6790\u51fa\u6a21\u578b\u6570\u636e\u7684CURD\u64cd\u4f5c\uff0c\u6839<\/p>\n<p>\u636e\u8fd9\u4e9bCURD\u7684\u5b9e\u9645\u60c5\u51b5\u66f4\u65b0Redis\u7684\u7f13\u5b58\u6570\u636e\uff0c\u7b2c\u4e00\u4e2a\u53ef\u4ee5\u5b9e\u73b0\u548cweb\u7684\u89e3\u8026\uff0c\u7b2c\u4e8c\u4e2a\u5b9e\u73b0\u4e86\u9ad8\u5ea6\u7684\u7f13\u5b58\u4e00\u81f4\u6027\uff0c\u6240\u4ee5\u65b0\u7684\u67b6\u6784\u662f\u8fd9\u6837\u7684\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images2017.cnblogs.com\/blog\/214741\/201708\/214741-20170830221242296-2089140243.jpg\" alt=\"\" \/><\/p>\n<p>\u4e0a\u9762\u8fd9\u5f20\u56fe\uff0c\u76f8\u4fe1\u5927\u5bb6\u90fd\u80fd\u770b\u5f97\u61c2\uff0c\u91cd\u70b9\u5c31\u662f\u8fd9\u4e2a\u5904\u7406binlog\u7a0b\u5e8f\uff0c\u4ecebinlog\u4e2d\u5206\u6790\u51faCURD\u4ece\u800c\u66f4\u65b0Redis\uff0c\u5176\u5b9e\u8fd9\u4e2abinlog\u7a0b\u5e8f\u5c31\u662f\u672c\u7bc7\u6240\u8bf4\u7684canal\u3002\u3002\u3002<\/p>\n<p>\u4e00\u4e2a\u4f2a\u88c5\u6210mysql\u7684slave\uff0c\u4e0d\u65ad\u7684\u901a\u8fc7dump\u547d\u4ee4\u4ecemysql\u4e2d\u76d7\u51fabinlog\u65e5\u5fd7\uff0c\u4ece\u800c\u5b8c\u7f8e\u7684\u5b9e\u73b0\u4e86\u8fd9\u4e2a\u9700\u6c42\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u4e8c\uff1a\u6570\u636e\u5f02\u6784<\/p>\n<p>\u672c\u7bc7\u5f00\u5934\u4e5f\u8bf4\u5230\u4e86\uff0c\u6570\u636e\u91cf\u5927\u4e86\u4e4b\u540e\uff0c\u5fc5\u7136\u4f1a\u5b58\u5728\u5206\u5e93\u5206\u8868\uff0c\u751a\u81f3database\u90fd\u8981\u5206\u6563\u5230\u591a\u53f0\u670d\u52a1\u5668\u4e0a\uff0c\u73b0\u5728\u7684\u7535\u5546\u9879\u76ee\uff0c\u90fd\u662f\u4e1a\u52a1\u8d76\u7740\u6280\u672f\u8dd1\u3002\u3002\u3002<\/p>\n<p>\u8c01\u4e5f\u4e0d\u77e5\u9053\u4e0b\u4e00\u4e2a\u4e1a\u52a1\u4f1a\u662f\u4e00\u4e2a\u600e\u6837\u7684\u5947\u8469\uff0c\u6240\u4ee5\u5fc5\u7136\u4f1a\u5bfc\u81f4\u4f60\u8981\u505a\u4e00\u4e9b\u8de8\u670d\u52a1\u5668join\u67e5\u8be2\uff0c\u4f60\u4ee5\u4e3a\u81ea\u5df1\u5f88\u806a\u660e\uff0c\u5176\u5b9eDBA\u65e9\u5c31\u628a\u8de8\u670d\u52a1\u5668\u67e5\u8be2\u7684\u51fd\u6570\u7ed9\u4f60<\/p>\n<p>\u5173\u6389\u4e86\uff0c\u6c42\u7239\u7239\u62dc\u5976\u5976\u90fd\u4e0d\u4f1a\u7ed9\u4f60\u5f00\u7684\uff0c\u9664\u975e\u4f60\u6740\u4e00\u4e2aDBA\u796d\u5929\uff0c\u4e0d\u8fc7\u5982\u679c\u4f60\u7684\u4e1a\u52a1\u771f\u7684\u5f88\u91cd\u8981\uff0c\u53ef\u80fdDBA\u4f1a\u7ed9\u4f60\u505a\u6570\u636e\u5f02\u6784\uff0c\u6240\u8c13\u7684\u6570\u636e\u5f02\u6784\uff0c\u90a3\u5c31\u662f<\/p>\n<p>\u5c06\u9700\u8981join\u67e5\u8be2\u7684\u591a\u8868\u6309\u7167\u67d0\u4e00\u4e2a\u7ef4\u5ea6\u53c8\u805a\u5408\u5728\u4e00\u4e2aDB\u4e2d\u3002\u8ba9\u4f60\u53bb\u67e5\u8be2\u3002\u3002\u3002\u3002\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images2017.cnblogs.com\/blog\/214741\/201708\/214741-20170830222659702-1036358360.jpg\" alt=\"\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>\u90a3\u5982\u679c\u7528canal\u6765\u8ba2\u9605binlog\uff0c\u5c31\u53ef\u4ee5\u6539\u9020\u6210\u4e0b\u9762\u8fd9\u79cd\u67b6\u6784\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images2017.cnblogs.com\/blog\/214741\/201708\/214741-20170831092545280-438362403.jpg\" alt=\"\" \/><\/p>\n<p>\u4e09\uff1a\u642d\u5efa\u4e00\u89c8<\/p>\n<p>\u597d\u4e86\uff0ccanal\u7684\u5e94\u7528\u573a\u666f\u7ed9\u5927\u5bb6\u4e5f\u4ecb\u7ecd\u5230\u4e86\uff0c\u6700\u4e3b\u8981\u662f\u7406\u89e3\u8fd9\u79cd\u601d\u60f3\uff0c\u4eba\u5bb6\u641e\u4e0d\u5b9a\u7684\u4e1c\u897f\uff0c\u4f60\u7684\u4ef7\u503c\u5c31\u51fa\u6765\u4e86\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>1. \u00a0\u5f00\u542fmysql\u7684binlog\u529f\u80fd<\/p>\n<p>\u5f00\u542fbinlog\uff0c\u5e76\u4e14\u5c06binlog\u7684\u683c\u5f0f\u6539\u4e3aRow\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u83b7\u53d6\u5230CURD\u7684\u4e8c\u8fdb\u5236\u5185\u5bb9\uff0cwindows\u4e0a\u7684\u8def\u5f84\u4e3a\uff1aC:\\ProgramData\\MySQL\\MySQL Server 5.7\\my.ini\u3002<\/p>\n<div class=\"cnblogs_code\">\n<pre>1 log-bin=mysql-bin #\u6dfb\u52a0\u8fd9\u4e00\u884c\u5c31ok\n2 binlog-format=ROW #\u9009\u62e9row\u6a21\u5f0f\n3 server_id=1<\/pre>\n<\/div>\n<p><img decoding=\"async\" src=\"https:\/\/images2017.cnblogs.com\/blog\/214741\/201708\/214741-20170831114426140-1293757349.jpg\" alt=\"\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>2. \u9a8c\u8bc1binlog\u662f\u5426\u5f00\u542f<\/p>\n<p>\u4f7f\u7528\u547d\u4ee4\u9a8c\u8bc1\uff0c\u5e76\u4e14\u5f00\u542fbinlog\u7684\u8fc7\u671f\u65f6\u95f4\u4e3a30\u5929\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0bbinlog\u662f\u4e0d\u8fc7\u671f\u7684\uff0c\u8fd9\u5c31\u5bfc\u81f4\u4f60\u7684\u78c1\u76d8\u53ef\u80fd\u4f1a\u7206\u6ee1\uff0c\u76f4\u5230\u6302\u6389\u3002<\/p>\n<div class=\"cnblogs_code\">\n<pre>1 show variables like 'log_%';\n2\n3 #\u8bbe\u7f6ebinlog\u7684\u8fc7\u671f\u65f6\u95f4\u4e3a30\u5929\n4 show variables like '%expire_logs_days%';\n5 set global expire_logs_days=30;<\/pre>\n<\/div>\n<p><img decoding=\"async\" src=\"https:\/\/images2017.cnblogs.com\/blog\/214741\/201708\/214741-20170831080103733-1809860881.png\" alt=\"\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>3. \u7ed9canal\u670d\u52a1\u5668\u5206\u914d\u4e00\u4e2amysql\u7684\u8d26\u53f7\u6743\u9650\uff0c\u65b9\u4fbfcanal\u53bb\u5077binlog\u65e5\u5fd7\u3002<\/p>\n<div class=\"cnblogs_code\">\n<pre>CREATE USER canal IDENTIFIED BY 'canal';\nGRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';\nFLUSH PRIVILEGES;\n\nshow grants for 'canal'<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>4. \u4e0b\u8f7dcanal<\/p>\n<p>github\u7684\u5730\u5740\uff1a https:\/\/github.com\/alibaba\/canal\/releases<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images2017.cnblogs.com\/blog\/214741\/201708\/214741-20170830225940874-1855357967.jpg\" alt=\"\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>5. \u7136\u540e\u5c31\u662f\u5404\u79cdtar\u89e3\u538b\u00a0canal.deployer-1.0.24.tar.gz \u00a0=&gt; canal<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>[root@localhost myapp]# ls\napache-maven-3.5.0-bin.tar.gz                        dubbo-monitor-simple-2.5.4-SNAPSHOT.jar     nginx                tengine-2.2.0.tar.gz\ncanal                                                gearmand                                    nginx-1.13.4.tar.gz  tengine_st\ncanal.deployer-1.0.24.tar.gz                         gearmand-1.1.17                             nginx_st             tomcat\ndubbo                                                gearmand-1.1.17.tar.gz                      redis                zookeeper\ndubbo-monitor-simple-2.5.4-SNAPSHOT                  maven                                       redis-4.0.1.tar.gz   zookeeper-3.4.9.tar.gz\ndubbo-monitor-simple-2.5.4-SNAPSHOT-assembly.tar.gz  mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz  tengine\n[root@localhost myapp]# cd canal\n[root@localhost canal]# ls\nbin  conf  lib  logs\n[root@localhost canal]# cd conf\n[root@localhost conf]# ls\ncanal.properties  example  logback.xml  spring\n[root@localhost conf]# cd example\n[root@localhost example]# ls\ninstance.properties  meta.dat\n[root@localhost example]#<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>6. canal \u548c instance \u914d\u7f6e\u6587\u4ef6<\/p>\n<p>canal\u7684\u6a21\u5f0f\u662f\u8fd9\u6837\u7684\uff0c\u4e00\u4e2acanal\u91cc\u9762\u53ef\u80fd\u4f1a\u6709\u591a\u4e2ainstance\uff0c\u4e5f\u5c31\u8bf4\u4e00\u4e2ainstance\u53ef\u4ee5\u76d1\u63a7\u4e00\u4e2amysql\u5b9e\u4f8b\uff0c\u591a\u4e2ainstance\u4e5f\u5c31\u53ef\u4ee5\u5bf9\u5e94\u591a\u53f0\u670d\u52a1\u5668<\/p>\n<p>\u7684mysql\u5b9e\u4f8b\u3002\u4e5f\u5c31\u662f\u4e00\u4e2acanal\u5c31\u53ef\u4ee5\u76d1\u63a7\u5206\u5e93\u5206\u8868\u4e0b\u7684\u591a\u673a\u5668mysql\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u300a1\u300b canal.properties<\/p>\n<p>\u5b83\u662f\u5168\u5c40\u6027\u7684canal\u670d\u52a1\u5668\u914d\u7f6e\uff0c\u5177\u4f53\u5982\u4e0b\uff0c\u8fd9\u91cc\u9762\u7684\u53c2\u6570\u6d89\u53ca\u5230\u65b9\u65b9\u9762\u9762\u3002<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>#################################################\n#########               common argument         #############\n#################################################\ncanal.id= 1\ncanal.ip=\ncanal.port= 11111\ncanal.zkServers=\n# flush data to zk\ncanal.zookeeper.flush.period = 1000\n# flush meta cursor\/parse position to file\ncanal.file.data.dir = ${canal.conf.dir}\ncanal.file.flush.period = 1000\n## memory store RingBuffer size, should be Math.pow(2,n)\ncanal.instance.memory.buffer.size = 16384\n## memory store RingBuffer used memory unit size , default 1kb\ncanal.instance.memory.buffer.memunit = 1024\n## meory store gets mode used MEMSIZE or ITEMSIZE\ncanal.instance.memory.batch.mode = MEMSIZE\n\n## detecing config\ncanal.instance.detecting.enable = false\n#canal.instance.detecting.sql = insert into retl.xdual values(1,now()) on duplicate key update x=now()\ncanal.instance.detecting.sql = select 1\ncanal.instance.detecting.interval.time = 3\ncanal.instance.detecting.retry.threshold = 3\ncanal.instance.detecting.heartbeatHaEnable = false\n\n# support maximum transaction size, more than the size of the transaction will be cut into multiple transactions delivery\ncanal.instance.transaction.size =  1024\n# mysql fallback connected to new master should fallback times\ncanal.instance.fallbackIntervalInSeconds = 60\n\n# network config\ncanal.instance.network.receiveBufferSize = 16384\ncanal.instance.network.sendBufferSize = 16384\ncanal.instance.network.soTimeout = 30\n\n# binlog filter config\ncanal.instance.filter.query.dcl = false\ncanal.instance.filter.query.dml = false\ncanal.instance.filter.query.ddl = false\ncanal.instance.filter.table.error = false\ncanal.instance.filter.rows = false\n\n# binlog format\/image check\ncanal.instance.binlog.format = ROW,STATEMENT,MIXED\ncanal.instance.binlog.image = FULL,MINIMAL,NOBLOB\n\n# binlog ddl isolation\ncanal.instance.get.ddl.isolation = false\n\n#################################################\n#########               destinations            #############\n#################################################\ncanal.destinations= example\n# conf root dir\ncanal.conf.dir = ..\/conf\n# auto scan instance dir add\/remove and start\/stop instance\ncanal.auto.scan = true\ncanal.auto.scan.interval = 5\n\ncanal.instance.global.mode = spring\ncanal.instance.global.lazy = false\n#canal.instance.global.manager.address = 127.0.0.1:1099\n#canal.instance.global.spring.xml = classpath:spring\/memory-instance.xml\ncanal.instance.global.spring.xml = classpath:spring\/file-instance.xml\n#canal.instance.global.spring.xml = classpath:spring\/default-instance.xml\n\n#################################################\n## mysql serverId\ncanal.instance.mysql.slaveId = 1234\n\n# position info\uff0c\u9700\u8981\u6539\u6210\u81ea\u5df1\u7684\u6570\u636e\u5e93\u4fe1\u606f\ncanal.instance.master.address = 127.0.0.1:3306\ncanal.instance.master.journal.name =\ncanal.instance.master.position =\ncanal.instance.master.timestamp =\n\n#canal.instance.standby.address =\n#canal.instance.standby.journal.name =\n#canal.instance.standby.position =\n#canal.instance.standby.timestamp =\n\n# username\/password\uff0c\u9700\u8981\u6539\u6210\u81ea\u5df1\u7684\u6570\u636e\u5e93\u4fe1\u606f\ncanal.instance.dbUsername = root\ncanal.instance.dbPassword = 123456\ncanal.instance.defaultDatabaseName = datamip\ncanal.instance.connectionCharset = UTF-8\n\n# table regex\ncanal.instance.filter.regex = .*\\\\..*\n\n#################################################<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>\u7531\u4e8e\u662f\u5168\u5c40\u6027\u7684\u914d\u7f6e\uff0c\u6240\u4ee5\u4e0a\u9762\u4e09\u5904\u6807\u7ea2\u7684\u5730\u65b9\u8981\u6ce8\u610f\u4e00\u4e0b\uff1a<\/p>\n<p>canal.port= 11111\u3000\u3000\u3000\u3000\u3000\u3000 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u5f53\u524dcanal\u7684\u670d\u52a1\u5668\u7aef\u53e3\u53f7<\/p>\n<p>canal.destinations= example \u00a0\u3000\u3000\u3000\u3000\u5f53\u524d\u9ed8\u8ba4\u5f00\u542f\u4e86\u4e00\u4e2a\u540d\u4e3aexample\u7684instance\u5b9e\u4f8b\uff0c\u5982\u679c\u60f3\u5f00\u591a\u4e2ainstance\uff0c\u7528&#8221;,&#8221;\u9017\u53f7\u9694\u5f00\u5c31\u53ef\u4ee5\u4e86\u3002\u3002\u3002<\/p>\n<p>canal.instance.filter.regex = .*\\\\..* \u00a0\u3000\u3000mysql\u5b9e\u4f8b\u4e0b\u7684\u6240\u6709db\u7684\u6240\u6709\u8868\u90fd\u5728\u76d1\u63a7\u8303\u56f4\u5185\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u300a2\u300b\u00a0instance.properties<\/p>\n<p>\u8fd9\u4e2a\u5c31\u662f\u5177\u4f53\u7684\u67d0\u4e2ainstances\u5b9e\u4f8b\u7684\u914d\u7f6e\uff0c\u672a\u6d89\u53ca\u5230\u7684\u914d\u7f6e\u90fd\u4f1a\u4ececanal.properties\u4e0a\u7ee7\u627f\u3002<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>#################################################\n## mysql serverId\ncanal.instance.mysql.slaveId = 1234\n\n# position info\ncanal.instance.master.address = 192.168.23.1:3306\ncanal.instance.master.journal.name =\ncanal.instance.master.position =\ncanal.instance.master.timestamp =\n\n#canal.instance.standby.address =\n#canal.instance.standby.journal.name =\n#canal.instance.standby.position =\n#canal.instance.standby.timestamp =\n\n# username\/password\ncanal.instance.dbUsername = canal\ncanal.instance.dbPassword = canal\ncanal.instance.defaultDatabaseName =datamip\ncanal.instance.connectionCharset = UTF-8\n\n# table regex\ncanal.instance.filter.regex = .*\\\\..*\n# table black regex\ncanal.instance.filter.black.regex =\n\n#################################################<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>\u4e0a\u9762\u6807\u7ea2\u7684\u5730\u65b9\u6ce8\u610f\u4e0b\u5c31\u597d\u4e86\uff0c\u53bb\u5077binlog\u7684\u65f6\u5019\uff0c\u9700\u8981\u77e5\u9053\u7684mysql\u5730\u5740\u548c\u7528\u6237\u540d,\u5bc6\u7801\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>7. \u5f00\u542fcanal<\/p>\n<p>\u5927\u5bb6\u8981\u8bb0\u5f97\u628a\/canal\/bin \u76ee\u5f55\u914d\u7f6e\u5230 \/etc\/profile \u7684 Path\u4e2d\uff0c\u65b9\u4fbf\u5feb\u901f\u5f00\u542f\uff0c\u901a\u8fc7\u4e0b\u56fe\u4f60\u4f1a\u770b\u523011111\u7aef\u53e3\u5df2\u7ecf\u5728centos\u4e0a\u5f00\u542f\u4e86\u3002<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>[root@localhost bin]# ls\ncanal.pid  startup.bat  startup.sh  stop.sh\n[root@localhost bin]# pwd\n\/usr\/myapp\/canal\/bin\n[root@localhost example]# startup.sh\ncd to \/usr\/myapp\/canal\/bin for workaround relative path\nLOG CONFIGURATION : \/usr\/myapp\/canal\/bin\/..\/conf\/logback.xml\ncanal conf : \/usr\/myapp\/canal\/bin\/..\/conf\/canal.properties\nCLASSPATH :\/usr\/myapp\/canal\/bin\/..\/conf:\/usr\/myapp\/canal\/bin\/..\/lib\/zookeeper-3.4.5.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/zkclient-0.1.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/spring-2.5.6.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/slf4j-api-1.7.12.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/protobuf-java-2.6.1.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/oro-2.0.8.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/netty-all-4.1.6.Final.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/netty-3.2.5.Final.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/logback-core-1.1.3.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/logback-classic-1.1.3.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/log4j-1.2.14.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/jcl-over-slf4j-1.7.12.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/guava-18.0.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/fastjson-1.2.28.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/commons-logging-1.1.1.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/commons-lang-2.6.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/commons-io-2.4.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/commons-beanutils-1.8.2.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/canal.store-1.0.24.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/canal.sink-1.0.24.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/canal.server-1.0.24.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/canal.protocol-1.0.24.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/canal.parse.driver-1.0.24.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/canal.parse.dbsync-1.0.24.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/canal.parse-1.0.24.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/canal.meta-1.0.24.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/canal.instance.spring-1.0.24.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/canal.instance.manager-1.0.24.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/canal.instance.core-1.0.24.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/canal.filter-1.0.24.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/canal.deployer-1.0.24.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/canal.common-1.0.24.jar:\/usr\/myapp\/canal\/bin\/..\/lib\/aviator-2.2.1.jar:\ncd to \/usr\/myapp\/canal\/conf\/example for continue\n[root@localhost example]# netstat -tln\nActive Internet connections (only servers)\nProto Recv-Q Send-Q Local Address           Foreign Address         State\ntcp        0      0 0.0.0.0:11111           0.0.0.0:*               LISTEN\ntcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN\ntcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN\ntcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN\ntcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN\ntcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN\ntcp6       0      0 :::111                  :::*                    LISTEN\ntcp6       0      0 :::22                   :::*                    LISTEN\ntcp6       0      0 ::1:631                 :::*                    LISTEN\ntcp6       0      0 ::1:25                  :::*                    LISTEN\n[root@localhost example]#<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>8. Java Client \u4ee3\u7801<\/p>\n<p>canal driver \u9700\u8981\u5728maven\u4ed3\u5e93\u4e2d\u83b7\u53d6\u4e00\u4e0b\uff1ahttp:\/\/www.mvnrepository.com\/artifact\/com.alibaba.otter\/canal.client\/1.0.24\uff0c\u4e0d\u8fc7\u4f9d\u8d56\u8fd8\u662f\u86ee\u591a\u7684\u3002<\/p>\n<div class=\"cnblogs_code\">\n<pre>        &lt;!-- https:\/\/mvnrepository.com\/artifact\/com.alibaba.otter\/canal.client --&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;com.alibaba.otter&lt;\/groupId&gt;\n            &lt;artifactId&gt;canal.client&lt;\/artifactId&gt;\n            &lt;version&gt;1.0.24&lt;\/version&gt;\n        &lt;\/dependency&gt;<\/pre>\n<\/div>\n<p><img decoding=\"async\" src=\"https:\/\/images2017.cnblogs.com\/blog\/214741\/201708\/214741-20170830231949452-1721463308.jpg\" alt=\"\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>9. \u542f\u52a8java\u4ee3\u7801\u8fdb\u884c\u9a8c\u8bc1<\/p>\n<p>\u4e0b\u9762\u7684\u4ee3\u7801\u5bf9table\u7684CURD\u90fd\u505a\u4e86\u4e00\u4e2a\u57fa\u672c\u7684\u5224\u65ad\uff0c\u770b\u770b\u662f\u4e0d\u662f\u80fd\u591f\u667a\u80fd\u611f\u77e5\uff0c\u7136\u540e\u53ef\u4ee5\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8fdb\u884credis\u7684\u66f4\u65b0\u64cd\u4f5c\u3002\u3002\u3002<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.datamip.canal;\n\nimport java.awt.Event;\nimport java.net.InetSocketAddress;\nimport java.util.List;\n\nimport com.alibaba.otter.canal.client.CanalConnector;\nimport com.alibaba.otter.canal.client.CanalConnectors;\nimport com.alibaba.otter.canal.protocol.CanalEntry.Column;\nimport com.alibaba.otter.canal.protocol.CanalEntry.Entry;\nimport com.alibaba.otter.canal.protocol.CanalEntry.EntryType;\nimport com.alibaba.otter.canal.protocol.CanalEntry.EventType;\nimport com.alibaba.otter.canal.protocol.CanalEntry.Header;\nimport com.alibaba.otter.canal.protocol.CanalEntry.RowChange;\nimport com.alibaba.otter.canal.protocol.Message;\nimport com.google.protobuf.InvalidProtocolBufferException;\n\npublic class App {\n\n    public static void main(String[] args) throws InterruptedException {\n\n        \/\/ \u7b2c\u4e00\u6b65\uff1a\u4e0ecanal\u8fdb\u884c\u8fde\u63a5\n        CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(\"192.168.23.170\", 11111),\n                \"example\", \"\", \"\");\n        connector.connect();\n\n        \/\/ \u7b2c\u4e8c\u6b65\uff1a\u5f00\u542f\u8ba2\u9605\n        connector.subscribe();\n\n        \/\/ \u7b2c\u4e09\u6b65\uff1a\u5faa\u73af\u8ba2\u9605\n        while (true) {\n            try {\n                \/\/ \u6bcf\u6b21\u8bfb\u53d6 1000 \u6761\n                Message message = connector.getWithoutAck(1000);\n\n                long batchID = message.getId();\n\n                int size = message.getEntries().size();\n\n                if (batchID == -1 || size == 0) {\n                    System.out.println(\"\u5f53\u524d\u6682\u65f6\u6ca1\u6709\u6570\u636e\");\n                    Thread.sleep(1000); \/\/ \u6ca1\u6709\u6570\u636e\n                } else {\n                    System.out.println(\"-------------------------- \u6709\u6570\u636e\u5566 -----------------------\");\n                    PrintEntry(message.getEntries());\n                }\n\n                \/\/ position id ack \uff08\u65b9\u4fbf\u5904\u7406\u4e0b\u4e00\u6761\uff09\n                connector.ack(batchID);\n\n            } catch (Exception e) {\n                \/\/ TODO: handle exception\n\n            } finally {\n                Thread.sleep(1000);\n            }\n        }\n    }\n\n    \/\/ \u83b7\u53d6\u6bcf\u6761\u6253\u5370\u7684\u8bb0\u5f55\n    @SuppressWarnings(\"static-access\")\n    public static void PrintEntry(List&lt;Entry&gt; entrys) {\n\n        for (Entry entry : entrys) {\n\n            \/\/ \u7b2c\u4e00\u6b65\uff1a\u62c6\u89e3entry \u5b9e\u4f53\n            Header header = entry.getHeader();\n            EntryType entryType = entry.getEntryType();\n\n            \/\/ \u7b2c\u4e8c\u6b65\uff1a \u5982\u679c\u5f53\u524d\u662fRowData\uff0c\u90a3\u5c31\u662f\u6211\u9700\u8981\u7684\u6570\u636e\n            if (entryType == EntryType.ROWDATA) {\n\n                String tableName = header.getTableName();\n                String schemaName = header.getSchemaName();\n\n                RowChange rowChange = null;\n\n                try {\n                    rowChange = RowChange.parseFrom(entry.getStoreValue());\n                } catch (InvalidProtocolBufferException e) {\n                    e.printStackTrace();\n                }\n\n                EventType eventType = rowChange.getEventType();\n\n                System.out.println(String.format(\"\u5f53\u524d\u6b63\u5728\u64cd\u4f5c %s.%s\uff0c Action= %s\", schemaName, tableName, eventType));\n\n                \/\/ \u5982\u679c\u662f\u2018\u67e5\u8be2\u2019 \u6216\u8005 \u662f \u2018DDL\u2019 \u64cd\u4f5c\uff0c\u90a3\u4e48sql\u76f4\u63a5\u6253\u51fa\u6765\n                if (eventType == EventType.QUERY || rowChange.getIsDdl()) {\n                    System.out.println(\"rowchange sql -----&gt;\" + rowChange.getSql());\n                    return;\n                }\n\n                \/\/ \u7b2c\u4e09\u6b65\uff1a\u8ffd\u8e2a\u5230 columns \u7ea7\u522b\n                rowChange.getRowDatasList().forEach((rowData) -&gt; {\n\n                    \/\/ \u83b7\u53d6\u66f4\u65b0\u4e4b\u524d\u7684column\u60c5\u51b5\n                    List&lt;Column&gt; beforeColumns = rowData.getBeforeColumnsList();\n\n                    \/\/ \u83b7\u53d6\u66f4\u65b0\u4e4b\u540e\u7684 column \u60c5\u51b5\n                    List&lt;Column&gt; afterColumns = rowData.getAfterColumnsList();\n\n                    \/\/ \u5f53\u524d\u6267\u884c\u7684\u662f \u5220\u9664\u64cd\u4f5c\n                    if (eventType == EventType.DELETE) {\n                        PrintColumn(beforeColumns);\n                    }\n\n                    \/\/ \u5f53\u524d\u6267\u884c\u7684\u662f \u63d2\u5165\u64cd\u4f5c\n                    if (eventType == eventType.INSERT) {\n                        PrintColumn(afterColumns);\n                    }\n\n                    \/\/ \u5f53\u524d\u6267\u884c\u7684\u662f \u66f4\u65b0\u64cd\u4f5c\n                    if (eventType == eventType.UPDATE) {\n                        PrintColumn(afterColumns);\n                    }\n                });\n            }\n        }\n    }\n\n    \/\/ \u6bcf\u4e2arow\u4e0a\u9762\u7684\u6bcf\u4e00\u4e2acolumn \u7684\u66f4\u6539\u60c5\u51b5\n    public static void PrintColumn(List&lt;Column&gt; columns) {\n\n        columns.forEach((column) -&gt; {\n\n            String columnName = column.getName();\n            String columnValue = column.getValue();\n            String columnType = column.getMysqlType();\n            boolean isUpdated = column.getUpdated(); \/\/ \u5224\u65ad \u8be5\u5b57\u6bb5\u662f\u5426\u66f4\u65b0\n\n            System.out.println(String.format(\"columnName=%s, columnValue=%s, columnType=%s, isUpdated=%s\", columnName,\n                    columnValue, columnType, isUpdated));\n\n        });\n\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&lt;1&gt; Update\u64cd\u4f5c<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images2017.cnblogs.com\/blog\/214741\/201708\/214741-20170830233135374-1571912750.jpg\" alt=\"\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&lt;2&gt; Insert\u64cd\u4f5c<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images2017.cnblogs.com\/blog\/214741\/201708\/214741-20170830232920265-1913623800.jpg\" alt=\"\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&lt;3&gt; Delete \u64cd\u4f5c<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images2017.cnblogs.com\/blog\/214741\/201708\/214741-20170830233319499-1372352367.jpg\" alt=\"\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\u4ece\u7ed3\u679c\u4e2d\u770b\uff0c\u6ca1\u6bdb\u75c5\uff0c\u6709\u56fe\u6709\u771f\u76f8\uff0c\u597d\u4e86\uff0c\u672c\u7bc7\u5c31\u8bf4\u5230\u8fd9\u91cc\uff0c\u5bf9\u4e8e\u5f00\u53d1\u7684\u4f60\uff0c\u80af\u5b9a\u662f\u6709\u5e2e\u52a9\u7684~~~<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/www.cnblogs.com\/huangxincheng\/p\/7456397.html \u5f53\u4f60\u7684\u9879\u76ee\u6570\u636e\u91cf\u4e0a\u53bb\u4e86\u4e4b\u540e\uff0c\u901a\u5e38\u4f1a\u9047\u5230\u4e24\u79cd\u60c5\u51b5\uff0c\u7b2c\u4e00\u79cd\u60c5\u51b5\u5e94\u662f\u6700\u5927\u53ef\u80fd\u7684\u4f7f\u7528cache\u6765\u5bf9\u6297\u4e0a\u5c42\u7684\u9ad8\u5e76\u53d1\uff0c\u7b2c\u4e8c\u79cd\u60c5\u51b5\u540c\u6837\u4e5f\u662f\u9700\u8981\u4f7f\u7528\u5206\u5e93 \u5206\u8868\u5bf9\u6297\u4e0a\u5c42\u7684\u9ad8\u5e76\u53d1\u3002\u3002\u3002\u903c\u903c\u903c\u8d77\u6765\u5bb9\u6613\uff0c\u505a\u8d77\u6765\u5e76\u4e0d\u90a3\u4e48\u4e50\u89c2\uff0c\u7531\u6b64\u5f15\u5165\u7684\u95ee\u9898\uff0c\u4e0d\u89c1\u5f97\u4f60\u6709\u597d\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u4e0b\u9762\u5c31\u5177\u4f53\u5206\u4eab\u4e0b\u3002 &nbsp; \u4e00\uff1a\u5c3d\u53ef\u80fd\u7684\u4f7f\u7528Cache \u6bd4\u5982\u5728\u6211\u4eec\u7684\u5343\u4eba\u5343\u9762\u7cfb\u7edf\u4e2d\uff0c\u4f1a\u9488\u5bf9\u5546\u54c1\uff0c\u8ba2\u5355\u7b49\u7ef4\u5ea6\u4e3a\u67d0\u4e00\u4e2a\u5546\u5bb6\u5e97\u94fa\u81ea\u52a8\u5316\u5efa\u7acb\u5927\u7ea6400\u4e2a\u6570\u636e\u6a21\u578b\uff0c\u7136\u540e\u4e70\u5bb6\u5728\u6dd8\u5b9d\u4e0b\u8ba2\u5355\u4e4b\u540e\uff0c\u6dd8\u5b9d\u4f1a\u5c06\u8ba2\u5355\u63a8 \u9001\u8fc7\u6765\uff0c\u8ba2\u5355\u4f1a\u5728400\u4e2a\u6a21\u578b\u4e2d\u515c\u4e00\u5708\uff0c\u4ece\u800c\u63a8\u9001\u66f4\u8d34\u5207\u7b26\u5408\u8be5\u4e70\u5bb6\u884c\u4e3a\u4e60\u60ef\u7684\u77ed\u4fe1\u548c\u90ae\u4ef6\uff0c\u8fd9\u662f\u4e00\u4e2a\u771f\u5b9e\u7684\u4e1a\u52a1\u573a\u666f\uff0c\u4e3a\u4e86\u5e94\u5bf9\u9ad8\u5e76\u53d1\uff0c\u8fd9\u4e9b\u6a21\u578b\u81ea\u7136\u90fd\u662f\u7f13 \u5b58\u5728Cache\u4e2d\uff0c\u6a21\u578b\u90fd\u662f\u4ecedb\u4e2d\u704c\u5230redis\u7684\uff0c\u90a3\u5982\u679c\u6709\u65b0\u7684\u6a21\u578b\u8fdb\u6765\u4e86\uff0c\u6211\u5982\u4f55\u901a\u77e5redis\u8fdb\u884c\u7f13\u5b58\u66f4\u65b0\u5462\uff1f\uff1f\uff1f\u901a\u5e38\u7684\u505a\u6cd5\u5c31\u662f\u5728\u6dfb\u52a0\u6a21\u578b\u7684\u65f6\u5019\uff0c\u987a\u4fbf\u66f4\u65b0 redis\u3002\u3002\u3002\u5bf9\u5427\uff0c\u5982\u4e0b\u56fe\uff1a \u8bf4\u7684\u7b80\u5355\uff0cweb\u5f00\u53d1\u7684\u7a0b\u5e8f\u5458\u4f1a\u8bf4\uff0c\u9ebb\u86cb\u7684\uff0c\u6211\u7ba1\u4f60\u4ec0\u4e48\u4e1a\u52a1\uff0c\u66f4\u65b0\u4f60\u59b9\u554a\u3002\u3002\u3002\u6211\u628a\u81ea\u5df1\u7684\u624b\u5934\u4ee3\u7801\u5199\u597d\u5c31\u53ef\u4ee5\u4e86\uff0c\u6211\u8981\u9ad8\u5185\u805a\uff0c\u6240\u4ee5\u4f60\u5fc5\u987b\u78b0\u4e00\u9f3b\u5b50\u7070\u3002 \u9664\u4e86\u4e00\u9f3b\u5b50\u7070\u4e4b\u540e\uff0c\u4e5f\u8bb8\u4f60\u8fd8\u4f1a\u9047\u5230\u66f4\u65b0database\u6210\u529f\uff0c\u518d\u66f4\u65b0redis\u7684\u65f6\u5019\u5931\u8d25\uff0c\u53ef\u4eba\u5bb6\u4e0d\u7ba1\uff0c\u800c\u4e14\u9519\u8bef\u65e5\u5fd7\u8fd8\u662f\u522b\u4eba\u7684\u65e5\u5fd7\u7cfb\u7edf\u91cc\u9762\uff0c\u6240\u4ee5\u4f60\u5f88\u96be\u751a\u81f3 \u65e0\u6cd5\u4fdd\u8bc1\u8fd9\u4e2adb\u548ccache\u7684\u7f13\u5b58\u4e00\u81f4\u6027\uff0c\u90a3\u8fd9\u4e2a\u65f6\u5019\u80fd\u4e0d\u80fd\u6362\u4e2a\u601d\u8def\uff0c\u6211\u76f4\u63a5\u5199\u4e2a\u7a0b\u5e8f\u8ba2\u9605database\u7684binlog\uff0c\u4ecebinlog\u4e2d\u5206\u6790\u51fa\u6a21\u578b\u6570\u636e\u7684CURD\u64cd\u4f5c\uff0c\u6839 \u636e\u8fd9\u4e9bCURD\u7684\u5b9e\u9645\u60c5\u51b5\u66f4\u65b0Redis\u7684\u7f13\u5b58\u6570\u636e\uff0c\u7b2c\u4e00\u4e2a\u53ef\u4ee5\u5b9e\u73b0\u548cweb\u7684\u89e3\u8026\uff0c\u7b2c\u4e8c\u4e2a\u5b9e\u73b0\u4e86\u9ad8\u5ea6\u7684\u7f13\u5b58\u4e00\u81f4\u6027\uff0c\u6240\u4ee5\u65b0\u7684\u67b6\u6784\u662f\u8fd9\u6837\u7684\u3002 \u4e0a\u9762\u8fd9\u5f20\u56fe\uff0c\u76f8\u4fe1\u5927\u5bb6\u90fd\u80fd\u770b\u5f97\u61c2\uff0c\u91cd\u70b9\u5c31\u662f\u8fd9\u4e2a\u5904\u7406binlog\u7a0b\u5e8f\uff0c\u4ecebinlog\u4e2d\u5206\u6790\u51faCURD\u4ece\u800c\u66f4\u65b0Redis\uff0c\u5176\u5b9e\u8fd9\u4e2abinlog\u7a0b\u5e8f\u5c31\u662f\u672c\u7bc7\u6240\u8bf4\u7684canal\u3002\u3002\u3002 \u4e00\u4e2a\u4f2a\u88c5\u6210mysql\u7684slave\uff0c\u4e0d\u65ad\u7684\u901a\u8fc7dump\u547d\u4ee4\u4ecemysql\u4e2d\u76d7\u51fabinlog\u65e5\u5fd7\uff0c\u4ece\u800c\u5b8c\u7f8e\u7684\u5b9e\u73b0\u4e86\u8fd9\u4e2a\u9700\u6c42\u3002 &nbsp; \u4e8c\uff1a\u6570\u636e\u5f02\u6784 \u672c\u7bc7\u5f00\u5934\u4e5f\u8bf4\u5230\u4e86\uff0c\u6570\u636e\u91cf\u5927\u4e86\u4e4b\u540e\uff0c\u5fc5\u7136\u4f1a\u5b58\u5728\u5206\u5e93\u5206\u8868\uff0c\u751a\u81f3database\u90fd\u8981\u5206\u6563\u5230\u591a\u53f0\u670d\u52a1\u5668\u4e0a\uff0c\u73b0\u5728\u7684\u7535\u5546\u9879\u76ee\uff0c\u90fd\u662f\u4e1a\u52a1\u8d76\u7740\u6280\u672f\u8dd1\u3002\u3002\u3002 \u8c01\u4e5f\u4e0d\u77e5\u9053\u4e0b\u4e00\u4e2a\u4e1a\u52a1\u4f1a\u662f\u4e00\u4e2a\u600e\u6837\u7684\u5947\u8469\uff0c\u6240\u4ee5\u5fc5\u7136\u4f1a\u5bfc\u81f4\u4f60\u8981\u505a\u4e00\u4e9b\u8de8\u670d\u52a1\u5668join\u67e5\u8be2\uff0c\u4f60\u4ee5\u4e3a\u81ea\u5df1\u5f88\u806a\u660e\uff0c\u5176\u5b9eDBA\u65e9\u5c31\u628a\u8de8\u670d\u52a1\u5668\u67e5\u8be2\u7684\u51fd\u6570\u7ed9\u4f60 \u5173\u6389\u4e86\uff0c\u6c42\u7239\u7239\u62dc\u5976\u5976\u90fd\u4e0d\u4f1a\u7ed9\u4f60\u5f00\u7684\uff0c\u9664\u975e\u4f60\u6740\u4e00\u4e2aDBA\u796d\u5929\uff0c\u4e0d\u8fc7\u5982\u679c\u4f60\u7684\u4e1a\u52a1\u771f\u7684\u5f88\u91cd\u8981\uff0c\u53ef\u80fdDBA\u4f1a\u7ed9\u4f60\u505a\u6570\u636e\u5f02\u6784\uff0c\u6240\u8c13\u7684\u6570\u636e\u5f02\u6784\uff0c\u90a3\u5c31\u662f [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-641","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/641","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=641"}],"version-history":[{"count":0,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/641\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=641"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=641"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=641"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}