同步操作将从 Indexea/indexer 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
indexer
是一个实现将客户数据(支持包括 SQL 等多种数据库、文件目录、队列)自动同步到 indexea
的工具。
indexer
采用 rust 语言开发,体积小、支持跨平台,简单轻便,资源占用少,同时对业务系统的侵入很小。
indexer
提供非常灵活的配置 (indexer.yml
),以非常高效方式将业务数据同步到 indexea
。
该工具基于 MIT 许可证开源,开源地址:https://gitee.com/indexea/indexer
安装 rust 环境
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
下载源码并编译
git clone https://gitee.com/indexea/indexer.git
cd indexer
cargo build --release
indexer
使用 YAML 文件(indexer.yml
)进行灵活的自定义配置,配置包括三部分内容:
序号 | 配置名 | 配置说明 | 其他说明 |
---|---|---|---|
1 | datasource | 数据源定义 | 允许配置多个数据库,当前支持 MySQL 和 Postgres |
2 | endpoint | Indexea 服务配置 | 只能配置单个服务,如果需要使用多个服务,可以运行多个 indexer 的实例 |
3 | tasks | 同步任务配置 | 配置 datasource 的数据如何同步到 endpoint 中,可以配置一到多个同步任务 |
indexer.yml
datasource:
mydb: # datasource name
source: "mysql" # mysql,postgres,oracle
url: "mysql://account:passwd@localhost:3306/mydb?tcp_connect_timeout_ms=1000"
endpoint:
url: "https://api.indexea.com/v1/" # Indexea Gateway API
oauth_url: "https://api.indexea.com/oauth" # Indexea Gateway OAuth
client_id: "smxuk5rvrfjkzhrf1244" # client id (详见应用设置的第三方应用管理)
client_secret: "gqee9yh2igplhkb9deq9ngqmufu19ivaq4mp2492" # client secret
indices:
repositories: # index name
app: "tw6mi8il" # app ient
index: 1005 # index id
blogs:
app: "tw6mi8il"
index: 1006
tasks:
repositories: # task name
datasource: "mydb" # datasource name, refer to $datasource.mydb
index: "repositories" # index name, refer to $endpoint.indices.repositories
table: "repositories" # table name
primary: "id" # primary field name of table
interval: 1000 # check interval in mills-second
blogs:
datasource: "mydb"
index: "blogs"
table: "blogs"
primary: "id"
sql: "SELECT b.*, a.name AS author_name FROM blogs b LEFT JOIN authors a ON b.author = a.id" ##指定 SQL ,否则默认为 SELECT * FROM <table>
fields:
author_name: "user" # 字段名映射,例:在 indexea 将使用 user 字段名来表示 author_name 的值
password: "" # 删除某个字段,一些敏感信息不需要进行搜索的可以通过这种方式避免同步到 indexea
status: # 自定义字段值映射
0: "pending"
1: "open"
2: "block"
3: "delete"
interval: 2000
-c <indexer.yml>
指定配置文件路径
-l <indexer.log>
指定日志文件路径
-t --test
测试配置是否正确
-i --init
在本地数据源上建立 indexer 必备的信息,例如在数据库上建 indexea_tasks
表和触发器等。
然后执行数据首次同步,也就是全量的数据同步,如果使用该参数,需要用户进行二次确认
-d --start
进入守护进程方式开始增量数据同步
--clean
清除 indexer 生成的表、函数和触发器,
当不再使用 indexer 时可以使用该参数来清除数据。
--stop
停止守护进程
命令:indexer -i
首次使用前需要进行配置,你可以运行 indexer -t
来测试配置文件是否正确,然后运行 indexer -i
来执行初始化。
初始化主要包括三部分:
indexea_tasks
任务表,表结构如下表所示indexea_tasks
表中[indexea_tasks] 表结构 (MySQL)
字段名 | 类型 | 说明 | 其他说明 |
---|---|---|---|
id | bigint | 自增长主键 | |
task | varchar(32) | 对应 yml 配置中的任务名称 | |
field | varchar(32) | 对象主键字段名 | |
value | varchar(64) | 字段值 | |
type | tinyint | 字段类型 | 1 数值,2 字符串 |
ops | tinyint | 操作类型 | 1 添加,2 修改, 3 删除 |
status | tinyint | 处理状态 | 0 未处理,1 已处理, 2 处理失败, 3 参数错误 |
其他数据库的表结构与 MySQL 同。
数据库触发器(MySQL)
CREATE TRIGGER indexea_after_insert_<task>
AFTER DELETE
ON <table> FOR EACH ROW
INSERT INTO indexea_tasks(`task`,`field`,`value`,`type`,`status`) VALUES('<task>', '<field>', NEW.<field>, 1, 0);
CREATE TRIGGER indexea_after_update_<task>
AFTER UPDATE
ON <table> FOR EACH ROW
INSERT INTO indexea_tasks(`task`,`field`,`value`,`type`,`status`) VALUES('<task>', '<field>', OLD.<field>, 2, 0);
CREATE TRIGGER indexea_after_delete_<task>
AFTER DELETE
ON <table> FOR EACH ROW
INSERT INTO indexea_tasks(`task`,`field`,`value`,`type`,`status`) VALUES('<task>', '<field>', OLD.<field>, 3, 0);
其中:
其他数据库原理与 MySQL 相同。
一旦完成了初始化配置和全量同步后,你可以通过 indexer -d
命令启动服务进入自动增量同步的守护进程。
守护进程会定时读取 indexea_tasks
表中记录即时同步到 indexea
。
你可以通过查看 indexea.log
来查看服务运行状态。
你可以使用 indexer --stop
或者 kill
命令来停止服务运行。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。