2020/03 作者:ihunter 0 次 0
在要进行双向同步的数据库执行以下语句 (记得修改密码)(主从库都要执行)
/* 供 otter 使用, otter 需要对 retl.* 的读写权限,以及对业务表的读写权限*/ /* 1. 创建database retl */ CREATE DATABASE retl; /* 2. 用户授权 给同步用户授权 */ /* 业务表授权,这里可以限定只授权同步业务的表 */ /* 3. 创建系统表 */ USE otter; 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();
数据库配置(主从库都要修改,请保证server-id不相同)
在需要双向同的数据库开启binlog,并设置为row模式
my.cnf (/etc/mysql/my.cnf) 的 [mysqld] 节点下启用binlog
# 开启binlog log-bin=mysql-bin # 设置row模式 binlog-format=ROW character_set_server=utf8 # 双向同步保证id不相同,避免无法辨别数据库而回环 server-id=1 # 允许外部访问 # bind-address = 0.0.0.0
otter账号授权
授权需要双向授权 (主库)
# 如果有多个机器ip请全部授权 # 授予主从复制权限 GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO otter@’%’; # 授予retl 库操作权限 GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `retl`.* TO otter@'ip'; # 授予操作库增删查改,alter,index权限 用于更新数据库记录 GRANT update, insert, delete, update, alter, indexON mytest.person_info TO otter@'ip'; flush PRIVILEGES;
授权需要双向授权 (从库)
# 如果有多个机器ip请全部授权 # 授予主从复制权限 GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO otter@’%’; # 授予retl 库操作权限 GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `retl`.* TO otter@'ip'; # 授予操作库增删查改,alter,index权限 用于更新数据库记录 GRANT update, insert, delete, update, alter, indexON mytest.person_info TO otter@'ip'; flush PRIVILEGES;
配置数据源
尽量使用专用账号,避免重复配置数据源
同一个数据源的表只需要配置一次
点击验证,如果报字符类型不一致问题,可忽略
开始添加数据源
配置数据源
数据源列表
配置表
schema name 配置数据库名(支持正则.* 匹配整个实例下所有数据库)
table name配置表名,支持正则配置
如: .* 匹配全库
(yibai_product_map|yibai_product) 最外层一定要加括号,否则无法同步"|"后面的部分,
保证 Find schema and tables: 有你需要同步的所有表
开始添加数据表
配置数据表
配置canal
canal用于取binlog,
canal名字保存后不能修改,尽量做到见名知意
此处账号要有 主从复制权限
数据库地址为同步源库数据库地址
添加canal
配置canal
canal列表 双向需要配置两个canal 分别负责读取不同库的binlog
支持主备切换
主备切换配置
配置Channel
开始添加Channel
开始配置Channel
双向同步需要开启数据一致性算法
配置Pipeline
进入pipeline(点击channel名称)
添加pipeline
配置pipeline(主库)
配置一个单相同步的通道
选择node, 此处选择多个是用于分担压力和保证高可用
也可以选择单个
选择主站点,同步会以主站点数据为准
选择对应的源库canal
消费批次支持修改
pipeline高级配置(主库)
主库要支持ddl
pipeline配置从(从库)
与主库唯一的不同在于 主站点选择否
pipeline高级配置(从库)
从库要取消ddl的支持
跳过ddl异常
配置映射关系
- 点击Pipeline进入映射配置
- 映射关系配置1
选择源库和目标库
权重越大越晚执行,用于业务关联表配置
点击下一步
- 映射关系配置2
如果是单表可以看到对应的字段
将需要同步的字段对应拉入到下面对应框中,支持不同字段名称的同步
如果配置了多个表则无法看到字段,直接点击下一步即可
- 映射配置3
- 映射配置4
此处用于配置组合字段
如果需要变更某个字段后相关字段也要跟着更新,可以配置组合字段
全字段的组合,与Channel中的行模式一致
点击保存即可
- 配置多个映射
字段映射支持配置多个表
需要表源库是相同的数据库实例
双向同步需要相同的主库,
- 到此处配置完成
channel启动
- 点击启动
- 启动后检查是否异常 日志查看
日志只记录异常,根据时间和channel名称可以确认你新开启的同步任务是否异常
如果发生异常,点击日志内容,即可看到异常内容
- 监控查看
此处可以看到同步延时等信息
采集一般60s 采集一次,
如果数据库日志没有变更不会采集
如果channel挂起也不会进行采集
内存不足/数据库压力较大 可能会部分channel不进行采集
如果发现为进行日志采集请及时确认原因
- pipeling监控
点击监控可以看到各个监控指标
- 监控指标
- 同步进度
如果同步异常,重新导入表做同步,或者需要变更同步起始位点
先关闭同步任务
删除此处position 位点状态
删除后在canal 中配置新的位点,启动同步任务即可
上篇:
没有了
下篇:
Mysql 查询天、周,月,季度、年的数据