文章目录
- 一、迁移流程总览
- 二、操作步骤
- 1、 数据库数据备份到minioA
- 1.1、准备工作:创建桶和创建仓库
- 1.2、 备份单个数据库
- 1.3 取消备份(如需要)
- 2、 MinIO A数据迁移到MinIO B(minio互通可省略)
- 2.1 在中转机器配置MinIO客户端
- 2.2 下载MinIO A数据到本地
- 2.3 上传数据到MinIO B
- 3、 集群B从MinIO B恢复
- 3.1、准备:创建库和仓库
- 3.2、恢复数据库
- 3.3、 验证恢复结果
- 三、常见问题处理
- 4.1 备份失败处理
- 4.2 恢复失败处理
- 4.3 仓库删除
- 4.4 查看备份/恢复历史
- 4.5 MinIO数据迁移问题
一、迁移流程总览
流程:集群A → MinIO A → 本地中转 → MinIO B → 集群B
1. 在MinIO A创建存储桶 2. 在集群A创建仓库并备份数据库 3. 从MinIO A下载备份到本地 4. 上传本地备份到MinIO B 5. 在集群B创建仓库并恢复数据库环境说明:
使用docker-compose部署的minio与Starrocks三节点高可用集群
其中Starrocks的版本为3.2.12、minio的版本为:RELEASE.2024-12-13T22-19-12Z
二、操作步骤
1、 数据库数据备份到minioA
1.1、准备工作:创建桶和创建仓库
#一、 minio创建桶## 1. 创建MinIOA的别名/usr/bin/mcaliassetminio_a http://ip:9000 admin Administrator123## 2. 创建存储桶/usr/bin/mc mb minio_a/srbackupa## 3. 验证桶创建成功/usr/bin/mclsminio_a/# 二、创建仓库:# 进入mysql连接starrocksmysql -h${cluster_a_fe_leader}-P9030-uroot-p${password}# 创建仓库(指向MinIO A)CREATE REPOSITORY`backup_repo_a`WITH BROKER ON LOCATION"s3a://srbackupa/backup"PROPERTIES("aws.s3.enable_ssl"="false","aws.s3.access_key"="admin","aws.s3.enable_path_style_access"="true","aws.s3.secret_key"="Administrator123","aws.s3.endpoint"="minio_a_server:9000");# 验证仓库SHOW REPOSITORIES;运行实例:minio的桶为srbackupa
# 一、创建桶# 进入容器dockerexecit minio1bash# 创建minio别名为minio_a/usr/bin/mcaliassetminio_a http://11.73.242.177:9000 admin Administrator123# 创建minio桶:srbackupa/usr/bin/mc mb minio_a/srbackupa# 查看桶信息/usr/bin/mclsminio_a/[2025-11-28 08:36:42 UTC]0B srbackupa/# 二、创建仓库dockerexec-itstarrocks-febashmysql-h11.73.242.177-P9030-urootCREATE REPOSITORY`backup_repo_a`WITH BROKER ON LOCATION"s3a://srbackupa/backup"PROPERTIES("aws.s3.enable_ssl"="false","aws.s3.access_key"="admin","aws.s3.enable_path_style_access"="true","aws.s3.secret_key"="Administrator123","aws.s3.endpoint"="11.73.242.177:9000");# 验证仓库SHOW REPOSITORIES;1.2、 备份单个数据库
-- 备份数据库-- 以下示例在数据库 db_name 中创建数据快照 snapshot_name(命名随意) 并备份至仓库 backup_repo_a 中。BACKUPSNAPSHOTdb_name.snapshot_nameTO`backup_repo_a`PROPERTIES("type"="full");-- 查看备份进度SHOWBACKUPFROMdb_name \G;-- 查看所有备份快照SHOWSNAPSHOTON`backup_repo_a`;备份完成标志:State为FINISHED,Status为[OK]
示例:数据库名为test_db
dockerexec-itstarrocks-febashmysql-h11.73.242.177-P9030-uroot# 创建仓库BACKUP SNAPSHOT test_db.snapshot_name TO`backup_repo_a`PROPERTIES("type"="full");# 查看备份过程mysql>SHOW BACKUP FROM test_db\G;***************************1. row *************************** JobId:12051SnapshotName: snapshot_name DbName: test_db State: FINISHED BackupObjs:[test_db.test_table]CreateTime:2025-11-2816:42:32 SnapshotFinishedTime:2025-11-2816:42:42 UploadFinishedTime:2025-11-2816:42:48 FinishedTime:2025-11-2816:42:54 UnfinishedTasks: Progress: TaskErrMsg: Status:[OK]Timeout:86400# 查看备份的快照:-- 注意时间戳恢复的时候要用 mysql>SHOW SNAPSHOT ON`backup_repo_a`;+---------------+-------------------------+--------+|Snapshot|Timestamp|Status|+---------------+-------------------------+--------+|snapshot_name|2025-11-28-16-42-32-077|OK|+---------------+-------------------------+--------+1rowinset(0.02sec)1.3 取消备份(如需要)
-- 取消正在进行的备份CANCELBACKUPFROMdb_name;2、 MinIO A数据迁移到MinIO B(minio互通可省略)
2.1 在中转机器配置MinIO客户端
# 配置MinIO A别名/usr/bin/mcaliassetminio_a http://minio_a_server:9000 admin Administrator123# 配置MinIO B别名/usr/bin/mcaliassetminio_b http://minio_b_server:9000 admin Administrator1232.2 下载MinIO A数据到本地
# 创建本地目录mkdir-p/tmp/starrocks_backup# 进入容器dockerexec-itminio1bash# 下载MinIO A中的数据/usr/bin/mccp--recursiveminio_a/srbackupa/ /tmp/starrocks_backup# 退出容器, 导出的minio数据传递到宿主机exitdockercpminio1:/tmp/starrocks_backup/ /tmp/starrocks_backup/ Successfully copied50.2kB to /tmp/starrocks_backup/# 验证下载ls-lh/tmp/starrocks_backup/du-sh/tmp/starrocks_backup/运行实例:
# 创建本地存储文件夹mkdir-p/tmp/starrocks_backup# 进入容器dockerexec-itminio1bash# 下载MinIO A中的数据到本地/usr/bin/mccp--recursiveminio_a/srbackupa/ /tmp/starrocks_backup# ...0e58823af131c747080: 17.92 KiB / 17.92 KiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 456.07 KiB/s 0s# 退出容器, 导出的备份数据传递到宿主机exitdockercpminio1:/tmp/starrocks_backup/ /tmp/starrocks_backup/ Successfully copied50.2kB to /tmp/starrocks_backup/# 验证下载ls-lh/tmp/starrocks_backup/du-sh/tmp/starrocks_backup/ 104K /tmp/starrocks_backup/2.3 上传数据到MinIO B
# 1. 创建MinIO B存储桶/usr/bin/mc mb minio_b/starrocks_backup_b# 2. 上传数据到MinIO B/usr/bin/mccp--recursive/tmp/starrocks_backup/ minio_b/starrocks_backup_b/# 3. 验证上传/usr/bin/mcls-rminio_b/starrocks_backup_b/注意:如果中转机器无法同时访问两个MinIO,需要:
- 在可访问MinIO A的机器下载数据
- 将数据文件传输到可访问MinIO B的机器(使用scp、rsync等)
- 在可访问MinIO B的机器上传数据
使用scp传输示例:
# 在可访问MinIO A的机器上打包tar-czfstarrocks_backup.tar.gz /tmp/starrocks_backup/# 传输到可访问MinIO B的机器scpstarrocks_backup.tar.gz user@minio_b_client_host:/tmp/# 在可访问MinIO B的机器上解压sshuser@minio_b_client_host"cd /tmp && tar -xzf starrocks_backup.tar.gz"3、 集群B从MinIO B恢复
3.1、准备:创建库和仓库
mysql-h${cluster_b_fe_leader}-P9030-uroot-p${password}-- 创建数据库(如果不存在)CREATEDATABASEIFNOTEXISTSdb_name;-- 创建仓库(指向MinIO B)CREATEREPOSITORY`backup_repo_a`WITHBROKERONLOCATION"s3a://srbackupa/backup"PROPERTIES("aws.s3.enable_ssl"="false","aws.s3.access_key"="admin","aws.s3.enable_path_style_access"="true","aws.s3.secret_key"="Administrator123","aws.s3.endpoint"="minio_b_server:9000");-- 验证仓库SHOWREPOSITORIES;dockerexec-itstarrocks-febashmysql-h11.73.242.177-P9030-urootcreate database test_db;# 我这里还是同一个minio所以还是指向旧的仓库名,用于恢复CREATE REPOSITORY`backup_repo_a`WITH BROKER ON LOCATION"s3a://srbackupa/backup"PROPERTIES("aws.s3.enable_ssl"="false","aws.s3.access_key"="admin","aws.s3.enable_path_style_access"="true","aws.s3.secret_key"="Administrator123","aws.s3.endpoint"="11.73.242.177:9000");-- 查看仓库中的快照 SHOW SNAPSHOT ON`backup_repo_a`;3.2、恢复数据库
-- 恢复数据库RESTORESNAPSHOTdb_name.snapshot_nameFROM`backup_repo_a`PROPERTIES("backup_timestamp"="2025-11-28-16-42-32-077","replication_num"="3");-- 查看恢复进度SHOWRESTOREFROMdb_name \G;恢复完成标志:State为FINISHED,Status为[OK]
执行实例
backup_timestamp=2025-11-28-16-42-32-077为旧的starrocks备份的时间戳
-- 恢复数据库RESTORESNAPSHOTtest_db.snapshot_nameFROM`backup_repo_a`PROPERTIES("backup_timestamp"="2025-11-28-16-42-32-077","replication_num"="3");-- 查看恢复进度:FINISHED表示成功mysql>SHOWRESTOREFROMtest_db \G;***************************1.row***************************JobId:10262Label: snapshot_nameTimestamp:2025-11-28-16-42-32-077DbName: test_db State: FINISHED AllowLoad:falseReplicationNum:3RestoreObjs: test_table CreateTime:2025-11-2817:29:43MetaPreparedTime:2025-11-2817:29:44SnapshotFinishedTime:2025-11-2817:29:47DownloadFinishedTime:2025-11-2817:29:53FinishedTime:2025-11-2817:29:59UnfinishedTasks: Progress: TaskErrMsg:Status:[OK]Timeout:864003.3、 验证恢复结果
-- 查看数据库SHOWDATABASES;-- 查看表USEdb_name;SHOWTABLES;-- 验证数据量SELECTCOUNT(*)FROMtable_name;-- 查看表结构DESCtable_name;三、常见问题处理
4.1 备份失败处理
-- 查看备份错误详情SHOWBACKUPFROMdb_name \G;-- 取消失败的备份CANCELBACKUPFROMdb_name;-- 删除失败的仓库重新创建DROPREPOSITORY`backup_repo_a`;4.2 恢复失败处理
-- 查看恢复错误详情SHOWRESTOREFROMdb_name \G;-- 如果表已存在导致恢复失败,先删除表DROPTABLEIFEXISTStable_name;-- 重新执行恢复4.3 仓库删除
-- 删除仓库DROPREPOSITORY`backup_repo_a`;DROPREPOSITORY`backup_repo_b`;-- 注意:删除仓库后需要手动清理MinIO中的文件4.4 查看备份/恢复历史
-- 查看所有备份历史SHOWBACKUP;-- 查看所有恢复历史SHOWRESTORE;4.5 MinIO数据迁移问题
# 如果MinIO客户端连接失败,检查网络和认证信息/usr/bin/mc admin info minio_a /usr/bin/mc admin info minio_b# 如果下载/上传中断,可以断点续传(mc支持)/usr/bin/mccp--recursive--continueminio_a/bucket/ /tmp/backup/