搭建 canal 监控mysql数据到RabbitMQ_canal监听mysql,那mysql必要做什么配 ...

打印 上一主题 下一主题

主题 542|帖子 542|积分 1626

先自我先容一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是本身摸索发展,但本身不成体系的自学效果低效又漫长,而且极易碰到天花板技能故步自封!
因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简朴,就是盼望能够资助到想自学提升又不知道该从何学起的朋侪。





既有得当小白学习的零底子资料,也有得当3年以上经验的小同伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习条记、源码讲义、实战项目、大纲蹊径、解说视频,并且后续会连续更新
假如你必要这些资料,可以添加V获取:vip204888 (备注大数据)

正文

使用canal监控mysql某个库某个表,或者多个库,多个表---- update/inster/create 操作,
系统版本mysql版本java版本canal版本rabbitMQ版本Rocky 9.2MySQL 8.0.26openjdk 11.0.221.1.6rabbitmq-server 3.12.4 mysql 设置搭建
作者使用的mysql设置文件是上述文章内里 { mysql 主从同步 主节点 设置文件 }
MySQL 设置

   开启 binlog 首先在 mysql 的设置文件目录中查找设置文件 my.cnf
(mysql假如有主从的话,这一步可略过,canal 在mysql 主库搭建)
  1. vim my.cnf
  2. server-id=1        #master端的ID号【必须是唯一的】;
  3. log\_bin=mysql-bin        #同步的日志路径,一定注意这个目录要是mysql有权限写入的
  4. binlog-format=row        #行级,记录每次操作后每行记录的变化。
  5. mysql 创建canal用户
  6. CREATE USER canal IDENTIFIED BY 'canal';   #创建用户名和密码都为 canal 的用户
  7. GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; #授予该用户对所有数据库和表的查询、复制主节点数据的操作权限
  8. FLUSH PRIVILEGES; #重新加载权限
复制代码
RabbitMQ 设置
canal软件下载

  1. ## canal-deploy:
  2. 可以直接监听MySQL的binlog,把自己伪装成MySQL的从库,只负责接收数据,并不做处理。
  3. ## canal-admin:
  4. 为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,
  5. 方便更多用户快速和安全的操作。
  6. ## canal-adapter:相当于canal的客户端,会从canal-server中获取数据,然后对数据进行同步,
  7. 可以同步到MySQL、Elasticsearch和HBase等存储中去。在1.1.8版本中 canal-adapter 文件不更新了
  8. ## canal.example: 示例程序。  
  9. # 组件下载canal-deploy、canal-admin
  10. wget https://github.com/alibaba/canal/releases/download/canal-1.1.6-alpha-2/canal.deployer-1.1.6-SNAPSHOT.tar.gz
  11. wget https://github.com/alibaba/canal/releases/download/canal-1.1.6-alpha-2/canal.admin-1.1.6-SNAPSHOT.tar.gz
  12. wget https://github.com/alibaba/canal/releases/download/canal-1.1.6-alpha-1/canal.example-1.1.6-SNAPSHOT.tar.gz
  13. 目前环境只用到了 canal-deploy 及 canal-admin
复制代码
https://github.com/alibaba/canal/releases/

情况部署

安装canal-admin

  1. 安装 java
  2. yum -y install java
  3. 安装canal
  4. 将下载好的安装包 解压到/usr/local/下
  5. mkdir /usr/local/canal-admin/
  6. mkdir /usr/local/canal/
  7. tar -xf canal.deployer-1.1.6-SNAPSHOT.tar.gz -C /usr/local/canal/
  8. tar -xf canal.admin-1.1.6-SNAPSHOT.tar.gz -C /usr/local/canal-admin/
复制代码
设置情况:

  1. cd /usr/local/canal-admin/
  2. vim conf/application.yml
  3. server:
  4.   port: 8089   #网页访问端口
  5. spring:
  6.   jackson:
  7.     date-format: yyyy-MM-dd HH:mm:ss
  8.     time-zone: GMT+8
  9. spring.datasource:
  10.   address: 127.0.0.1:3306   # 数据库端口
  11.   database: canal_manager   # canal的数据库
  12.   username: root           #数据库账号,这个账号必须有增删改查的权限,因为要往里面写数据。
  13.   password: 123456        # 数据库密码
  14.   driver-class-name: com.mysql.jdbc.Driver
  15.   url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
  16.   hikari:
  17.     maximum-pool-size: 30
  18.     minimum-idle: 1
  19. # canal 这个类似于 api接口使用的 需要和 canal中的conf/canal.properties 对应上
  20. # canal.properties 中是密文
  21. canal:
  22.   adminUser: admin
  23.   adminPasswd: admin
  24. :wq  (保存退出)
  25. # 将canal\_manager库导入到mysql表中
  26. mysql -uroot -p123456
  27. source /usr/local/canal-admin/conf/canal_manager.sql  
  28. 导入完成,退出mysql
  29. 启动 canal-admin
  30. ./bin/startup.sh
  31. tail -f logs/admin.log  
  32. 访问:http://IP:8089
  33. 账号:admin
  34. 密码:123456   默认
复制代码
安装canal

修改设置一:

  1. cd /usr/local/canal
  2. vim conf/canal.properties
  3. #################################################
  4. #########                 common argument                #############
  5. #################################################
  6. # tcp bind ip
  7. canal.ip =
  8. # register ip to zookeeper
  9. canal.register.ip =
  10. # Canal 服务的主要端口,通常用于数据库变更事件的监听和同步。
  11. canal.port = 11111
  12. #  Canal 用于指标拉取的端口,用于监控和收集指标数据
  13. canal.metrics.pull.port = 11112
  14. # canal instance user/passwd
  15. # canal.user = canal
  16. # canal.passwd = E3619321C1A937C46A0D8BD1DAC39F93B27D4458
  17. # canal admin config
  18. #Canal-admin 访问IP及端口
  19. #canal.admin.manager = 127.0.0.1:8089
  20. canal.admin.port = 11110
  21. #  Canal 管理端口,用于管理和配置 Canal 实例。
  22. canal.admin.user = admin
  23. # 对应上面application.yml 配置
  24. # 4ACF~441 则是admin 密文
  25. # canal.admin.passwd = 6bb4837eb74329105ee4568dda7dc67ed2ca2ad9  123456
  26. canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
  27. # admin auto register
  28. #canal.admin.register.auto = true
  29. # 是否开启自动注册模式
  30. #canal.admin.register.cluster =
  31. #canal.admin.register.name =
  32. canal.zkServers =
  33. # flush data to zk
  34. canal.zookeeper.flush.period = 1000
  35. canal.withoutNetty = false
  36. # tcp, kafka, rocketMQ, rabbitMQ
  37. # 修改为rabbitmq 下来就直接修改最后几条配置即可
  38. canal.serverMode = rabbitMQ
  39. # flush meta cursor/parse position to file
  40. canal.file.data.dir = ${canal.conf.dir}
  41. canal.file.flush.period = 1000
  42. ## memory store RingBuffer size, should be Math.pow(2,n)
  43. canal.instance.memory.buffer.size = 16384
  44. ## memory store RingBuffer used memory unit size , default 1kb
  45. canal.instance.memory.buffer.memunit = 1024
  46. ## meory store gets mode used MEMSIZE or ITEMSIZE
  47. canal.instance.memory.batch.mode = MEMSIZE
  48. canal.instance.memory.rawEntry = true
  49. ## detecing config
  50. canal.instance.detecting.enable = false
  51. #canal.instance.detecting.sql = insert into retl.xdual values(1,now()) on duplicate key update x=now()
  52. canal.instance.detecting.sql = select 1
  53. canal.instance.detecting.interval.time = 3
  54. canal.instance.detecting.retry.threshold = 3
  55. canal.instance.detecting.heartbeatHaEnable = false
  56. # support maximum transaction size, more than the size of the transaction will be cut into multiple transactions delivery
  57. canal.instance.transaction.size = 1024
  58. # mysql fallback connected to new master should fallback times
  59. canal.instance.fallbackIntervalInSeconds = 60
  60. # network config
  61. canal.instance.network.receiveBufferSize = 16384
  62. canal.instance.network.sendBufferSize = 16384
  63. canal.instance.network.soTimeout = 30
  64. # binlog filter config
  65. canal.instance.filter.druid.ddl = true
  66. canal.instance.filter.query.dcl = false
  67. canal.instance.filter.query.dml = false
  68. canal.instance.filter.query.ddl = false
  69. canal.instance.filter.table.error = false
  70. canal.instance.filter.rows = false
  71. canal.instance.filter.transaction.entry = false
  72. canal.instance.filter.dml.insert = false
  73. canal.instance.filter.dml.update = false
  74. canal.instance.filter.dml.delete = false
  75. # binlog format/image check
  76. canal.instance.binlog.format = ROW,STATEMENT,MIXED
  77. canal.instance.binlog.image = FULL,MINIMAL,NOBLOB
  78. # binlog ddl isolation
  79. canal.instance.get.ddl.isolation = false
  80. # parallel parser config
  81. canal.instance.parser.parallel = true
  82. ## concurrent thread number, default 60% available processors, suggest not to exceed Runtime.getRuntime().availableProcessors()
  83. #canal.instance.parser.parallelThreadSize = 16
  84. ## disruptor ringbuffer size, must be power of 2
  85. canal.instance.parser.parallelBufferSize = 256
  86. # table meta tsdb info
  87. canal.instance.tsdb.enable = true
  88. canal.instance.tsdb.dir = ${canal.file.data.dir:../conf}/${canal.instance.destination:}
  89. canal.instance.tsdb.url = jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL;
  90. canal.instance.tsdb.dbUsername = canal
  91. canal.instance.tsdb.dbPassword = canal
  92. # dump snapshot interval, default 24 hour
  93. canal.instance.tsdb.snapshot.interval = 24
  94. # purge snapshot expire , default 360 hour(15 days)
  95. canal.instance.tsdb.snapshot.expire = 360
  96. #################################################
  97. #########                 destinations                #############
  98. #################################################
  99. canal.destinations =
  100. # conf root dir
  101. canal.conf.dir = ../conf
  102. # auto scan instance dir add/remove and start/stop instance
  103. canal.auto.scan = true
  104. canal.auto.scan.interval = 5
  105. # set this value to 'true' means that when binlog pos not found, skip to latest.
  106. # WARN: pls keep 'false' in production env, or if you know what you want.
  107. canal.auto.reset.latest.pos.mode = false
  108. canal.instance.tsdb.spring.xml = classpath:spring/tsdb/h2-tsdb.xml
  109. #canal.instance.tsdb.spring.xml = classpath:spring/tsdb/mysql-tsdb.xml
  110. canal.instance.global.mode = manager
  111. canal.instance.global.lazy = false
  112. canal.instance.global.manager.address = ${canal.admin.manager}
  113. #canal.instance.global.spring.xml = classpath:spring/memory-instance.xml
  114. canal.instance.global.spring.xml = classpath:spring/file-instance.xml
  115. #canal.instance.global.spring.xml = classpath:spring/default-instance.xml
  116. ##################################################
  117. #########               MQ Properties      #############
  118. ##################################################
  119. # aliyun ak/sk , support rds/mq
  120. canal.aliyun.accessKey =
  121. canal.aliyun.secretKey =
  122. canal.aliyun.uid=
  123. canal.mq.flatMessage = true
  124. canal.mq.canalBatchSize = 50
  125. canal.mq.canalGetTimeout = 100
  126. # Set this value to "cloud", if you want open message trace feature in aliyun.
  127. canal.mq.accessChannel = local
  128. canal.mq.database.hash = true
  129. canal.mq.send.thread.size = 30
  130. canal.mq.build.thread.size = 8
  131. ##################################################
  132. #########                      Kafka                      #############
  133. ##################################################
  134. kafka.bootstrap.servers = 127.0.0.1:6667
  135. kafka.acks = all
  136. kafka.compression.type = none
  137. kafka.batch.size = 16384
  138. kafka.linger.ms = 1
  139. kafka.max.request.size = 1048576
  140. kafka.buffer.memory = 33554432
  141. kafka.max.in.flight.requests.per.connection = 1
  142. kafka.retries = 0
  143. kafka.kerberos.enable = false
  144. kafka.kerberos.krb5.file = "../conf/kerberos/krb5.conf"
  145. kafka.kerberos.jaas.file = "../conf/kerberos/jaas.conf"
  146. ##################################################
  147. #########                     RocketMQ             #############
  148. ##################################################
  149. rocketmq.producer.group = test
  150. rocketmq.enable.message.trace = false
  151. rocketmq.customized.trace.topic =
  152. rocketmq.namespace =
  153. rocketmq.namesrv.addr = 127.0.0.1:9876
  154. rocketmq.retry.times.when.send.failed = 0
  155. rocketmq.vip.channel.enabled = false
  156. rocketmq.tag =
  157. ##################################################
  158. #########                     RabbitMQ             #############
  159. ##################################################
  160. # MQ地址及端口
  161. rabbitmq.host = 127.0.0.1:5672
  162. # 虚拟主机
  163. rabbitmq.virtual.host = canal
  164. # 交换机名称
  165. rabbitmq.exchange = ex_canal
  166. # mq账号
  167. rabbitmq.username = canal
  168. # mq 密码
  169. rabbitmq.password = canal
  170. # 以上几个值是在MQ中自建的值 如下图示例
  171. rabbitmq.deliveryMode =
复制代码
修改设置二:

  1. vim conf/canal_local.properties
  2. # register ip
  3. canal.register.ip =
  4. # canal admin config
  5. canal.admin.manager = 127.0.0.1:8089
  6. #Canal-admin 访问IP及端口
  7. canal.admin.port = 11110
  8. #  Canal 管理端口,用于管理和配置 Canal 实例。
  9. canal.admin.user = admin
  10. # 对应上面application.yml 配置
  11. canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
  12. # 4ACF~441 则是admin 密文
  13. #canal.admin.passwd = 6bb4837eb74329105ee4568dda7dc67ed2ca2ad9
  14. # admin auto register
  15. canal.admin.register.auto = true
  16. canal.admin.register.cluster =
  17. canal.admin.register.name =
复制代码
修改设置三:

  1. vim conf/example/instance.properties
  2. #################################################
  3. ## mysql serverId , v1.0.26+ will autoGen
  4. # canal.instance.mysql.slaveId=0
  5. # enable gtid use true/false
  6. canal.instance.gtidon=false
  7. # position info
  8. canal.instance.master.address=127.0.0.1:3306
  9. # 监控mysql的地址,可以换成其他地址
  10. canal.instance.master.journal.name=
  11. canal.instance.master.position=
  12. canal.instance.master.timestamp=
  13. canal.instance.master.gtid=
  14. # rds oss binlog
  15. canal.instance.rds.accesskey=
  16. canal.instance.rds.secretkey=
  17. canal.instance.rds.instanceId=
  18. # table meta tsdb info
  19. canal.instance.tsdb.enable=true
  20. #canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb
  21. #canal.instance.tsdb.dbUsername=canal
  22. #canal.instance.tsdb.dbPassword=canal
  23. #canal.instance.standby.address =
  24. #canal.instance.standby.journal.name =
  25. #canal.instance.standby.position =
  26. #canal.instance.standby.timestamp =
  27. #canal.instance.standby.gtid=
  28. # username/password
  29. canal.instance.dbUsername=canal
  30. # mysql 账户
  31. canal.instance.dbPassword=canal
  32. # mysql 密码   
  33. # 如果账户密码没有,根据上面的命令创建
  34. canal.instance.connectionCharset = UTF-8
  35. # enable druid Decrypt database password
  36. canal.instance.enableDruid=false
  37. #canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==
  38. # table regex
  39. # canal.instance.filter.regex=.*\\..*   
  40. # canal.instance.filter.regex=dt\\.orders,dt\\.user,dt\\.user_equity_summary,dt\\.user_statistics,dt\\.user_equity_summary,dt_logs\\..*
  41. # 如上注释:监控dt库下的orders表,dt库下的user表..... dt_logs库下的所有表
  42. canal.instance.filter.regex=dt_test\\..*
  43. # 需要监控的数据库,监控dt_test库下面的所有表
  44. # table black regex
  45. # 排除一些不需要同步的数据库表,避免不必要的数据传输和处理,提高性能和效率。
  46. # 注解:排除mysql库中的slave_.* 开头的表
  47. canal.instance.filter.black.regex=mysql\\.slave_.*
  48. # table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
  49. #canal.instance.filter.field=test1.t_product:id/subject/keywords,test2.t_company:id/name/contact/ch
  50. # table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
  51. #canal.instance.filter.black.field=test1.t_product:subject/product_image,test2.t_company:id/name/contact/ch
  52. # mq config
  53. # 配置 canal.mq.topic 属性,指定 Canal 将数据变更事件发送到消息队列时所使用的主题名称。
  54. # canal.mq.topic=canal_crm
  55. # dynamic topic route by schema or table regex
  56. #canal.mq.dynamicTopic=mytest1.user,topic2:mytest2\\..*,.*\\..*
  57. #canal.mq.dynamicTopic=dt:dt\\..*,dt:dt_.*\\..*
  58. # Canal 将根据一定的规则动态生成主题名称,并将数据变更事件发送到对应的动态主题中。
  59. # 将以 dt_test. 开头的表名映射到MQ名为 canal 的 topic 上,多个已逗号分割,如上
  60. canal.mq.dynamicTopic=canal:dt_test\\..*
  61. canal.mq.partition=0
  62. # hash partition config
  63. #canal.mq.enableDynamicQueuePartition=false
  64. #canal.mq.partitionsNum=3
  65. #canal.mq.dynamicTopicPartitionNum=test.*:4,mycanal:6
  66. #canal.mq.partitionHash=test.table:id^name,.*\\..*
  67. #################################################
复制代码
创建rabbitMQ队列及关联关系

网上学习资料一大堆,但假如学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技能提升。
必要这份系统化的资料的朋侪,可以添加V获取:vip204888 (备注大数据)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都接待加入我们的的圈子(技能交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习发展!
alse
#canal.mq.partitionsNum=3
#canal.mq.dynamicTopicPartitionNum=test.:4,mycanal:6
#canal.mq.partitionHash=test.table:id^name,.
\…*
#################################################
  1. ### 创建rabbitMQ队列及关联关系
  2. **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
  3. **需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)**
  4. [外链图片转存中...(img-sgnhkirt-1713194678435)]
  5. **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表