MySQL开启日志

  • 对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下

    创建用户及授权

  • 授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant

    1. CREATE USER canal IDENTIFIED BY 'canal';
    2. GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
    3. -- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
    4. FLUSH PRIVILEGES;

    安装RocketMQ

    Java

    安装

    ```shell cd /opt/tools/ tar -zxvf jdk-8u211-linux-x64.tar.gz -C /opt/soft/

vi /etc/profile

在末尾加入如下三行配置

注意:请不要换行,请不要换行,请不要换行,请不要换行,请不要换行,请不要换行

export JAVA_HOME=/opt/soft/jdk1.8.0_211 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin

保存修改后,退出

让配置生效

source /etc/profile

验证

java -version

出现以下内容说明安装成功

java version “1.8.0_211” Java(TM) SE Runtime Environment (build 1.8.0_211-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

<a name="IBDXi"></a>
### Maven
<a name="pXayE"></a>
#### 安装
```shell
cd /opt/soft/
tar -zxvf apache-maven-3.8.1-bin.tar.gz
vi /etc/profile
## 在末尾加入如下三行配置
## 注意:请不要换行,请不要换行,请不要换行,请不要换行,请不要换行,请不要换行
export PATH=$PATH:/opt/soft/maven/apache-maven-3.8.1/bin
## 保存修改后,退出
## 让配置生效
source /etc/profile
## 验证
mvn --version
## 出现以下内容说明安装成功
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: /opt/soft/maven/apache-maven-3.8.1
Java version: 1.8.0_261, vendor: Oracle Corporation, runtime: /usr/java/java8/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"

阿里云镜像

修改 /opt/soft/maven/apache-maven-3.8.1/conf/settings.xml文件

# jar包存放位置
<localRepository>/opt/soft/maven/apache-maven-3.8.1/repos</localRepository>
# 阿里镜像
    <mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

单机环境搭建

项目构建

tar -zxvf rocketmq-rocketmq-all-4.9.0.tar.gz
cd rocketmq-all-4.9.0/
mvn -Prelease-all -DskipTests clean install -U
cd distribution/target/rocketmq-4.9.0/rocketmq-4.9.0/bin

启动 NameServer

cd /opt/soft/rocketmq/rocketmq-rocketmq-all-4.9.0/distribution/target/rocketmq-4.9.0/rocketmq-4.9.0
nohup sh bin/mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log

启动 Broker

nohup sh bin/mqbroker -n localhost:9876 &
tail -f ~/logs/rocketmqlogs/broker.log

测试发送和接收消息

生产者发送消息
export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

消费者消费消息
export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

关闭服务

sh mqshutdown broker

sh mqshutdown namesrv

安装RocketMQ-Console

编译

tar -zxvf rocketmq-externals-rocketmq-console-1.0.0.tar.gz
cd /opt/soft/rocketmq/rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console
# 编译
mvn clean package -Dmaven.test.skip=true

启动

nohup java -jar target/rocketmq-console-ng-1.0.0.jar &
tail -200f nohup.out

没有报错,就启动成功了
访问地址:http://121.37.152.227:8080/,这个地址根据真实地址自己改

配置

打开页面如下:
image.png

更改中文

image.png

配置Broker

image.png
这样就好了

Canal RocketMQ快速开始

下载

https://github.com/alibaba/canal/releases下载
image.png

解压

mkdir /opt/soft/canal
# 上传下载好的canal
cd /opt/soft/canal
tar -zxvf canal.deployer-1.1.5.tar.gz

配置canal

mkdir /opt/soft/canal/conf
vi canal.properties

修改配置

# 服务模式:tcp(默认), kafka, rocketMQ, rabbitMQ
canal.serverMode = rocketMQ
# 是否格式化为JSON
canal.mq.flatMessage = true

# rocketmq 生产者组
rocketmq.producer.group = kxt_db
# rocketmq namesrv 地址
rocketmq.namesrv.addr = 192.168.0.20:9876
# rocketmq 失败重试次数
rocketmq.retry.times.when.send.failed = 0
# rocketmq vip通道是否开启
rocketmq.vip.channel.enabled = false
# rocketmq tag
rocketmq.tag = kxt_db

配置instance

mkdir /opt/soft/canal/conf
vi example/instance.properties

修改配置

canal.instance.master.address=192.168.0.20:3306
# binlog 名称
canal.instance.master.journal.name=
# binlog 位置
canal.instance.master.position=

# username/password
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8

# table regex 所有的表,这里可以优化为自己需要的表,具体配置,参考:https://github.com/alibaba/canal/wiki/Canal-Kafka-RocketMQ-QuickStart
canal.instance.filter.regex=.*\\..*

# mq config
#canal.mq.topic=kxt_one_number_xian
# dynamic topic route by schema or table regex
# 将kxt_one_number_xian_zb库下的所有表日志,发送到kxt_one_number_xian_zb topic
# 将kxt_one_number_xian_0802库下的所有表日志,发送到kxt_one_number_xian_0802 topic
canal.mq.dynamicTopic=kxt_one_number_xian_zb:kxt_one_number_xian_zb,kxt_one_number_xian_0802:kxt_one_number_xian_0802
canal.mq.partition=0
# hash partition config
#canal.mq.partitionsNum=3
#canal.mq.partitionHash=test.table:id^name,.*\\..*
#canal.mq.dynamicTopicPartitionNum=test.*:4,mycanal:6

注意修改密码

启动canal服务

sh bin/startup.sh

关闭服务

sh bin/stop.sh

创建MongoDb库

创建库

创建 badgeData

创建用户

image.png
image.png
保存后,就ok了
image.png

canal-data

Canal-data 是一个数据迁移工具,依赖阿里巴巴开源项目canal,实现了MySQL数据迁移到其他数据库,如:MySQL、MongoDb、Elasticsearch、Redis等。

代码结构

— canal-data
——— badge-service
——— canal-data-autoconfigure
——— canal-data-core
——— canal-data-db

  • canal-data-core:共用类
  • canal-data-autoconfigure:自动配置
  • canal-data-db:数据迁移(如果只是数据迁移,请关注此项目)
  • badge-service:徽章服务

canal-data-db

配置

server:
  port: 7788
spring:
  application:
    name: canal-data-db
  data:
    mongodb:
      host: 192.168.0.204
      database: badgeData
      password: KXTsoft2010
      username: badge
      port: 27017
canal:
  server-mode: rocketMQ
  mq:
    topic: kxt_one_number_xian
rocketmq:
  namesrv:
    addr: 192.168.0.20:9876
  tag: kxt_db
  customer:
    group: kxt_db

启动canal-data-db

nohup java -jar canal-data-db-1.0.0.jar &

测试数据同步

添加工单,看是否可以同步到MongoDb,如果可以,就配置成功

badge-service

该服务可以启动多个,实现负载均衡

配置

badge-service 是徽章服务,需要配合一号通产品使用,所以需要nacos进行配置和服务管理,本地配置文件几乎不用改。主要是要配置nacos

nacos配置

创建 badge-mongodb-dev.yaml 配置文件

spring:
  data:
    mongodb:
      host: 192.168.0.204
      database: badgeData
      password: zhangbo
      username: zhangbo
      port: 27017

启动badge-service

nohup java -jar badge-service-1.0.0.jar &

常见问题

  • canal 启动 Could not find first log file name in binary log index file

遇到这个问题时,先停止canal,然后删除example文件夹除了instance.properties文件的其他所有文件,然后重启canal