scp从远程同时copy多个文件到本地.md

本文介绍了如何使用SCP命令从本地向远程服务器批量传输多个文件的方法,并提供了从远程服务器向本地批量下载文件的具体操作步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scp如果从本地copy多个文件到远程目录很直观:

 scp /localfold1/file1 /localfold2/file2  remoteuser@remotehost:/remotefold/   ,

但要重远程copy多个文件呢? 就是用引号:

scp remoteuser@remotehost:"/remotefold1/file1 /remotefold2/file2" /localfold/ 

这样就可以把远程中的两个文件 同时copy过来

转载于:https://my.oschina.net/laofa1/blog/810679

<think>嗯,用户想了解如何用Shell脚本定时备份多个MySQL数据库并传输到另一台服务器。首先,我需要理清整个流程的步骤,确保每个环节都覆盖到。 首先,备份MySQL数据库通常使用mysqldump命令,对吧?那需要确认用户是否有权限访问所有要备份的数据库,并且知道数据库的登录凭证。可能需要使用用户名和密码,或者使用配置文件来避免在脚本中硬编码密码,这样更安全。 接下来是备份多个数据库的问题。用户可能有多个数据库需要备份,所以需要遍历这些数据库名称。可以用一个数组或者从文件中读取数据库列表。然后循环处理每个数据库,生成对应的备份文件文件名最好包含日期时间,方便管理和恢复。 然后,压缩备份文件可以节省空间,特别是当数据库较大时。使用tar或者gzip来压缩应该没问题,可能需要考虑压缩速度和效率,但通常gzip足够用了。 传输到另一台服务器,通常用scp或者rsync。scp比较简单,但rsync可能更适合增量备份,不过用户的需求是定时全量备份,所以scp可能更直接。需要确保SSH密钥已经配置好,避免手动输入密码。这里可能需要提醒用户设置免密登录,比如使用ssh-keygen和ssh-copy-id。 定时任务的话,crontab是常用的工具。需要编辑crontab条目,设置每天或每小时执行脚本。要注意脚本的执行权限,以及日志记录,方便排查问题。 另外,可能还需要考虑备份文件的保留策略,比如只保留最近7天的备份,避免磁盘空间被占满。这可以通过在脚本中添加删除旧文件的命令来实现。 安全性方面,提醒用户不要在脚本中明文存储密码,而是使用MySQL的配置文件,并设置合适的权限。比如,将密码存储在.my.cnf文件中,并设置该文件仅对所有者可读。 可能用户没有提到的点,比如备份的完整性验证,传输后的文件校验,或者是否需要进行加密传输。不过根据问题描述,可能用户更关注基本流程,这些高级步骤可以作为扩展建议。 最后,整个脚本的结构大概是这样的:获取数据库列表,逐个备份,压缩,传输,清理旧文件。然后设置crontab任务。 需要测试脚本的每个部分是否正常执行,比如mysqldump是否成功,压缩是否完成,scp是否传输无误。添加错误处理,比如如果某个数据库备份失败,是否继续处理下一个,或者记录错误信息。 可能还需要记录日志,方便后续查看备份是否成功,或者在出现问题时排查原因。可以在脚本中通过重定向输出到日志文件,或者使用logger命令。 总结步骤: 1. 准备数据库列表和MySQL凭证。 2. 使用mysqldump备份每个数据库。 3. 压缩备份文件。 4. 使用scp传输到远程服务器。 5. 删除本地远程的旧备份文件。 6. 设置crontab定时任务。 7. 考虑安全性和错误处理。 现在需要把这些步骤转化成具体的Shell脚本,并给出详细的说明,确保用户能够理解每一步的作用,并根据自己的环境进行配置。</think>以下是一个使用 Shell 脚本定时备份多个 MySQL 数据库并传输到远程服务器的完整方案,包含详细步骤和注意事项: --- ### **一、脚本实现步骤** #### 1. 创建备份脚本 `mysql_backup.sh` ```bash #!/bin/bash # ---------- 配置参数 ---------- # MySQL 连接配置(建议将密码存储在 ~/.my.cnf 避免明文) MYSQL_USER="root" MYSQL_PASS="your_password" # 要备份的数据库列表 DATABASES=("db1" "db2" "db3") # 备份存储路径 LOCAL_BACKUP_DIR="/opt/mysql_backups" # 远程服务器配置 REMOTE_USER="remote_user" REMOTE_IP="192.168.1.100" REMOTE_DIR="/backup/mysql" # 保留最近 7 天的备份 DAYS_TO_KEEP=7 # --------- 开始备份流程 --------- # 创建本地备份目录 mkdir -p $LOCAL_BACKUP_DIR # 生成日期标记 (e.g. 20231001-1530) TIMESTAMP=$(date +%Y%m%d-%H%M%S) # 循环备份每个数据库 for DB_NAME in "${DATABASES[@]}"; do BACKUP_FILE="$LOCAL_BACKUP_DIR/${DB_NAME}_${TIMESTAMP}.sql" # 使用 mysqldump 备份数据库 mysqldump --user=$MYSQL_USER --password=$MYSQL_PASS --single-transaction $DB_NAME > $BACKUP_FILE # 检查备份是否成功 if [ $? -ne 0 ]; then echo "[ERROR] 备份失败: $DB_NAME @ $(date)" >> $LOCAL_BACKUP_DIR/backup.log exit 1 fi done # -- tar -zcvf $LOCAL_BACKUP_DIR/backup_$TIMESTAMP.tar.gz $LOCAL_BACKUP_DIR/*.sql rm -f $LOCAL_BACKUP_DIR/*.sql # 删除临时 SQL 文件 # --------- 传输到远程服务器 --------- scp $LOCAL_BACKUP_DIR/backup_$TIMESTAMP.tar.gz $REMOTE_USER@$REMOTE_IP:$REMOTE_DIR # ----- 清理旧备份(本地远程)----- # 本地清理 find $LOCAL_BACKUP_DIR -type f -name "*.tar.gz" -mtime +$DAYS_TO_KEEP -exec rm {} \; # 远程清理(需提前配置 SSH 免密登录) ssh $REMOTE_USER@$REMOTE_IP "find $REMOTE_DIR -name '*.tar.gz' -mtime +$DAYS_TO_KEEP -exec rm {} \;" # 记录日志 echo "[SUCCESS] 备份完成 @ $(date)" >> $LOCAL_BACKUP_DIR/backup.log ``` --- ### **二、关键配置说明** 1. **MySQL 安全认证** **推荐** 将密码存储在 `~/.my.cnf` 文件(权限设为 600): ```ini [client] user = root password = your_password ``` 脚本中可简化为直接使用 `mysqldump $DB_NAME`。 2. **SSH 免密登录配置** 执行以下命令生成密钥并上传到远程服务器: ```bash ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub $REMOTE_USER@$REMOTE_IP ``` 3. **备份保留策略** 通过 `find -mtime +7` 删除 7 天前的备份,可根据需求调整 `DAYS_TO_KEEP`。 --- ### **三、设置定时任务** 1. **赋予脚本执行权限** ```bash chmod +x /path/to/mysql_backup.sh ``` 2. **配置 Crontab 定时任务** ```bash crontab -e ``` 添加以下内容(每天凌晨 2 点执行): ```bash 0 2 * * * /path/to/mysql_backup.sh >/dev/null 2>&1 ``` --- ### **四、增强建议** 1. **备份完整性检查** 传输后添加校验命令(如 `md5sum`)比对文件哈希值。 2. **异常通知机制** 在脚本中添加邮件/Slack 通知(例如使用 `mail` 命令或 `curl` 调用 Webhook)。 3. **增量备份优化** 如需节省带宽,可将 `scp` 替换为 `rsync` 进行差异同步。 --- ### **五、常见问题** 1. **权限不足** 确保 MySQL 用户有 `SELECT` 和 `LOCK TABLES` 权限,远程目录可写。 2. **磁盘空间不足** 监控本地远程服务器的存储空间。 3. **网络中断** 使用 `scp -C` 启用压缩传输,或在脚本中添加重试逻辑。 --- 通过以上步骤,即可实现自动化、安全的 MySQL 数据库定时备份与跨服务器同步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值