腾讯云对象存储COS Migration工具实现多平台存储迁移至COS方法

老蒋在前面的篇幅中有陆续介绍到腾讯云COS对象存储配合网站静态分离,我们可以使用到WPCOS插件,包括其他也有类似的插件工具实现的。但是这里存在一个问题,如果我们已有本地静态文件在启用对象存储分离之后,如何将数据迁移到对象存储COS中呢?当然也包括如果我们有在使用其他对象存储的时候,如何将数据迁移到腾讯云COS中。

在前面老蒋有介绍到COSBrowser工具可以实现可视化类似FTP一样的工具将本地的数据迁移到COS中。但是稍微比较繁琐,我们需要先将其他对象存储或者是本地网站目录的文件迁移到本地,然后利用COSBrowser客户端工具再传输,一般的个人网站、企业网站数据量不大,那肯定是没有多少问题。如果遇到几百M、几个G数据,那通过这个办法就比较笨拙。

老蒋前几天也有介绍到COS后台自带的"腾讯云对象存储批量迁移至其他对象存储工具和设置方法",我们可以直接在线将大部分第三方对象存储的数据直接迁移进来,或者今天我们需要介绍的一款也是来自官方的COS Migration工具,可以实现本地、第三方对象存储命令式迁移,这个效率会高一些,但是操作上并不是那么直接可视化的,我们一起看看。

第一、COS Migration工具特点

COS Migration 是一个集成了 COS 数据迁移功能的一体化工具。通过简单的配置操作,用户可以将源地址数据快速迁移至 COS中。具备的特点:

1、从本地迁移, migrateLocal(本地迁移工具, 同之前的本地同步工具)

2、从友商迁移, migrateAws(从aws迁移), migrateAli(从阿里迁移), migrateQiniu(从七牛迁移), migrateUpyun(从又拍云迁移)

3、从url列表迁移, migrateUrl(这些url都是可以直接下载的,将要迁移的url放到一个文件或者多个文件里)

4、 COS的bucket复制. migrateBucketCopy(将COS一个bucket下的数据复制到另外一个bucket, 支持跨账号跨地域,前提是账户需要对源bucket源bucket有可读权限,对目的bucket有putObjectCopy权限)

第二、COS Migration 工具安装和使用

COS Migration 支持 Windows、Linux 和 macOS 系统,需要JDK 1.8 X64或以上版本支持。

1、下载与安装

下载地址:https://github.com/tencentyun/cos_migrate_tool_v5

2、解压与安装

Windows系统我们可以解压放到自己的目录中:

C:\Users\Administrator\Downloads\cos_migrate

Linux 我们也是解压到某个目录:

unzip cos_migrate_tool_v5-master.zip && cd cos_migrate_tool_v5-master

然后可以看到正确的目录结构:

COS_Migrate_tool
|——conf #配置文件所在目录
| |——config.ini #迁移配置文件
|——db #存储迁移成功的记录
|——dep #程序主逻辑编译生成的JAR包
|——log #工具执行中生成的日志
|——opbin #用于编译的脚本
|——src #工具的源码
|——tmp #临时文件存储目录
|——pom.xml #项目配置文件
|——README #说明文档
|——start_migrate.sh #Linux 下迁移启动脚本
|——start_migrate.bat #Windows 下迁移启动脚本

3、修改配置文件

我们在启动执行之前需要配置文件:

./conf/config.ini

我们可以看到这个文件里有很详细的说明。

COS Migration

我们可以从上往下看,设置类型:

[migrateType] type=migrateLocal

目前类型支持也不少:

migrateType 描述
migrateLocal 从本地迁移至 COS
migrateAws 从 AWS S3 迁移至 COS
migrateAli 从阿里 OSS 迁移至 COS
migrateQiniu 从七牛迁移至 COS
migrateUrl 下载 URL 迁移到 COS
migrateBucketCopy 从源 Bucket 复制到目标 Bucket
migrateUpyun 从又拍云迁移到 COS

然后我们需要配置COS的迁移参数:

# 迁移工具的公共配置分节,包含了需要迁移到目标 COS 的账户信息。
[common] secretId=COS_SECRETID
secretKey=COS_SECRETKEY
bucketName=examplebucket-1250000000
region=ap-guangzhou
storageClass=Standard
cosPath=/
https=off
tmpFolder=./tmp
smallFileThreshold=5242880
smallFileExecutorNum=64
bigFileExecutorNum=8
entireFileMd5Attached=on
daemonMode=off
daemonModeInterVal=60
executeTimeWindow=00:00,24:00
encryptionType=sse-cos

根据我们实际的COS参数填写,配置文件说明很详细,我们可以参考备注。对应的说明可参考:

名称 描述 默认值
secretId 用户密钥 SecretId,请将COS_SECRETID替换为您的真实密钥信息。 -
secretKey 用户密钥 SecretKey,请将COS_SECRETKEY替换为您的真实密钥信息。可前往 访问管理控制台 中的云 API 密钥页面查看获取 -
bucketName 目的 Bucket 的名称, 命名格式为 <BucketName-APPID>,即 Bucket 名必须包含 APPID,例如 examplebucket-1250000000 -
region 目的 Bucket 的 Region 信息。 -
storageClass 存储类型:Standard(标准存储),Standard_IA(低频存储),Archive(归档存储) Standard
cosPath 要迁移到的 COS 路径。/表示迁移到 Bucket 的根路径下,/folder/doc/ 表示要迁移到 Bucket的/folder/doc/ 下,若 /folder/doc/ 不存在,则会自动创建路径 /
https 是否使用 HTTPS 传输:on 表示开启,off 表示关闭。开启传输速度较慢,适用于对传输安全要求高的场景 off
tmpFolder 从其他云存储迁移至 COS 的过程中,用于存储临时文件的目录,迁移完成后会删除。要求格式为绝对路径:
Linux 下分隔符为单斜杠,例如/a/b/c
Windows 下分隔符为两个反斜杠,例如E:\\a\\b\\c
默认为工具所在路径下的 tmp 目录
./tmp
smallFileThreshold 小文件阈值的字节,大于等于这个阈值使用分块上传,否则使用简单上传,默认5MB 5242880
smallFileExecutorNum 小文件(文件小于 smallFileThreshold)的并发度,使用简单上传。如果是通过外网来连接 COS,且带宽较小,请减小该并发度 64
bigFileExecutorNum 大文件(文件大于等于 smallFileThreshold)的并发度,使用分块上传。如果是通过外网来连接 COS,且带宽较小,请减小该并发度 8
entireFileMd5Attached 表示迁移工具将全文的 MD5 计算后,存入文件的自定义头部 x-cos-meta-md5 中,用于后续的校验,因为 COS 的分块上传的大文件的 etag 不是全文的 MD5 on
daemonMode 是否启用 daemon 模式:on 表示开启,off 表示关闭。daemon 表示程序会循环不停的去执行同步,每一轮同步的间隔由 daemonModeInterVal 参数设置 off
daemonModeInterVal 表示每一轮同步结束后,多久进行下一轮同步,单位为秒 60
executeTimeWindow 执行时间窗口,时刻粒度为分钟,该参数定义迁移工具每天执行的时间段。例如:
参数 03:30,21:00,表示在凌晨 03:30 到晚上 21:00 之间执行任务,其他时间则会进入休眠状态,休眠态暂停迁移并会保留迁移进度, 直到下一个时间窗口自动继续执行
00:00,24:00
encryptionType 表示使用 sse-cos 服务端加密 默认不填,需要服务端加密时填写

然后我们需要去配置目标源,根据我们上面的类型是本地还是第三方友商对象存储,然后选择对应的配置即可,其他可以不管。

如果迁移本地数据(migrateLocal):

# 从本地迁移到 COS 配置分节
[migrateLocal] localPath=E:\\code\\java\\workspace\\cos_migrate_tool\\test_data
excludes=
ignoreModifiedTimeLessThanSeconds=

这是示范配置,具体参数:

配置项 描述
localPath 本地路径,要求格式为绝对路径:
  • Linux 下分隔符为单斜杠,例如/a/b/c
  • Windows 下分隔符为两个反斜杠,例如E:\\a\\b\\c
excludes 要排除的目录或者文件的绝对路径,表示将 localPath 下面某些目录或者文件不进行迁移,多个绝对路径之前用分号分割,不填表示 localPath 下面的全部迁移
ignoreModifiedTimeLessThanSeconds 排除更新时间与当前时间相差不足一定时间段的文件,单位为秒,默认不设置,表示不根据 lastmodified 时间进行筛选,适用于客户在更新文件的同时又在运行迁移工具,并要求不把正在更新的文件迁移上传到 COS,例如设置为300,表示只上传更新了5分钟以上的文件

如果迁移阿里云对象存储数据源(migrateAli):

# 从阿里 OSS 迁移到 COS 配置分节
[migrateAli] bucket=bucket-aliyun
accessKeyId=yourAccessKeyId
accessKeySecret=yourAccessKeySecret
endPoint= oss-cn-hangzhou.aliyuncs.com
prefix=
proxyHost=
proxyPort=

具体参数参考:

配置项 描述
bucket 阿里云 OSS Bucket 名称
accessKeyId 将 yourAccessKeyId 替换为用户的密钥
accessKeySecret 将 yourAccessKeySecret 替换为用户的密钥
endPoint 阿里云 endpoint 地址
prefix 要迁移的路径的前缀,如果是迁移 Bucket 下所有的数据, 则 prefix 为空
proxyHost 如果要使用代理进行访问,则填写代理 IP 地址
proxyPort 代理的端口

如果是AWS对象存储数据迁移(migrateAws):

# 从 AWS 迁移到 COS 配置分节
[migrateAws] bucket=bucket-aws
accessKeyId=AccessKeyId
accessKeySecret=SecretAccessKey
endPoint=s3.us-east-1.amazonaws.com
prefix=
proxyHost=
proxyPort=

具体参数:

配置项 描述
bucket AWS 对象存储 Bucket 名称
accessKeyId 将 AccessKeyId 替换为用户的密钥
accessKeySecret 将 SecretAccessKey 替换为用户的密钥
endPoint AWS 的 endpoint 地址,必须使用域名,不能使用 region
prefix 要迁移的路径的前缀,如果是迁移 Bucket 下所有的数据,则 prefix 为空
proxyHost 如果要使用代理进行访问,则填写代理 IP 地址
proxyPort 代理的端口

如果是七牛对象存储数据(migrateQiniu):

# 从七牛迁移到COS配置分节
[migrateQiniu] bucket=bucket-qiniu
accessKeyId=AccessKey
accessKeySecret=SecretKey
endPoint=www.bkt.clouddn.com
prefix=
proxyHost=
proxyPort=

具体参数:

配置项 描述
bucket 七牛对象存储 Bucket 名称
accessKeyId 将 AccessKey 替换为用户的密钥
accessKeySecret 将 SecretKey 替换为用户的密钥
endPoint 七牛下载地址,对应 downloadDomain
prefix 要迁移的路径的前缀,如果是迁移 Bucket 下所有的数据,则 prefix 为空
proxyHost 如果要使用代理进行访问,则填写代理 IP 地址
proxyPort 代理的端口

如果是列表URL数据(migrateUrl):

# 从 URL 列表下载迁移到 COS 配置分节
[migrateUrl] urllistPath=D:\\folder\\urllist.txt

参数参考:

配置项 描述
urllistPath URL 列表的地址,内容为 URL 文本,一行一条 URL 原始地址(例如http://aaa.bbb.com/yyy/zzz.txt,无需添加任何双引号或其他符号)。URL 列表的地址要求为绝对路径:
  • Linux 下分隔符为单斜杠,例如/a/b/c.txt
  • Windows 下分隔符为两个反斜杠,例如E:\\a\\b\\c.txt
    如果填写的是目录,则会将该目录下的所有文件视为 urllist 文件去扫描迁移

如果是COS存储桶之间相互复制(migrateBucketCopy):

# 从源 Bucket 迁移到目标 Bucket 配置分节
[migrateBucketCopy] srcRegion=ap-shanghai
srcBucketName=examplebucket-1250000000
srcSecretId=COS_SECRETID
srcSecretKey=COS_SECRETKEY
srcCosPath=/

参数参考:

配置项 描述
srcRegion 源 Bucket 的 Region 信息,请参照 可用地域
srcBucketName 源 Bucket 的名称,命名格式为 <BucketName-APPID>,即 Bucket 名必须包含 APPID,例如 examplebucket-1250000000
srcSecretId 源 Bucket 隶属的用户的密钥 SecretId,可在 云 API 密钥 查看。如果是同一用户的数据,则 srcSecretId 和 common 中的 SecretId 相同,否则是跨账号 Bucket 拷贝
srcSecretKey 源 Bucket 隶属的用户的密钥 secret_key,可在 云 API 密钥 查看。如果是同一用户的数据,则 srcSecretKey 和 common 中的 secretKey 相同,否则是跨账号 Bucket 拷贝
srcCosPath 要迁移的 COS 路径,表示该路径下的文件要迁移至目标 Bucket

如果迁移又拍云数据(migrateUpyun):

[migrateUpyun] # 从又拍迁移
bucket=xxx
#又拍云操作员的 ID
accessKeyId=xxx
#又拍云操作员的密码
accessKeySecret=xxx
prefix=

#又拍云 sdk 限制,这个 proxy 会被设置成全局的 proxy
proxyHost=
proxyPort=

参考参数:

配置项 描述
bucket 又拍云 USS Bucket 名称
accessKeyId 替换为又拍云操作员的 ID
accessKeySecret 替换为又拍云操作员的密码
prefix 要迁移的路径的前缀,如果是迁移 Bucket 下所有的数据,则 prefix 为空
proxyHost 如果要使用代理进行访问,则填写代理 IP 地址
proxyPort 代理的端口

目前支持多个第三方对象存储迁移至COS,也支持COS之间的拷贝,或者URL目录迁移。配置完毕文件之后,我们根据自己所在的系统,Windows或者Linux 触发的命令是不同的。然后根据实际配置可以看到执行。具体的文档我们也可以参考:https://cloud.tencent.com/document/product/436/15392。

本文出处:老蒋部落 » 腾讯云对象存储COS Migration工具实现多平台存储迁移至COS方法 | 欢迎分享( 公众号:QQ69377078 )