# ninedata&&数据库工具

项目微服务化后，势必出现一些基础数据的冗余，常见方法有字段冗余、整表冗余。为降低难度，我们优选了整表冗余。在通过同步工具进行表同步。

常见的表同步工具有：

- maxwell： <https://maxwells-daemon.io/>
- canal  ： <https://github.com/alibaba/canal>

这两个工具原理都一样，把自己伪装成一个slave，订阅binlog日志，将更改推送到消息队列，包括了数据是如何变化的，例如增删改、原始数据、修改后的数据；开发者对更改订阅处理。需要多个组件、需要代码实现、适合复杂场景。例如数据库更改修改缓存。

第二个工具是，otter，基于canal，实现了修改订阅，直接进行库（表）对库（表）同步。简单易用，但是暂时不支持 mysql 8，且更新至2019年即没有在更新了。不过对于mysql 5.7的支持尚可，虽然有一些bug，基本能满足要求，一些常见问题也积累了相关经验，有源代码，进行一些改造也可以适应mysql 8。

#####  otter相关文档

github：<https://github.com/alibaba/otter>

常见问题：<https://iovhm.com/book/books/42e7a/page/otter>


#### ninedata

因为otter偶尔会抽风，导致数据没有同步，需要一个数据比对工具，来保证需要同步的表的数据是一致的，ninedata提供的相关功能，基本能满足这个要求了，且提供了其他工具。社区版免费使用。

官方网址：<https://www.ninedata.cloud/>


##### 核心功能：

- **查询分析器**
- **慢sql分析**
- **数据对比**，主从不同步了也应该可以使用这个功能
- 数据复制（用于数据搬迁和数据归档）
- 数据库结构对比




##### 社区版安装方法

只能在主机上安装，不能在k8s里面安装。

```yaml

version: "3"
services:
  ninedata:
    image: harbor.iovhm.com/public/ninedata:20250618
    container_name: ninedata
    restart: always
    privileged: true
    ports:
      - "9999:9999"
    volumes:
      - ./data:/u01

```

#### 使用截图

安装完成后使用**admin / admin** 默认密码登陆

- 配置数据源

[![](https://iovhm.com/book/uploads/images/gallery/2025-06/scaled-1680-/pDdrHVicBVFBSVND-image-1750225857060.png)](https://iovhm.com/book/uploads/images/gallery/2025-06/pDdrHVicBVFBSVND-image-1750225857060.png)

- 慢sql分析，需要先在mysql开启慢sql分析功能

```shell

# 临时有效
SET GLOBAL slow_query_log=1; 
SET GLOBAL long_query_time=30;
SET GLOBAL log_output='TABLE';

```

```cnf

# 开启慢查询日志
slow_query_log=1

# 慢查询日志文件路径
# slow_query_log_file=/var/log/mysql/mysql-slow.log
# 如果未设置，可以使用 SHOW VARIABLES LIKE 'slow_query_log_file'查看

# 记录查询执行时间超过30秒的查询
long_query_time=30

```



[![](https://iovhm.com/book/uploads/images/gallery/2025-06/scaled-1680-/rIk3G0lZ9zjZhv2S-image-1750225909730.png)](https://iovhm.com/book/uploads/images/gallery/2025-06/rIk3G0lZ9zjZhv2S-image-1750225909730.png)

- 数据比对

[![](https://iovhm.com/book/uploads/images/gallery/2025-06/scaled-1680-/eO0yJY3eW86xehC2-image-1750225987658.png)](https://iovhm.com/book/uploads/images/gallery/2025-06/eO0yJY3eW86xehC2-image-1750225987658.png)

- 数据比对明细

[![](https://iovhm.com/book/uploads/images/gallery/2025-06/scaled-1680-/JNTEwCLEnhg8g1TP-image-1750226020739.png)](https://iovhm.com/book/uploads/images/gallery/2025-06/JNTEwCLEnhg8g1TP-image-1750226020739.png)

- 查看两者的差异

[![](https://iovhm.com/book/uploads/images/gallery/2025-06/scaled-1680-/hHoQFJPR9bdkrAlo-image-1750226049925.png)](https://iovhm.com/book/uploads/images/gallery/2025-06/hHoQFJPR9bdkrAlo-image-1750226049925.png)

- 查看差异详情、生成SQL语句使差异一致（永远是以源为基准）

[![](https://iovhm.com/book/uploads/images/gallery/2025-06/scaled-1680-/jL4sapHUAFD4oIOr-image-1750226129239.png)](https://iovhm.com/book/uploads/images/gallery/2025-06/jL4sapHUAFD4oIOr-image-1750226129239.png)