otter全量同步

原理:使用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.tableschema.table’,‘I’,id,now(),now() from 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

參考:https://blog.csdn.net/Frank_Drebin/article/details/90170213

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章