NineData-社区版从-MySQL-到-TiDB-数据复制新选择
NineData 社区版:从 MySQL 到 TiDB 数据复制新选择
在数据管理领域,一款优秀的工具能够极大地提升工作效率,而 NineData 社区版正是这样一款工具。NineData 社区版功能强大、永y久免费、一键安装,为开发者、初创团队、教育机构提供了极大的便利。
什么是 NineData 社区版
NineData 社区版是玖章算术推出的永y久免费、一键安装的数据管理解决方案。包含 NineData 的数据库
DevOps、数据复制、数据库对比三个核心功能。NineData 社区版是一个完全离线运行的本地化部署版本,所有数据与操作 100%
留存于您的本地环境,满足敏感业务的数据合规要求。NineData 提供用户管理,支持普通账号和 SSO
账号两种类型,提供权限管理,颗粒度细化到数据源、库、表、敏感列、模块、操作,并且支持 SQL 任务审核,为数据管理提供了安全保障。
NineData 社区版支持高性能实时数据迁移同步,基于自研 CDC 技术,专业解决数据库迁移、同步、容灾等业务需求,支持每秒数万 TPS
实时数据复制。NineData 社区版支持同构、异构数据源之间数据一致性校验,在不一致的情况下支持自动生成变更
SQL,支持结构对比、全量对比、抽样对比、周期性对比等多种对比方式,动态监测数据库负载,对比速度自适应,保障数据库稳定性。
如何安装 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
来查看容器日志,成功启动后可看到如下输出。
也可通过命令
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
。首次登录后页面会弹出修改密码窗口,提示立即更改管理员密码。
(Ps. 原先登录页面太朴素,P了个logo上去)
2 数据源管理
用户可以在 NineData 控制台中添加需要管理的数据源,支持多云、多类型、多个数据源。社区版目前支持添加 10 个数据源。
如下图,数据源已成功添加
8.0、
8.5、
4.4、
库 DM8 等数据库。(Ps.支持直接修改数据源备注信息的设计不错。)
3 敏感数据管理
对于涉及敏感信息的数据,用户可以利用 NineData 的【敏感数据】模块进行设置。NineData 提供了智能数据分类分级,内置 S0 到 S5
六个敏感等级,预设 27 种数据类型,预定 36 条脱敏算法,涵盖了大部分的脱敏方式,如果这些脱敏算法中未包含用户的场景,还可以自行创建新的脱敏算法。
用户可通过自动或手动添加敏感列,对敏感数据进行分类分级管控,并选择合适的脱敏算法对敏感列进行脱敏。
NineData 社区版,目前支持对 MySQL 数据源做敏感数据扫描,并对扫描结果直接生效敏感等级。
用户可在【数据库 DevOps】模块的【SQL 窗口】对数据进行查询,应用敏感规则后,查询结果为脱敏数据。
测试用例:
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’);
在【敏感数据大盘】页面,我们可以看到敏感数据保护、数据源数量、表数量、敏感列数量、敏感数据访问等相关指标。
典型场景:从 MySQL 复制数据到 TiDB
众所周知,MySQL 是蓝色星球上广泛流行的开源数据库。自
,生命力依旧旺盛。TiDB 是一款 HTAP 分布式数据库产品,兼容 MySQL 协议和 MySQL
生态。面对企业业务高速增长,数据量级增长到 TB 或 PB 后,MySQL 的性能和扩展性严重受限。可以将 MySQL
按微服务对应的库表进行拆分,且不说拆分后成百上千个实例的运维成本很高,有很多金融业务和传统行业库表之间强耦合,关联业务代码改造的成本也极高。云原生分布式数据库
TiDB 可以帮助用户应对挑战,在保障数据库可靠性、数据一致性的前提下,可有效提升开发效率、降低维护成本、提升写入性能。将数据
,从容面对未来五到十年甚至更长线的挑战。
NineData
社区版提供数据复制和数据库对比功能。数据复制支持多种同异构数据源之间的离线、实时数据复制,支持结构复制、全量复制、增量复制。数据库对比功能则可以对两个数据源之间的内容进行一致性对比,支持结构对比、数据对比、增量对比,并在结构不一致的情况下自动生成变更
SQL。这些功能均可在 NineData 可视化控制台中进行操作,简单易用、轻松上手。
以 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 操作步骤
- 创建复制
在 NineData 控制台上,点击【数据复制】-【数据复制】-【创建复制】。填写任务名称,选择源数据源和目标数据源,选择结构复制和全量复制。
- 选择复制对象 选择需要复制的表,这里有一项黑名单功能,可以排除指定对象。
- 配置映射 配置映射环节中的【映射与过滤】功能,可以自定义列名同步到目标数据源之后的名称。并且,还支持设置数据过滤条件,仅符合过滤条件的数据会同步到目标数据源。
- 预检查
预检查提供 16 项检测,通过检查后,点击【启动任务】,可以勾选【开启数据一致性对比】,当全量数据复制完成后,会自动进行数据比对。
- 启动任务 同步任务开始运行,可返回列表查看数据复制状态。
- 查验数据
同步任务完成后,控制台返回比对结果“一致”。
演示数据较少,我们分别登陆 MySQL 和 TiDB 查验表结构和数据。
一次完整的数据复制流程演示到这里,还有一些注意事项参见 NineData 官方文档:
总结
NineData 社区版通过本地化部署、永y久免费,及极简而有效的用户体验,为数据管理提供了安全高效的解决方案。帮助个人开发者、初创团队提升全链路数据管控能力、数据流转处理效率,从容应对未来业务增长需求和数据管理中的各种挑战。