Linux 使用scp命令定时将文件备份到另一台服务器

主要思路就是使用scp命令 + linux定时执行任务。
目标:2台服务器,A为主服务器,B为备份服务器,需要每天中午12点将A上的文件备份到B上。
1.首先在A上安装except
一路yes下去即可

yum install expect

2.编写脚本
这里给个示例
要传的文件在A服务器的/home/20181025/目录下

filepath=/home/20181025/
echo "`date +%Y%m%d` start upload......"
echo "`date +%Y%m%d` start upload......" > /home/import.log

sleep 5s

#B服务器所用账号的密码
password='**********'

echo "start copy datafile from remote path..."
echo "start copy datafile from remote path..." >> /home/import.log

/usr/bin/expect <<EOF
#设置超时时间
set timeout 10
#-r 为 递归复制整个目录,即现在会将/home/20181025/整个文件夹拷贝过去
#-p 为保留源文件权限
#顺便提下 -P 22 可以修改传输端口,不写默认为22
#root为B上的用户账号
#/home/ 为传输到的目录,即A上的/home/20181025/整个文件夹会被放到B上的/home/文件夹下
spawn scp -r -p $filepath root@xx.xx.xx.xx:/home/
expect "*assword:"
send "$password\r"
send "exit\r"
expect eof
EOF

if [ $? = 0 ]; then
        echo "datafile copy successful!"
        echo "datafile copy successful!" >> /home/import.l
在Java中实现数据库自动备份并将其传输到另一台服务器,可以按照以下步骤进行: 1. **数据库备份**: - 使用数据库提供的命令行工具进行备份。例如,MySQL可以使用`mysqldump`工具。 2. **文件传输**: - 使用Java的`java.nio`包或第三方库如`Apache Commons Net`来实现FTP或SCP文件传输。 3. **定时任务**: - 使用操作系统的定时任务(如Linux的`cron`)或Java的`ScheduledExecutorService`来定时执行备份和传输任务。 以下是一个简单的示例代码,展示了如何使用Java实现MySQL数据库的自动备份并通过FTP传输到另一台服务器: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class DatabaseBackup { public static void main(String[] args) { ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); scheduler.scheduleAtFixedRate(new BackupTask(), 0, 24, TimeUnit.HOURS); } static class BackupTask implements Runnable { @Override public void run() { try { // 数据库备份 ProcessBuilder builder = new ProcessBuilder( "mysqldump", "-u", "username", "-p", "password", "databaseName"); Process process = builder.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); FileOutputStream fos = new FileOutputStream("backup.sql"); String line; while ((line = reader.readLine()) != null) { fos.write(line.getBytes()); } fos.close(); // 文件传输 FTPClient ftpClient = new FTPClient(); ftpClient.connect("ftp.server.com"); ftpClient.login("ftpUser", "ftpPassword"); ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); File localFile = new File("backup.sql"); FileInputStream inputStream = new FileInputStream(localFile); ftpClient.storeFile("backup.sql", inputStream); inputStream.close(); ftpClient.logout(); ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); } } } } ``` ### 说明: 1. **数据库备份**: - 使用`ProcessBuilder`调用`mysqldump`命令进行数据库备份。 - 将备份文件写入到本地文件系统。 2. **文件传输**: - 使用`FTPClient`连接到FTP服务器并登录。 - 将备份文件上传到服务器。 3. **定时任务**: - 使用`ScheduledExecutorService`每天执行一次备份和传输任务。
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

团子ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值