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 集群中:
image

tiup dmctl --master-addr 192.168.9.156:8261 operate-source create mysql-source1.yaml
advertise-addr为 dm-master节点ip中的任意一台
image

查看数据源:
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
image
源端创建的最小化权限的用户按照官网配置还是不足,为了做实验,后面直接给了所有权限。
检查通过后就可以开始同步任务了。
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

源端增加一条数据:

目的端已经可以看到被同步过来的数据:

posted @   ^_^小情绪~  阅读(159)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示