2.mysql 数据迁移到Tidb(小数据量,不超过1TB)
备注:迁移mysql数据到Tidb需要依赖DM集群和创建2个数据库的用户和权限。可以参考DM部那个环节。
创建环境,准备MYsql数据源:
在线安装docker,然后通过docker安装一个mysql
一键脚本安装:
官方的一键安装方式
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
国内 daocloud一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
拉取对应的镜像文件
docker pull mysql:5.7
docker run --name mysql57 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ./mysql/own/datadir:/var/lib/mysql -d mysql:5.7
解决镜像源问题
点击查看代码
tee /etc/docker/daemon.json <<- EOF
{
"registry-mirrors": ["https://docker.1panel.live/","https://docker.m.daocloud.io", "https://noohub.ru", "https://huecker.io", "https://dockerhub.timeweb.cloud"]
}
EOF
创建测试数据:
点击查看代码
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100));
INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com');
INSERT INTO users (name, email) VALUES ('李四', 'lisi@example.com');
INSERT INTO users (name, email) VALUES ('王五', 'wangwu@example.com');
同步架构图;
准备源端数据源:
创建源端数据源配置文件
点击查看代码
# 唯一命名,不可重复。
source-id: "mysql-01"
# DM-worker 是否使用全局事务标识符 (GTID) 拉取 binlog。使用前提是上游 MySQL 已开启 GTID 模式。若上游存在主从自动切换,则必须使用 GTID 模式。
enable-gtid: true
from:
host: "${host}" # 例如:172.16.10.81
user: "root"
password: "${password}" # 支持但不推荐使用明文密码,建议使用 dmctl encrypt 对明文密码进行加密后使用
port: 3306
使用 tiup dmctl 将数据源配置加载到 DM 集群中:
tiup dmctl --master-addr 192.168.9.156:8261 operate-source create mysql-source1.yaml
advertise-addr为 dm-master节点ip中的任意一台
查看数据源:
tiup dmctl --master-addr 192.168.9.156:8261 get-config source mysql-01
或者第二种方也可以查看到数据源,一个work对应一个数据源
tiup dmctl --master-addr 192.168.9.156:8261 operate-source show mysql-source1.yaml
配置同步任务:
创建同步任务的配置文件
点击查看代码
# 任务名,多个同时运行的任务不能重名。
name: "test"
# 任务模式,可设为
# full:只进行全量数据迁移
# incremental: binlog 实时同步
# all: 全量 + binlog 迁移
task-mode: "all"
# 下游 TiDB 配置信息。
target-database:
host: "192.168.9.156" # 例如:172.16.10.83
port: 4000
user: "tidb_test1"
password: "123456" # 支持但不推荐使用明文密码,建议使用 dmctl encrypt 对明文密码进行加密后使用
# 当前数据迁移任务需要的全部上游 MySQL 实例配置。
mysql-instances:
-
# 上游实例或者复制组 ID。
source-id: "mysql-01"
# 需要迁移的库名或表名的黑白名单的配置项名称,用于引用全局的黑白名单配置,全局配置见下面的 `block-allow-list` 的配置。
block-allow-list: "listA"
# 黑白名单全局配置,各实例通过配置项名引用。
block-allow-list:
listA: # 名称
do-tables: # 需要迁移的上游表的白名单。
- db-name: "mysql_test1" # 需要迁移的表的库名。
tbl-name: "users" # 需要迁移的表的名称。
检查同步前的任务文件是否正常,如连接到源端还有目的端的账号信息以及权限是否充足等。
tiup dmctl --master-addr 192.168.9.156:8261 check-task mysql-task.yaml
源端创建的最小化权限的用户按照官网配置还是不足,为了做实验,后面直接给了所有权限。
检查通过后就可以开始同步任务了。
tiup dmctl --master-addr 192.168.9.156:8261 start-task mysql-task.yaml
查看同步状态:
tiup dmctl --master-addr 192.168.9.156:8261 query-status mysql-task.yaml
源端增加一条数据:
目的端已经可以看到被同步过来的数据:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了