文章目录
-
- 一、迁移流程总览
- 二、操作步骤
-
- [1、 数据库数据备份到minioA](#1、 数据库数据备份到minioA)
-
- 1.1、准备工作:创建桶和创建仓库
- [1.2、 备份单个数据库](#1.2、 备份单个数据库)
- [1.3 取消备份(如需要)](#1.3 取消备份(如需要))
- [2、 MinIO A数据迁移到MinIO B(minio互通可省略)](#2、 MinIO A数据迁移到MinIO B(minio互通可省略))
-
- [2.1 在中转机器配置MinIO客户端](#2.1 在中转机器配置MinIO客户端)
- [2.2 下载MinIO A数据到本地](#2.2 下载MinIO A数据到本地)
- [2.3 上传数据到MinIO B](#2.3 上传数据到MinIO B)
- [3、 集群B从MinIO B恢复](#3、 集群B从MinIO B恢复)
-
- 3.1、准备:创建库和仓库
- 3.2、恢复数据库
- [3.3、 验证恢复结果](#3.3、 验证恢复结果)
- 三、常见问题处理
-
- [4.1 备份失败处理](#4.1 备份失败处理)
- [4.2 恢复失败处理](#4.2 恢复失败处理)
- [4.3 仓库删除](#4.3 仓库删除)
- [4.4 查看备份/恢复历史](#4.4 查看备份/恢复历史)
- [4.5 MinIO数据迁移问题](#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、准备工作:创建桶和创建仓库
shell
#一、 minio创建桶
## 1. 创建MinIOA的别名
/usr/bin/mc alias set minio_a http://ip:9000 admin Administrator123
## 2. 创建存储桶
/usr/bin/mc mb minio_a/srbackupa
## 3. 验证桶创建成功
/usr/bin/mc ls minio_a/
# 二、创建仓库:
# 进入mysql连接starrocks
mysql -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
shell
# 一、创建桶
# 进入容器
docker exec it minio1 bash
# 创建minio别名为minio_a
/usr/bin/mc alias set minio_a http://11.73.242.177:9000 admin Administrator123
# 创建minio桶:srbackupa
/usr/bin/mc mb minio_a/srbackupa
# 查看桶信息
/usr/bin/mc ls minio_a/
[2025-11-28 08:36:42 UTC] 0B srbackupa/
# 二、创建仓库
docker exec -it starrocks-fe bash
mysql -h11.73.242.177 -P9030 -uroot
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 REPOSITORIES;
1.2、 备份单个数据库
sql
-- 备份数据库
-- 以下示例在数据库 db_name 中创建数据快照 snapshot_name(命名随意) 并备份至仓库 backup_repo_a 中。
BACKUP SNAPSHOT db_name.snapshot_name
TO `backup_repo_a`
PROPERTIES ("type" = "full");
-- 查看备份进度
SHOW BACKUP FROM db_name \G;
-- 查看所有备份快照
SHOW SNAPSHOT ON `backup_repo_a`;
备份完成标志: State 为 FINISHED,Status 为 [OK]
示例:数据库名为test_db
shell
docker exec -it starrocks-fe bash
mysql -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: 12051
SnapshotName: snapshot_name
DbName: test_db
State: FINISHED
BackupObjs: [test_db.test_table]
CreateTime: 2025-11-28 16:42:32
SnapshotFinishedTime: 2025-11-28 16:42:42
UploadFinishedTime: 2025-11-28 16:42:48
FinishedTime: 2025-11-28 16: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 |
+---------------+-------------------------+--------+
1 row in set (0.02 sec)
1.3 取消备份(如需要)
sql
-- 取消正在进行的备份
CANCEL BACKUP FROM db_name;
2、 MinIO A数据迁移到MinIO B(minio互通可省略)
2.1 在中转机器配置MinIO客户端
shell
# 配置MinIO A别名
/usr/bin/mc alias set minio_a http://minio_a_server:9000 admin Administrator123
# 配置MinIO B别名
/usr/bin/mc alias set minio_b http://minio_b_server:9000 admin Administrator123
2.2 下载MinIO A数据到本地
shell
# 创建本地目录
mkdir -p /tmp/starrocks_backup
# 进入容器
docker exec -it minio1 bash
# 下载MinIO A中的数据
/usr/bin/mc cp --recursive minio_a/srbackupa/ /tmp/starrocks_backup
# 退出容器, 导出的minio数据传递到宿主机
exit
docker cp minio1:/tmp/starrocks_backup/ /tmp/starrocks_backup/
Successfully copied 50.2kB to /tmp/starrocks_backup/
# 验证下载
ls -lh /tmp/starrocks_backup/
du -sh /tmp/starrocks_backup/
运行实例:
shell
# 创建本地存储文件夹
mkdir -p /tmp/starrocks_backup
# 进入容器
docker exec -it minio1 bash
# 下载MinIO A中的数据到本地
/usr/bin/mc cp --recursive minio_a/srbackupa/ /tmp/starrocks_backup
# ...0e58823af131c747080: 17.92 KiB / 17.92 KiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 456.07 KiB/s 0s
# 退出容器, 导出的备份数据传递到宿主机
exit
docker cp minio1:/tmp/starrocks_backup/ /tmp/starrocks_backup/
Successfully copied 50.2kB to /tmp/starrocks_backup/
# 验证下载
ls -lh /tmp/starrocks_backup/
du -sh /tmp/starrocks_backup/
104K /tmp/starrocks_backup/
2.3 上传数据到MinIO B
shell
# 1. 创建MinIO B存储桶
/usr/bin/mc mb minio_b/starrocks_backup_b
# 2. 上传数据到MinIO B
/usr/bin/mc cp --recursive /tmp/starrocks_backup/ minio_b/starrocks_backup_b/
# 3. 验证上传
/usr/bin/mc ls -r minio_b/starrocks_backup_b/
注意: 如果中转机器无法同时访问两个MinIO,需要:
- 在可访问MinIO A的机器下载数据
- 将数据文件传输到可访问MinIO B的机器(使用scp、rsync等)
- 在可访问MinIO B的机器上传数据
使用scp传输示例:
shell
# 在可访问MinIO A的机器上打包
tar -czf starrocks_backup.tar.gz /tmp/starrocks_backup/
# 传输到可访问MinIO B的机器
scp starrocks_backup.tar.gz user@minio_b_client_host:/tmp/
# 在可访问MinIO B的机器上解压
ssh user@minio_b_client_host "cd /tmp && tar -xzf starrocks_backup.tar.gz"
3、 集群B从MinIO B恢复
3.1、准备:创建库和仓库
sql
mysql -h${cluster_b_fe_leader} -P9030 -uroot -p${password}
-- 创建数据库(如果不存在)
CREATE DATABASE IF NOT EXISTS db_name;
-- 创建仓库(指向MinIO B)
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_b_server:9000"
);
-- 验证仓库
SHOW REPOSITORIES;
shell
docker exec -it starrocks-fe bash
mysql -h11.73.242.177 -P9030 -uroot
create 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、恢复数据库
sql
-- 恢复数据库
RESTORE SNAPSHOT db_name.snapshot_name
FROM `backup_repo_a`
PROPERTIES (
"backup_timestamp" = "2025-11-28-16-42-32-077",
"replication_num" = "3"
);
-- 查看恢复进度
SHOW RESTORE FROM db_name \G;
恢复完成标志: State 为 FINISHED,Status 为 [OK]
执行实例
backup_timestamp=2025-11-28-16-42-32-077为旧的starrocks备份的时间戳
sql
-- 恢复数据库
RESTORE SNAPSHOT test_db.snapshot_name
FROM `backup_repo_a`
PROPERTIES (
"backup_timestamp" = "2025-11-28-16-42-32-077",
"replication_num" = "3"
);
-- 查看恢复进度:FINISHED表示成功
mysql> SHOW RESTORE FROM test_db \G;
*************************** 1. row ***************************
JobId: 10262
Label: snapshot_name
Timestamp: 2025-11-28-16-42-32-077
DbName: test_db
State: FINISHED
AllowLoad: false
ReplicationNum: 3
RestoreObjs: test_table
CreateTime: 2025-11-28 17:29:43
MetaPreparedTime: 2025-11-28 17:29:44
SnapshotFinishedTime: 2025-11-28 17:29:47
DownloadFinishedTime: 2025-11-28 17:29:53
FinishedTime: 2025-11-28 17:29:59
UnfinishedTasks:
Progress:
TaskErrMsg:
Status: [OK]
Timeout: 86400
3.3、 验证恢复结果
sql
-- 查看数据库
SHOW DATABASES;
-- 查看表
USE db_name;
SHOW TABLES;
-- 验证数据量
SELECT COUNT(*) FROM table_name;
-- 查看表结构
DESC table_name;
三、常见问题处理
4.1 备份失败处理
sql
-- 查看备份错误详情
SHOW BACKUP FROM db_name \G;
-- 取消失败的备份
CANCEL BACKUP FROM db_name;
-- 删除失败的仓库重新创建
DROP REPOSITORY `backup_repo_a`;
4.2 恢复失败处理
sql
-- 查看恢复错误详情
SHOW RESTORE FROM db_name \G;
-- 如果表已存在导致恢复失败,先删除表
DROP TABLE IF EXISTS table_name;
-- 重新执行恢复
4.3 仓库删除
sql
-- 删除仓库
DROP REPOSITORY `backup_repo_a`;
DROP REPOSITORY `backup_repo_b`;
-- 注意:删除仓库后需要手动清理MinIO中的文件
4.4 查看备份/恢复历史
sql
-- 查看所有备份历史
SHOW BACKUP;
-- 查看所有恢复历史
SHOW RESTORE;
4.5 MinIO数据迁移问题
shell
# 如果MinIO客户端连接失败,检查网络和认证信息
/usr/bin/mc admin info minio_a
/usr/bin/mc admin info minio_b
# 如果下载/上传中断,可以断点续传(mc支持)
/usr/bin/mc cp --recursive --continue minio_a/bucket/ /tmp/backup/