$npx -y skills add chaterm/terminal-skills --skill cloud-backup云备份方案
| 1 | # 云备份方案 |
| 2 | |
| 3 | ## 概述 |
| 4 | S3/OSS 备份、跨区域复制、生命周期管理技能。 |
| 5 | |
| 6 | ## AWS S3 备份 |
| 7 | |
| 8 | ### 基础操作 |
| 9 | ```bash |
| 10 | # 上传文件 |
| 11 | aws s3 cp backup.tar.gz s3://my-bucket/backups/ |
| 12 | |
| 13 | # 上传目录 |
| 14 | aws s3 sync /backup s3://my-bucket/backups/ |
| 15 | |
| 16 | # 下载 |
| 17 | aws s3 cp s3://my-bucket/backups/backup.tar.gz ./ |
| 18 | aws s3 sync s3://my-bucket/backups/ /restore/ |
| 19 | |
| 20 | # 列出文件 |
| 21 | aws s3 ls s3://my-bucket/backups/ |
| 22 | aws s3 ls s3://my-bucket/backups/ --recursive |
| 23 | ``` |
| 24 | |
| 25 | ### 高级选项 |
| 26 | ```bash |
| 27 | # 排除文件 |
| 28 | aws s3 sync /backup s3://my-bucket/ --exclude "*.log" |
| 29 | |
| 30 | # 存储类型 |
| 31 | aws s3 cp backup.tar.gz s3://my-bucket/ --storage-class STANDARD_IA |
| 32 | aws s3 cp backup.tar.gz s3://my-bucket/ --storage-class GLACIER |
| 33 | |
| 34 | # 服务端加密 |
| 35 | aws s3 cp backup.tar.gz s3://my-bucket/ --sse AES256 |
| 36 | aws s3 cp backup.tar.gz s3://my-bucket/ --sse aws:kms --sse-kms-key-id alias/my-key |
| 37 | |
| 38 | # 多部分上传 |
| 39 | aws s3 cp large-file.tar.gz s3://my-bucket/ --expected-size 10737418240 |
| 40 | ``` |
| 41 | |
| 42 | ### 生命周期策略 |
| 43 | ```json |
| 44 | { |
| 45 | "Rules": [ |
| 46 | { |
| 47 | "ID": "BackupLifecycle", |
| 48 | "Status": "Enabled", |
| 49 | "Filter": {"Prefix": "backups/"}, |
| 50 | "Transitions": [ |
| 51 | {"Days": 30, "StorageClass": "STANDARD_IA"}, |
| 52 | {"Days": 90, "StorageClass": "GLACIER"} |
| 53 | ], |
| 54 | "Expiration": {"Days": 365} |
| 55 | } |
| 56 | ] |
| 57 | } |
| 58 | ``` |
| 59 | |
| 60 | ```bash |
| 61 | # 应用策略 |
| 62 | aws s3api put-bucket-lifecycle-configuration \ |
| 63 | --bucket my-bucket \ |
| 64 | --lifecycle-configuration file://lifecycle.json |
| 65 | ``` |
| 66 | |
| 67 | ### 跨区域复制 |
| 68 | ```bash |
| 69 | # 启用版本控制 |
| 70 | aws s3api put-bucket-versioning \ |
| 71 | --bucket source-bucket \ |
| 72 | --versioning-configuration Status=Enabled |
| 73 | |
| 74 | # 配置复制规则 |
| 75 | aws s3api put-bucket-replication \ |
| 76 | --bucket source-bucket \ |
| 77 | --replication-configuration file://replication.json |
| 78 | ``` |
| 79 | |
| 80 | ## 阿里云 OSS 备份 |
| 81 | |
| 82 | ### 基础操作 |
| 83 | ```bash |
| 84 | # 上传 |
| 85 | ossutil cp backup.tar.gz oss://my-bucket/backups/ |
| 86 | ossutil cp -r /backup oss://my-bucket/backups/ |
| 87 | |
| 88 | # 下载 |
| 89 | ossutil cp oss://my-bucket/backups/backup.tar.gz ./ |
| 90 | |
| 91 | # 同步 |
| 92 | ossutil sync /backup oss://my-bucket/backups/ |
| 93 | |
| 94 | # 列出 |
| 95 | ossutil ls oss://my-bucket/backups/ |
| 96 | ``` |
| 97 | |
| 98 | ### 存储类型 |
| 99 | ```bash |
| 100 | # 低频访问 |
| 101 | ossutil cp backup.tar.gz oss://my-bucket/ --meta x-oss-storage-class:IA |
| 102 | |
| 103 | # 归档 |
| 104 | ossutil cp backup.tar.gz oss://my-bucket/ --meta x-oss-storage-class:Archive |
| 105 | ``` |
| 106 | |
| 107 | ## Azure Blob 备份 |
| 108 | |
| 109 | ### 基础操作 |
| 110 | ```bash |
| 111 | # 上传 |
| 112 | az storage blob upload \ |
| 113 | --account-name myaccount \ |
| 114 | --container-name backups \ |
| 115 | --name backup.tar.gz \ |
| 116 | --file backup.tar.gz |
| 117 | |
| 118 | # 下载 |
| 119 | az storage blob download \ |
| 120 | --account-name myaccount \ |
| 121 | --container-name backups \ |
| 122 | --name backup.tar.gz \ |
| 123 | --file backup.tar.gz |
| 124 | |
| 125 | # 同步 |
| 126 | azcopy sync /backup "https://myaccount.blob.core.windows.net/backups" |
| 127 | ``` |
| 128 | |
| 129 | ## rclone 通用工具 |
| 130 | |
| 131 | ### 配置 |
| 132 | ```bash |
| 133 | # 交互式配置 |
| 134 | rclone config |
| 135 | |
| 136 | # 配置文件 ~/.config/rclone/rclone.conf |
| 137 | [s3] |
| 138 | type = s3 |
| 139 | provider = AWS |
| 140 | access_key_id = xxx |
| 141 | secret_access_key = xxx |
| 142 | region = us-east-1 |
| 143 | |
| 144 | [oss] |
| 145 | type = s3 |
| 146 | provider = Alibaba |
| 147 | access_key_id = xxx |
| 148 | secret_access_key = xxx |
| 149 | endpoint = oss-cn-hangzhou.aliyuncs.com |
| 150 | ``` |
| 151 | |
| 152 | ### 操作 |
| 153 | ```bash |
| 154 | # 同步 |
| 155 | rclone sync /backup s3:my-bucket/backups |
| 156 | |
| 157 | # 复制 |
| 158 | rclone copy /backup s3:my-bucket/backups |
| 159 | |
| 160 | # 加密备份 |
| 161 | rclone sync /backup crypt:backups |
| 162 | ``` |
| 163 | |
| 164 | ## 常见场景 |
| 165 | |
| 166 | ### 场景 1:自动备份脚本 |
| 167 | ```bash |
| 168 | #!/bin/bash |
| 169 | DATE=$(date +%Y%m%d) |
| 170 | BACKUP_DIR="/backup" |
| 171 | S3_BUCKET="s3://my-bucket/backups" |
| 172 | |
| 173 | # 创建备份 |
| 174 | tar -czvf ${BACKUP_DIR}/backup_${DATE}.tar.gz /data |
| 175 | |
| 176 | # 上传到 S3 |
| 177 | aws s3 cp ${BACKUP_DIR}/backup_${DATE}.tar.gz ${S3_BUCKET}/ |
| 178 | |
| 179 | # 清理本地 |
| 180 | find ${BACKUP_DIR} -name "backup_*.tar.gz" -mtime +7 -delete |
| 181 | |
| 182 | # 验证 |
| 183 | aws s3 ls ${S3_BUCKET}/backup_${DATE}.tar.gz |
| 184 | ``` |
| 185 | |
| 186 | ### 场景 2:数据库云备份 |
| 187 | ```bash |
| 188 | #!/bin/bash |
| 189 | # MySQL 备份到 S3 |
| 190 | mysqldump -u root -p database | gzip | \ |
| 191 | aws s3 cp - s3://my-bucket/mysql/backup_$(date +%Y%m%d).sql.gz |
| 192 | |
| 193 | # PostgreSQL 备份到 S3 |
| 194 | pg_dump database | gzip | \ |
| 195 | aws s3 cp - s3://my-bucket/postgres/backup_$(date +%Y%m%d).sql.gz |
| 196 | ``` |
| 197 | |
| 198 | ### 场景 3:增量同步 |
| 199 | ```bash |
| 200 | #!/bin/bash |
| 201 | # 使用 aws s3 sync 增量同步 |
| 202 | aws s3 sync /data s3://my-bucket/data/ \ |
| 203 | --exclude "*.tmp" \ |
| 204 | --delete |
| 205 | |
| 206 | # 使用 rclone |
| 207 | rclone sync /data remote:bucket/data --progress |
| 208 | ``` |
| 209 | |
| 210 | ### 场景 4:灾备复制 |
| 211 | ```bash |
| 212 | # 跨区域复制配置 |
| 213 | { |
| 214 | "Role": "arn:aws:iam::account:role/replication-role", |
| 215 | "Rules": [{ |
| 216 | "Status": "Enabled", |
| 217 | "Priority": 1, |
| 218 | "Filter": {}, |
| 219 | "Destination": { |
| 220 | "Bucket": "arn:aws:s3:::dest-bucket", |
| 221 | "StorageClass": "STANDARD_IA" |
| 222 | } |
| 223 | }] |
| 224 | } |
| 225 | ``` |
| 226 | |
| 227 | ## 成本优化 |
| 228 | |
| 229 | | 存储类型 | 适用场景 | 成本 | |
| 230 | |----------|----------|------| |
| 231 | | Standard | 频繁访问 | 高 | |
| 232 | | IA | 月访问 | 中 | |
| 233 | | Glacier | 年访问 | 低 | |
| 234 | | Deep Archive | 归档 | 最低 | |
| 235 | |
| 236 | ## 故障排查 |
| 237 | |
| 238 | | 问题 | 排查方法 | |
| 239 | |------|----------| |
| 240 | | 上传失败 | 检查权限、网络、大小限制 | |
| 241 | | 同步慢 | 使用多线程、分片上传 | |
| 242 | | 成本高 | 检查存储类型、生命周期 | |
| 243 | | 恢复慢 | Glacier 需要先解冻 | |
| 244 | |
| 245 | ```bash |
| 246 | # 检查 S3 权限 |
| 247 | aws s3api get-bucket-policy --bucket my-bucket |
| 248 | |
| 249 | # 检查上传状态 |
| 250 | aws s3api list-multipart-uploads --bucket my-bucket |
| 251 | |
| 252 | # Glacier 解冻 |
| 253 | aws s3api restore-object \ |
| 254 | --bucket my-bucket \ |
| 255 | --key backups/archive.tar.gz \ |
| 256 | --restore-request '{"Days":7,"GlacierJobParameters":{"Tier":"Standard"}}' |
| 257 | ``` |