目录

NineData-社区版从-MySQL-到-TiDB-数据复制新选择

NineData 社区版:从 MySQL 到 TiDB 数据复制新选择

在数据管理领域,一款优秀的工具能够极大地提升工作效率,而 NineData 社区版正是这样一款工具。NineData 社区版功能强大、永y久免费、一键安装,为开发者、初创团队、教育机构提供了极大的便利。

什么是 NineData 社区版

NineData 社区版是玖章算术推出的永y久免费、一键安装的数据管理解决方案。包含 NineData 的数据库 DevOps、数据复制、数据库对比三个核心功能。NineData 社区版是一个完全离线运行的本地化部署版本,所有数据与操作 100% 留存于您的本地环境,满足敏感业务的数据合规要求。NineData 提供用户管理,支持普通账号和 SSO 账号两种类型,提供权限管理,颗粒度细化到数据源、库、表、敏感列、模块、操作,并且支持 SQL 任务审核,为数据管理提供了安全保障。 https://i-blog.csdnimg.cn/img_convert/f1808e8e185e66c926e5dbe8939a3a61.png NineData 社区版支持高性能实时数据迁移同步,基于自研 CDC 技术,专业解决数据库迁移、同步、容灾等业务需求,支持每秒数万 TPS 实时数据复制。NineData 社区版支持同构、异构数据源之间数据一致性校验,在不一致的情况下支持自动生成变更 SQL,支持结构对比、全量对比、抽样对比、周期性对比等多种对比方式,动态监测数据库负载,对比速度自适应,保障数据库稳定性。 https://i-blog.csdnimg.cn/img_convert/6b06941733497d0265c13793f7309966.png

如何安装 NineData 社区版

NineData 社区版基于 Docker 技术,用户通过几条简单的命令即可在本地电脑完成安装。

1 前提条件

服务器中已安装 Docker 或者 Podman。服务器配置至少为 4 核 CPU / 16 GB 内存 / 200 GB 磁盘空间。

2 拉取镜像

NineData 提供了多地域镜像下载,用户可以根据自己的地理位置选择合适的镜像地址,以获取更快的下载速度。

  • NineData Docker Hub 官方地址:ninedata/ninedata:latest
  • 华北-北京:swr.cn-north-4.myhuaweicloud.com/ninedata/ninedata:latest
  • 华东-上海:swr.cn-east-3.myhuaweicloud.com/ninedata/ninedata:latest
  • 华南-广州:swr.cn-south-1.myhuaweicloud.com/ninedata/ninedata:latest 登录服务器,执行命令,拉取镜像。 podman pull swr.cn-east-3.myhuaweicloud.com/ninedata/ninedata:latest 查看镜像信息。 [shawnyan@rl9 ~]$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE swr.cn-east-3.myhuaweicloud.com/ninedata/ninedata latest 17f99ce461fa 2 days ago 2.67 GB

3 启动容器

推荐使用 CentOS 7 操作系统。执行命令,启动容器。 docker run -p 9999:9999 –privileged -v /opt/ninedata:/u01
–name ninedata -d 17f99ce461fa 如果使用 ,可以使用 Podman 来管理容器。 podman run -p 9999:9999 –privileged -v /opt/ninedata:/u01
–cgroupns=host
–name ninedata -d 17f99ce461fa 需要注意的是,由于 Rocky Linux 9 默认使用 cgroup-v2。 [shawnyan@rl9 ~]$ mount | grep cgroup cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot) 而当主机为 cgroups v2 时,podman 的 cgroup 命名空间模式默认使用 private,来为容器创建一个新的 cgroup 命名空间,这会导致容器无法正常启动。 E0312 10:45:32.821969 42 kubelet_node_status.go:453] “Error getting the current node from lister” err=“node "server-sh90d" not found” E0312 10:45:32.824543 42 node_container_manager_linux.go:61] “Failed to create cgroup” err=“cannot enter cgroupv2 "/sys/fs/cgroup/kubepods" with domain controllers – it is in an invalid state” cgroupName=[“kubepods”] E0312 10:45:32.824844 42 kubelet.go:1566] “Failed to start ContainerManager” err=“cannot enter cgroupv2 "/sys/fs/cgroup/kubepods" with domain controllers – it is in an invalid state” 因而,启动容器时需增加参数 --cgroupns=host 指定容器使用宿主机的 cgroups 命名空间。 可通过命令 podman logs -f ninedata 来查看容器日志,成功启动后可看到如下输出。 https://i-blog.csdnimg.cn/img_convert/dccb11693155f9c7589dc9977855522b.png 也可通过命令 tail -f /opt/ninedata/server.log 来查看详细的 NineData 服务日志。 NineData 社区版容器运行时,内部依赖 Kubernetes(K3S)组件启动 NineData 集群,在容器内使用 kubectl 命令查看集群状态。 [shawnyan@rl9 ~]$ podman exec -it ninedata /bin/sh ~ # kubectl get nodes NAME STATUS ROLES AGE VERSION server-957dn Ready control-plane,master 27h v1.31.2+k3s1 ~ # kubectl get pods,svc NAME READY STATUS RESTARTS AGE pod/jzcloud-console-6444d96646-tqnth 1/1 Running 0 27h pod/jzcloud-console-frontend-8c6dc7df7-js9qj 1/1 Running 0 27h pod/jzcloud-key-center-77c8b6554b-9vsnk 1/1 Running 0 27h pod/jzcloud-scheduler-77f4464b57-pmshs 1/1 Running 0 27h pod/kafka-0 1/1 Running 0 27h pod/loki-0 1/1 Running 0 27h pod/loki-promtail-zmq6f 1/1 Running 0 27h pod/minio-0 1/1 Running 0 27h pod/mongo-shell-parser-7b4df9b449-7qpxr 1/1 Running 0 27h pod/mysql-0 2/2 Running 0 27h pod/mysql-operator-85c4ccb784-lqcgm 1/1 Running 0 27h pod/mysql-router-677676bc8c-ws5ww 1/1 Running 0 27h pod/niup-wptfv 0/1 Completed 0 27h pod/registry-58d877968d-v2t5t 1/1 Running 0 27h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/jzcloud-console ClusterIP 10.43.204.188 80/TCP 27h service/jzcloud-console-front NodePort 10.43.163.101 80:9999/TCP 27h service/jzcloud-key-center ClusterIP 10.43.187.155 80/TCP 27h service/jzcloud-scheduler ClusterIP 10.43.62.0 80/TCP 27h service/kafka-headless ClusterIP 10.43.158.72 9092/TCP 27h service/loki ClusterIP 10.43.60.128 3100/TCP 27h service/loki-headless ClusterIP 10.43.13.98 3100/TCP 27h service/minio-local NodePort 10.43.113.158 9090:30070/TCP,30071:30071/TCP 27h service/mongo-shell-parser ClusterIP 10.43.76.178 9002/TCP 27h service/mysql ClusterIP 10.43.85.120 3306/TCP,33060/TCP,6446/TCP,6448/TCP,6447/TCP,6449/TCP,6450/TCP,8443/TCP 27h service/mysql-instances ClusterIP None 3306/TCP,33060/TCP,33061/TCP 27h service/registry-local NodePort 10.43.248.170 32500:32500/TCP 27h ~ #

NineData 社区版的使用

1 登录 NineData

容器启动完成后,NineData 服务会自动在容器内部署并初始化服务,该过程预计需要 5 ~ 10 分钟。初始化完成后,在浏览器中输入 NineData 的连接地址即可打开 NineData 控制台的登录页,NineData 服务默认端口号为 9999,初始管理员账号与密码均为 admin。首次登录后页面会弹出修改密码窗口,提示立即更改管理员密码。 https://i-blog.csdnimg.cn/img_convert/f39f4f68a16136540ef0572af5dfcdba.png (Ps. 原先登录页面太朴素,P了个logo上去)

2 数据源管理

用户可以在 NineData 控制台中添加需要管理的数据源,支持多云、多类型、多个数据源。社区版目前支持添加 10 个数据源。 https://i-blog.csdnimg.cn/img_convert/1f3b368cc0a4262bce052e4a3ad22c6e.png 如下图,数据源已成功添加 8.0、 8.5、 4.4、 库 DM8 等数据库。(Ps.支持直接修改数据源备注信息的设计不错。) https://i-blog.csdnimg.cn/img_convert/f6bc06081227ddc77f615040aecf25e3.png

3 敏感数据管理

对于涉及敏感信息的数据,用户可以利用 NineData 的【敏感数据】模块进行设置。NineData 提供了智能数据分类分级,内置 S0 到 S5 六个敏感等级,预设 27 种数据类型,预定 36 条脱敏算法,涵盖了大部分的脱敏方式,如果这些脱敏算法中未包含用户的场景,还可以自行创建新的脱敏算法。 https://i-blog.csdnimg.cn/img_convert/fcfcfce6e7b247eeaf035adb41a12357.png 用户可通过自动或手动添加敏感列,对敏感数据进行分类分级管控,并选择合适的脱敏算法对敏感列进行脱敏。 https://i-blog.csdnimg.cn/img_convert/dee74559567f94c0b1f05c90f97d178d.png NineData 社区版,目前支持对 MySQL 数据源做敏感数据扫描,并对扫描结果直接生效敏感等级。 https://i-blog.csdnimg.cn/img_convert/b58a3404ae85291d8f5587795fb24439.png 用户可在【数据库 DevOps】模块的【SQL 窗口】对数据进行查询,应用敏感规则后,查询结果为脱敏数据。 https://i-blog.csdnimg.cn/img_convert/06f1a929838cb75bb7534ce7e59bd2eb.png 测试用例: NineData 扫描数据库时,会识别字段、字段类型和备注,匹配敏感规则。 CREATE TABLE t_sensitive_data ( id int primary key auto_increment, name varchar(50) not null comment “姓名”, gender char(10) not null comment “性别”, email varchar(50) not null comment “email”, card_no varchar(50) not null, mac_address varchar(50) not null ); INSERT INTO t_sensitive_data (name, gender, email, card_no, mac_address) VALUES (‘米老鼠’, ‘女’, ‘ ’, ‘1111111111’, ‘6D:C5:28:08:56:13’), (‘唐老鸭’, ‘男’, ‘ ’, ‘2222222222’, ‘61:99:DF:2D:FE:53’), (‘哈利波特’, ‘男’, ‘ ’, ‘3333333333’, ‘A0:F8:30:A9:76:3A’); 在【敏感数据大盘】页面,我们可以看到敏感数据保护、数据源数量、表数量、敏感列数量、敏感数据访问等相关指标。 https://i-blog.csdnimg.cn/img_convert/9d8878d80f153e4adfdecb5f6647b300.png

典型场景:从 MySQL 复制数据到 TiDB

众所周知,MySQL 是蓝色星球上广泛流行的开源数据库。自 ,生命力依旧旺盛。TiDB 是一款 HTAP 分布式数据库产品,兼容 MySQL 协议和 MySQL 生态。面对企业业务高速增长,数据量级增长到 TB 或 PB 后,MySQL 的性能和扩展性严重受限。可以将 MySQL 按微服务对应的库表进行拆分,且不说拆分后成百上千个实例的运维成本很高,有很多金融业务和传统行业库表之间强耦合,关联业务代码改造的成本也极高。云原生分布式数据库 TiDB 可以帮助用户应对挑战,在保障数据库可靠性、数据一致性的前提下,可有效提升开发效率、降低维护成本、提升写入性能。将数据 ,从容面对未来五到十年甚至更长线的挑战。 https://i-blog.csdnimg.cn/img_convert/6a7c539a557d51ee3b03db4550bd54a0.png NineData 社区版提供数据复制和数据库对比功能。数据复制支持多种同异构数据源之间的离线、实时数据复制,支持结构复制、全量复制、增量复制。数据库对比功能则可以对两个数据源之间的内容进行一致性对比,支持结构对比、数据对比、增量对比,并在结构不一致的情况下自动生成变更 SQL。这些功能均可在 NineData 可视化控制台中进行操作,简单易用、轻松上手。 https://i-blog.csdnimg.cn/img_convert/c9bb0baea0b68a9145084c6d59151a74.png 以 MySQL 到 TiDB 为例,演示如何使用 NineData 社区版的数据复制功能。

1 环境准备

演示环境,这里准备了 MySQL 8.0.41 和 TiDB 8.5.1。 mysql> select version()\G *************************** 1. row *************************** version(): 8.0.41 1 row in set (0.00 sec) tidb> select tidb_version()\G *************************** 1. row *************************** tidb_version(): Release Version: v8.5.1 Edition: Community Git Commit Hash: fea86c8e35ad4a86a5e1160701f99493c2ee547c Git Branch: HEAD UTC Build Time: 2025-01-16 07:38:34 GoVersion: go1.23.4 Race Enabled: false Check Table Before Drop: false Store: tikv 1 row in set (0.00 sec)

2 操作步骤

  1. 创建复制 在 NineData 控制台上,点击【数据复制】-【数据复制】-【创建复制】。填写任务名称,选择源数据源和目标数据源,选择结构复制和全量复制。 https://i-blog.csdnimg.cn/img_convert/ef82e609e9b69cec993b08e8feaad93f.png
  2. 选择复制对象 选择需要复制的表,这里有一项黑名单功能,可以排除指定对象。
  3. 配置映射 配置映射环节中的【映射与过滤】功能,可以自定义列名同步到目标数据源之后的名称。并且,还支持设置数据过滤条件,仅符合过滤条件的数据会同步到目标数据源。
  4. 预检查 预检查提供 16 项检测,通过检查后,点击【启动任务】,可以勾选【开启数据一致性对比】,当全量数据复制完成后,会自动进行数据比对。 https://i-blog.csdnimg.cn/img_convert/8de8d3992ef789bd6aed6feb3e45dd99.png
  5. 启动任务 同步任务开始运行,可返回列表查看数据复制状态。
  6. 查验数据 同步任务完成后,控制台返回比对结果“一致”。 https://i-blog.csdnimg.cn/img_convert/b68a223161439c24188e5cf98bbc2da5.png 演示数据较少,我们分别登陆 MySQL 和 TiDB 查验表结构和数据。 https://i-blog.csdnimg.cn/img_convert/b619a3ed193e6caf7275968c2d6f55d7.png 一次完整的数据复制流程演示到这里,还有一些注意事项参见 NineData 官方文档:

总结

NineData 社区版通过本地化部署、永y久免费,及极简而有效的用户体验,为数据管理提供了安全高效的解决方案。帮助个人开发者、初创团队提升全链路数据管控能力、数据流转处理效率,从容应对未来业务增长需求和数据管理中的各种挑战。