otter-harbor同步

在这里插入图片描述

一. 部署及依赖

otter Github

(一). 服务启动

1. mysql

  • 5.6版本以上,作为 otter-manger 使用的数据库
# mysql
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci;
(1). mysql初始化

SQL

  • otter manager 用的数据库, 我选用的是 4.2.18 版本的 otter-manager, 不同版本不同的sql
# 可通过docker cp的方式挂到容器中

otter-manager-init.sql

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `otter` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;USE `otter`;SET sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';CREATE TABLE `ALARM_RULE` (`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`MONITOR_NAME` varchar(1024) DEFAULT NULL,`RECEIVER_KEY` varchar(1024) DEFAULT NULL,`STATUS` varchar(32) DEFAULT NULL,`PIPELINE_ID` bigint(20) NOT NULL,`DESCRIPTION` varchar(256) DEFAULT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`MATCH_VALUE` varchar(1024) DEFAULT NULL,`PARAMETERS` text DEFAULT NULL,PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `AUTOKEEPER_CLUSTER` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`CLUSTER_NAME` varchar(200) NOT NULL,`SERVER_LIST` varchar(1024) NOT NULL,`DESCRIPTION` varchar(200) DEFAULT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `CANAL` (`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`NAME` varchar(200) DEFAULT NULL,`DESCRIPTION` varchar(200) DEFAULT NULL,`PARAMETERS` text DEFAULT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),UNIQUE KEY `CANALUNIQUE` (`NAME`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `CHANNEL` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`NAME` varchar(200) NOT NULL,`DESCRIPTION` varchar(200) DEFAULT NULL,`PARAMETERS` text DEFAULT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),UNIQUE KEY `CHANNELUNIQUE` (`NAME`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `COLUMN_PAIR` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`SOURCE_COLUMN` varchar(200) DEFAULT NULL,`TARGET_COLUMN` varchar(200) DEFAULT NULL,`DATA_MEDIA_PAIR_ID` bigint(20) NOT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),KEY `idx_DATA_MEDIA_PAIR_ID` (`DATA_MEDIA_PAIR_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `COLUMN_PAIR_GROUP` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`DATA_MEDIA_PAIR_ID` bigint(20) NOT NULL,`COLUMN_PAIR_CONTENT` text DEFAULT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),KEY `idx_DATA_MEDIA_PAIR_ID` (`DATA_MEDIA_PAIR_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `DATA_MEDIA` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`NAME` varchar(200) NOT NULL,`NAMESPACE` varchar(200) NOT NULL,`PROPERTIES` varchar(1000) NOT NULL,`DATA_MEDIA_SOURCE_ID` bigint(20) NOT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),UNIQUE KEY `DATAMEDIAUNIQUE` (`NAME`,`NAMESPACE`,`DATA_MEDIA_SOURCE_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `DATA_MEDIA_PAIR` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`PULLWEIGHT` bigint(20) DEFAULT NULL,`PUSHWEIGHT` bigint(20) DEFAULT NULL,`RESOLVER` text DEFAULT NULL,`FILTER` text DEFAULT NULL,`SOURCE_DATA_MEDIA_ID` bigint(20) DEFAULT NULL,`TARGET_DATA_MEDIA_ID` bigint(20) DEFAULT NULL,`PIPELINE_ID` bigint(20) NOT NULL,`COLUMN_PAIR_MODE` varchar(20) DEFAULT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),KEY `idx_PipelineID` (`PIPELINE_ID`,`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `DATA_MEDIA_SOURCE` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`NAME` varchar(200) NOT NULL,`TYPE` varchar(20) NOT NULL,`PROPERTIES` varchar(1000) NOT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),UNIQUE KEY `DATAMEDIASOURCEUNIQUE` (`NAME`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `DELAY_STAT` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`DELAY_TIME` bigint(20) NOT NULL,`DELAY_NUMBER` bigint(20) NOT NULL,`PIPELINE_ID` bigint(20) NOT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),KEY `idx_PipelineID_GmtModified_ID` (`PIPELINE_ID`,`GMT_MODIFIED`,`ID`),KEY `idx_Pipeline_GmtCreate` (`PIPELINE_ID`,`GMT_CREATE`),KEY `idx_GmtCreate_id` (`GMT_CREATE`,`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `LOG_RECORD` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`NID` varchar(200) DEFAULT NULL,`CHANNEL_ID` varchar(200) NOT NULL,`PIPELINE_ID` varchar(200) NOT NULL,`TITLE` varchar(1000) DEFAULT NULL,`MESSAGE` text DEFAULT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),KEY `logRecord_pipelineId` (`PIPELINE_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `NODE` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`NAME` varchar(200) NOT NULL,`IP` varchar(200) NOT NULL,`PORT` bigint(20) NOT NULL,`DESCRIPTION` varchar(200) DEFAULT NULL,`PARAMETERS` text DEFAULT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),UNIQUE KEY `NODEUNIQUE` (`NAME`,`IP`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `PIPELINE` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`NAME` varchar(200) NOT NULL,`DESCRIPTION` varchar(200) DEFAULT NULL,`PARAMETERS` text DEFAULT NULL,`CHANNEL_ID` bigint(20) NOT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),UNIQUE KEY `PIPELINEUNIQUE` (`NAME`,`CHANNEL_ID`),KEY `idx_ChannelID` (`CHANNEL_ID`,`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `PIPELINE_NODE_RELATION` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`NODE_ID` bigint(20) NOT NULL,`PIPELINE_ID` bigint(20) NOT NULL,`LOCATION` varchar(20) NOT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),KEY `idx_PipelineID` (`PIPELINE_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `SYSTEM_PARAMETER` (`ID` bigint(20) unsigned NOT NULL,`VALUE` text DEFAULT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `TABLE_HISTORY_STAT` (`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`FILE_SIZE` bigint(20) DEFAULT NULL,`FILE_COUNT` bigint(20) DEFAULT NULL,`INSERT_COUNT` bigint(20) DEFAULT NULL,`UPDATE_COUNT` bigint(20) DEFAULT NULL,`DELETE_COUNT` bigint(20) DEFAULT NULL,`DATA_MEDIA_PAIR_ID` bigint(20) DEFAULT NULL,`PIPELINE_ID` bigint(20) DEFAULT NULL,`START_TIME` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`END_TIME` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),KEY `idx_DATA_MEDIA_PAIR_ID_END_TIME` (`DATA_MEDIA_PAIR_ID`,`END_TIME`),KEY `idx_GmtCreate_id` (`GMT_CREATE`,`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `TABLE_STAT` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`FILE_SIZE` bigint(20) NOT NULL,`FILE_COUNT` bigint(20) NOT NULL,`INSERT_COUNT` bigint(20) NOT NULL,`UPDATE_COUNT` bigint(20) NOT NULL,`DELETE_COUNT` bigint(20) NOT NULL,`DATA_MEDIA_PAIR_ID` bigint(20) NOT NULL,`PIPELINE_ID` bigint(20) NOT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),KEY `idx_PipelineID_DataMediaPairID` (`PIPELINE_ID`,`DATA_MEDIA_PAIR_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `THROUGHPUT_STAT` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`TYPE` varchar(20) NOT NULL,`NUMBER` bigint(20) NOT NULL,`SIZE` bigint(20) NOT NULL,`PIPELINE_ID` bigint(20) NOT NULL,`START_TIME` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`END_TIME` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),KEY `idx_PipelineID_Type_GmtCreate_ID` (`PIPELINE_ID`,`TYPE`,`GMT_CREATE`,`ID`),KEY `idx_PipelineID_Type_EndTime_ID` (`PIPELINE_ID`,`TYPE`,`END_TIME`,`ID`),KEY `idx_GmtCreate_id` (`GMT_CREATE`,`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `USER` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`USERNAME` varchar(20) NOT NULL,`PASSWORD` varchar(20) NOT NULL,`AUTHORIZETYPE` varchar(20) NOT NULL,`DEPARTMENT` varchar(20) NOT NULL,`REALNAME` varchar(20) NOT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),UNIQUE KEY `USERUNIQUE` (`USERNAME`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE  `DATA_MATRIX` (`ID` bigint(20) NOT NULL AUTO_INCREMENT,`GROUP_KEY` varchar(200) DEFAULT NULL,`MASTER` varchar(200) DEFAULT NULL,`SLAVE` varchar(200) DEFAULT NULL,`DESCRIPTION` varchar(200) DEFAULT NULL,`GMT_CREATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`GMT_MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`ID`),KEY `GROUPKEY` (`GROUP_KEY`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `meta_history` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`gmt_create` datetime NOT NULL COMMENT '创建时间',`gmt_modified` datetime NOT NULL COMMENT '修改时间',`destination` varchar(128) DEFAULT NULL COMMENT '通道名称',`binlog_file` varchar(64) DEFAULT NULL COMMENT 'binlog文件名',`binlog_offest` bigint(20) DEFAULT NULL COMMENT 'binlog偏移量',`binlog_master_id` varchar(64) DEFAULT NULL COMMENT 'binlog节点id',`binlog_timestamp` bigint(20) DEFAULT NULL COMMENT 'binlog应用的时间戳',`use_schema` varchar(1024) DEFAULT NULL COMMENT '执行sql时对应的schema',`sql_schema` varchar(1024) DEFAULT NULL COMMENT '对应的schema',`sql_table` varchar(1024) DEFAULT NULL COMMENT '对应的table',`sql_text` longtext DEFAULT NULL COMMENT '执行的sql',`sql_type` varchar(256) DEFAULT NULL COMMENT 'sql类型',`extra` text DEFAULT NULL COMMENT '额外的扩展信息',PRIMARY KEY (`id`),UNIQUE KEY binlog_file_offest(`destination`,`binlog_master_id`,`binlog_file`,`binlog_offest`),KEY `destination` (`destination`),KEY `destination_timestamp` (`destination`,`binlog_timestamp`),KEY `gmt_modified` (`gmt_modified`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='表结构变化明细表';CREATE TABLE IF NOT EXISTS `meta_snapshot` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`gmt_create` datetime NOT NULL COMMENT '创建时间',`gmt_modified` datetime NOT NULL COMMENT '修改时间',`destination` varchar(128) DEFAULT NULL COMMENT '通道名称',`binlog_file` varchar(64) DEFAULT NULL COMMENT 'binlog文件名',`binlog_offest` bigint(20) DEFAULT NULL COMMENT 'binlog偏移量',`binlog_master_id` varchar(64) DEFAULT NULL COMMENT 'binlog节点id',`binlog_timestamp` bigint(20) DEFAULT NULL COMMENT 'binlog应用的时间戳',`data` longtext DEFAULT NULL COMMENT '表结构数据',`extra` text DEFAULT NULL COMMENT '额外的扩展信息',PRIMARY KEY (`id`),UNIQUE KEY binlog_file_offest(`destination`,`binlog_master_id`,`binlog_file`,`binlog_offest`),KEY `destination` (`destination`),KEY `destination_timestamp` (`destination`,`binlog_timestamp`),KEY `gmt_modified` (`gmt_modified`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='表结构记录表快照表';insert into USER(ID,USERNAME,PASSWORD,AUTHORIZETYPE,DEPARTMENT,REALNAME,GMT_CREATE,GMT_MODIFIED) values(null,'admin','801fc357a5a74743894a','ADMIN','admin','admin',now(),now());
insert into USER(ID,USERNAME,PASSWORD,AUTHORIZETYPE,DEPARTMENT,REALNAME,GMT_CREATE,GMT_MODIFIED) values(null,'guest','471e02a154a2121dc577','OPERATOR','guest','guest',now(),now());

2. zookeeper

# zk, 不用单独配置zk,集群的 单机的都可以
docker run -d -p 2181:2181 --name=zookeeper --privileged zookeeper

3. otter-manager

  • 公网可拉取到镜像: aeert/otter-manager:4.2.18, 因每个人的访问IP或者域名不同, 需要对镜像做修改,
  • 修改端口在启动命令中加入了:
    • sed -i 's/otter.port = 8080/otter.port = '$PORT'/' conf/otter.properties &&
    • 如果要基于域名访问, 也需要修改 domainName
FROM aeert/otter-manager:4.2.18ENTRYPOINT ["/bin/sh", "-c", "sed -i 's/domainName = 127.0.0.1/domainName = '$IP'/' conf/otter.properties && sed -i 's/otter.port = 8080/otter.port = '$PORT'/' conf/otter.properties && sed -i 's/127.0.0.1:3306/'$DB_IP'/' conf/otter.properties && sed -i 's/otter.database.driver.username = root/otter.database.driver.username = '$DB_USER'/' conf/otter.properties && sed -i 's/otter.database.driver.password = hello/otter.database.driver.password = '$DB_PASSWD'/' conf/otter.properties && sed -i 's/otter.zookeeper.cluster.default = 127.0.0.1/otter.zookeeper.cluster.default = '$ZK_IP'/' conf/otter.properties && sh bin/startup.sh && while true; do echo hello world; sleep 1000;done"]
# otter-manager
docker run --name otter-manager -d -p 1800:1800 -p 1099:1099 -e IP=114.67.233.234 -e PORT=1800 -e ZK_IP=10.0.0.3 -e DB_IP=10.0.0.3:3306 -e DB_USER=root -e DB_PASSWD=123456 otter-manager:4.2.18

4. otter-node

  • otter-node不能单独起来, 需要等 otter-manger 起来后, 配置好分配的 id 后, 才可以启动
  • 镜像是公网可以拉的
docker run --name otter-node -d -p 2088:2088 -p 2090:2090 -p 9090:9090 -e id=1 -e address=10.0.0.3 aeert/otter-node:4.2.18

(二). 源数据库

  • k8s部署的跳过

  • 如果是docker部署的mysql, 镜像为 mysql:5.7, 里面是没有vi命令的,需要需改

cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.listapt update# 报错,最后面有一个子串
W: GPG error: http://mirrors.aliyun.com/ubuntu bionic InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 3B4FE6ACC0B21F32# 替换最后的子串为上面报错的, 然后再次 apt update
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32# 安装vim
apt-get install vim# 最后docker restart mysql-xxxx

1. mysql设置

vim /etc/mysql/conf.d/mysql.cnf

# 源mysql需要设置开启binlog,需要设置binlog_format=ROW,下面的编码根据实际情况[mysqld]
log-bin=/var/lib/mysql/mysql-bin
binlog_format=ROW
server-id=1character-set-server = utf8
collation-server = utf8_general_ci
  • 源mysql开启binlog
SHOW VARIABLES LIKE 'log_%';
  • mysql复制模式是否是row模式
SHOW VARIABLES LIKE 'binlog_format%';
  • 编码
show variables  like  'character_set%';

二. 配置

(一). 页面配置

  • otter-manger启动好后, 浏览器访问并登陆, 默认账号密码都是: admin, 然后开始配置
  • 配置zk, 点击添加
    • 集群名字自定义, 不要重复, 不要中文

image-20221125152240767

image-20221125152324060

  • node配置, 点击添加
    • 机器名称自定义, 不要重复, 不要中文
    • 机器端口, 设置为你启动node的端口, node默认端口为 2088
    • 如果是外部IP的需要设置好, 保证网络正常
    • 其他的可选择性配置
  • 最后启动node, 如上面启动命令
image-20221125152518928

这个编码就是node的 id

image-20221125153353162

数据源配置, 源数据库, 注意目标数据库都要在这添加, 点击添加源数据库和目标数据库

  • 数据源名字, 自定义, 不要重复, 不要中文
  • 认证信息
  • URL 按照上面提示填写
  • 编码, 源数据库和目标数据库的编码必须保持一致, 不同编码同步不过去

image-20221125152835066

canal配置, 不需要单独部署canal, node中已经集成了canal, 我们这只需要配置好即可

  • canal名称自定义, 不重复, 不中文
  • 其他按照提示填写

image-20221125153239789

image-20221125153442373

  • 同步信息填写, 源数据库, 目标数据库都要填写
    • schema name 库名, 可填: .* 表示所有库
    • table name 表名, 可填: .* 表示所有表
    • 选择数据源,就是我们上面添加的2个数据库名称
    • 保存后, 我们需要再创建一个数据表, 为目标数据表, 表示要同步到那个数据库中

image-20221125153634684

image-20221125153741903

  • 同步管理, 创建Channel
    • Channel名称不重复, 不中文
    • 其他默认保存
    • 点击创建好的Channel, 添加pipeline
    • pipeline名称
    • 选择canal
    • 其他默认即可, 保存
    • 点击创建好的pipeline
    • 设置表的映射关系, 如果源数据库和目标数据库同步的表名称一样, 直接保存即可

image-20221125154224451

image-20221125154247608

image-20221125154335953

image-20221125154417141

  • 开始同步
    • 点击启用即开始同步

image-20221125154932752

(二). 全库同步配置

  • otter 默认只是同步增量的数据, 如果要同步全量的数据需要做如下操作
# 在源库中 创建database retl, 供 otter 使用, otter 需要对 retl.* 的读写权限,以及对业务表的读写权限
CREATE DATABASE retl;# 1.创建用户,及授权
CREATE USER retl@'%' IDENTIFIED BY 'retl';
GRANT USAGE ON *.* TO `retl`@'%';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO `retl`@'%';
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `retl`.* TO `retl`@'%';# 2. 用户授权 给同步用户授权
# 业务表授权,这里可以限定只授权同步业务的表
GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO `retl`@'%';# 3. 创建系统表
USE retl;
DROP TABLE IF EXISTS retl.retl_buffer;
DROP TABLE IF EXISTS retl.retl_mark;
DROP TABLE IF EXISTS retl.xdual;# 这里如果创建失败, 在mysql的安装目录下,打开my.ini或my.cnf文件,新增 sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,
CREATE TABLE retl_buffer
(
ID BIGINT(20) AUTO_INCREMENT,
TABLE_ID INT(11) NOT NULL,
FULL_NAME varchar(512),
TYPE CHAR(1) NOT NULL,
PK_DATA VARCHAR(256) NOT NULL,
GMT_CREATE TIMESTAMP NOT NULL,
GMT_MODIFIED TIMESTAMP NOT NULL,
CONSTRAINT RETL_BUFFER_ID PRIMARY KEY (ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE retl_mark
(
ID BIGINT AUTO_INCREMENT,
CHANNEL_ID INT(11),
CHANNEL_INFO varchar(128),
CONSTRAINT RETL_MARK_ID PRIMARY KEY (ID)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE xdual (
ID BIGINT(20) NOT NULL AUTO_INCREMENT,
X timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (ID)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;# 4. 插入初始化数据
INSERT INTO retl.xdual(id, x) VALUES (1,now()) ON DUPLICATE KEY UPDATE x = now();# 之后的操作其实就是,把你想要同步表的表名及记录ID插入到retl_buffer表即可
# 需要注意, 插入语句必须是在同步运行中配置才会生效insert into retl.retl_buffer(ID,TABLE_ID, FULL_NAME,TYPE,PK_DATA,GMT_CREATE,GMT_MODIFIED) (select null,0,'$schema.table$','I',id,now(),now() from $schema.table$);
1
# 如果针对多主键时,对应的PK_DATA需要将需要同步表几个主键按照(char)1进行拼接。# 以下这条sql的意思就是将rrrr.t_test的主键为aaa的这条记录按照规则插入到目标库insert into `retl`.`retl_buffer` ( `TABLE_ID`, `FULL_NAME`, `TYPE`, `PK_DATA`, `GMT_CREATE`, `GMT_MODIFIED`) values ( '0', 'rrrr.t_test', 'I', 'aaa', now(), now());# 案例, 同步test库中的moon表全部信息,再次强调必须是在运行中的时候插入这条语句
# num字段为主键, I表示insertinsert into retl.retl_buffer(ID,TABLE_ID, FULL_NAME,TYPE,PK_DATA,GMT_CREATE,GMT_MODIFIED) (select null,0,'test.moon','I',num,now(),now() from test.moon);
  • 源库创建
create database if not exists test default character set = 'utf8';USE test;CREATE TABLE  `example` (`id` INT(11)  NOT NULL AUTO_INCREMENT,`name` VARCHAR(32) COLLATE utf8_bin DEFAULT NULL ,PRIMARY KEY (`ID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;insert into test.example(id,name) values(null,'hello111');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/238617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Alpha突触核蛋白神经退行性疾病

Alpha突触核蛋白科研背景 ● Alpha突触核蛋白约 15kDa, 140个氨基酸 ● StressMarq在E. coli中过表达人源基因然后将蛋白从细胞质基质中纯化出来 ● 未折叠的alpha突触核蛋白单体在12% SDS-PAGE上为~15 kDa的条带 StressMarq/欣博盛生物的Alpha突触核蛋白有以下两类&#xf…

电商物流信息化管理:淘宝商品快递费用的item_fee解决方案

随着电子商务的飞速发展,物流信息化管理在电商运营中扮演着越来越重要的角色。淘宝作为中国最大的电商平台之一,其商品快递费用是电商物流成本的关键部分。本文将探讨如何通过电商物流信息化管理和淘宝商品快递费用的item_fee解决方案,提高物…

Open3D 最小二乘拟合平面(直接求解法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。爬虫自重。 一、算法原理 平面方程的一般表达式为: A x + B y + C z

docusaurus简介及使用心得

docusaurus简介 Docusaurus 是 Facebook 专门为开源项目开发者提供的一款易于维护的静态网站创建工具,使用 Markdown 即可更新网站。构建一个带有主页、文档、API、帮助以及博客页面的静态网站,只需5分钟。 同类竞品还有vuepress,docusaurus…

计算机网络经典问题万字总结(笔试,面试,期末)

计算机网络经典问题(笔试,面试,期末) 1. ALL应用层(Application Layer):传输层(Transport Layer):网络层(Network Layer):…

Hive权限管理

Hive权限管理 1、hive授权模型介绍 (1)Storage Based Authorization in the Metastore Server 基于存储的授权 - 可以对Metastore中的元数据进行保护,但是没有提供更加细粒度的访问控制(例如:列级别、行级别&#xf…

华夏ERP getAllList;.ico敏感信息泄露漏洞

漏洞描述 华夏ERP是基于SpringBoot框架和SaaS模式,立志为中小企业提供开源好用的ERP软件,目前专注进销存财务功能。主要模块有零售管理、采购管理、销售管理、仓库管理、财务管理、报表查询、系统管理等。支持预付款、收入支出、仓库调拨、组装拆卸、订…

个性化TikTok外贸工具定制!突破营销新境界!

随着全球化的加速发展,外贸行业正面临着前所未有的机遇和挑战,在这个竞争激烈的市场环境中,如何脱颖而出,吸引更多的潜在客户,成为每个外贸企业亟待解决的问题,而个性化TikTok外贸工具的定制,正…

尺寸公差分析与尺寸链计算软件-DTAS3D到底能给我们带来哪些价值?

【技能】DTAS3D能给我们带来哪些价值? DTAS3D是一款高度集成的公差分析软件,旨在为产品开发团队提供准确的建议,从而放心地将设计发布给制造部门。下面是DTAS3D的关键价值和应用: 1.与三维CAD无缝集成: DTAS3D与三维CAD软件 (CATIA、NX、Cr…

MySQL中CASE when 实战

CASE 语法 CASEWHEN condition1 THEN result1WHEN condition2 THEN result2WHEN conditionN THEN resultNELSE result END; 将表中的内容转换为右边的形式: 1、创建表,创建数据 CREATE TABLEchapter10_7 (order_id VARCHAR(255) NULL,price VARCHAR(25…

大模型三级跳:2023年AI行业的崭新篇章

2023年,大模型的发展如同一场三级跳,迅速跃升至新的高度。从ChatGPT的火爆,到众多大厂纷纷入场,再到百模大战的激烈角逐,这一年的AI行业充满了竞争与变革。 首先,大模型的崛起标志着AI技术进入了一个新的阶…

uniapp中如何使用百度tts生成文字语音并播放

第一步先在百度云里面申请一个tts应用,这里默认你们都会了哈,申请完是这样的 第二步在manifest.json注册一下 第三步进项目,先获取token handleGetToken() {// client_id和client_secret就是百度API Key和Secret Keyuni.request({url: https://aip.ba…

TKEStack容器管理平台实战之部署wordpress应用

TKEStack容器管理平台实战之部署wordpress应用 一、TKEStack介绍1.1 TKEStack简介1.2 TKEStack特点1.3 TKEStack架构图 二、kubernetes集群介绍2.1 k8s简介2.2 k8s架构图 三、本次实践介绍3.1 实践环境要求3.2 本次实践环境规划3.3 本次实践简介 四、安装容器管理平台4.1 安装T…

洛谷 P8823

# [传智杯 #3 初赛] 期末考试成绩 ## 题目描述 传智专修学院的 Java 程序设计课程的评价体系是这样的: 首先,所有学生会有一个卷面得分,这个得分一定是一个 $[0,100]$ 之间的整数。 如果卷面得分在 $90$ 分及以上,那么他的 GPA&am…

Mac 上配置Java环境变量

1、查看Java版本信息 admin-Pro ~ % java -versionjava 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) 查看安装了那些版本(略) admin-Pro ~…

ACL实现固定时间访问资源——项目

文章目录 一、前言二、项目拓扑三、项目需求四、配置思路五、配置步骤1 IP地址2 端口类型3 静态路由4 流策略 六、结语 免责声明 本文旨在提供信息和解决问题的建议,观点和建议可能不适用于个人情况,仅供参考!!! 文章中…

残差网络学习

参考B站同济子豪兄的Resnet讲解 网络退化,不是梯度消失(根本没有开始学习),梯度爆炸,过拟合。 不需要再拟合复杂底层的那个映射了,原来输入的基础上你需要进行哪些偏移哪些修改 残差预测值和真实值的偏差 一…

jdbc获取mysql数据表的字段和对应的数据类型

最近在做项目的时候因为经常会碰到代码在开发环境可以正常运行,但是到了测试和预生产环境运行报错,但是测试环境和预生产环境的网络与本地是隔离的,无法直接连接数据库,于是想到了把数据拷贝一份到开发环境来,但是有些…

锐捷配置PVLAN

一、实验拓扑 二、实验目的 PVLAN可以通过主VLAN和辅助VLAN的概念,部署隔离技术,实现用户间的互访控制。 三、实验配置 SW2 Ruijie >enable Ruijie #configure terminal Ruijie (config)#vlan 20 Ruijie (config-vlan)#private-vlan community …

视频号小店如何运营?流程跑通就成功了一大半!

我是电商珠珠 视频号小店是视频号团队发展的电商平台,目前处于项目的风口期,很多有想法的新手并不知道应该怎么去运营,今天我就来给大家讲一下。 一、入驻 视频号小店入驻的门槛较高,需要准备一张企业的营业执照,身…