使用otter实现MySQL跨机房双向同步
- 本文档基于已经搭建单向同步的基础进行双向同步功能扩展
- 如果需要进行单向同步搭建,请参考上一篇文档(《otter单向同步配置》)
- 保证所有node运行机器已经安装aria2
在要进行双向同步的数据库执行以下语句 (记得修改密码)(主从库都要执行)
/* 供 otter 使用, otter 需要对 retl.* 的读写权限,以及对业务表的读写权限*/
/* 1. 创建database retl */
CREATE DATABASE retl;
/* 2. 用户授权 给同步用户授权 */
<! CREATE USER retl@'%' IDENTIFIED BY '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; >
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不相同)