otter全量同步
奔跑的男人 · 1222浏览 · 发布于2019-09-02 +关注

原理:使用canel读取了源库的retl_buffer操作binlog来进行实现的,所以在使用此功能时,channel必须处于工作状态。


步骤一:在otter配置otter同步的库/表。

配置好channel—>pipeline—>映射关系列表,canal


步骤二:执行以下sql

/*

供 otter 使用, otter 需要对 retl.* 的读写权限,以及对业务表的读写权限

1. 创建database retl
*/
CREATE DATABASE retl;
/* 2. 用户授权 给同步用户授权 */
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`@'%';
/* 业务表授权,这里可以限定只授权同步业务的表 */
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;
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 schema.tableschema.table’,‘I’,id,now(),now() from schema.table schema.tableschema.table);

如果针对多主键时,对应的PK_DATA需要将需要同步表几个主键按照(char)1进行拼接。


注意:

1、同步表必须有主键。

2、需要先配置同步库/表,再往retl_buffer插入数据才能成功同步。

3、使用retl_buffer type 设置为 I 时会先判断是否该id已有记录有则进行更新,没有则进行插入操作。

4、sql执行报错 1067,解决如下:

show variables like ‘sql_mode’

(1)临时修改:

set session sql_mode=‘ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’;

(2)永久修改:

可以直接修改my.cnf文件

在[mysqld]下面添加如下列:

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


相关推荐

使用SELECT语句检索数据

奔跑的男人 · 347浏览 · 2019-06-03 09:33:43
部署MySQL延迟从库的几个好处

吴振华 · 233浏览 · 2019-05-14 21:57:51
MongoDB凭什么跻身数据库排行前五?

iamitnan · 275浏览 · 2019-06-18 10:04:56
Oracle开启和关闭的几种模式

qq2360248666 · 287浏览 · 2019-06-04 10:18:47
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页