将MySQL数据库定时备份到另一台服务器

本文介绍了如何在Docker环境下使用mysqldump导出MySQL数据库,并通过scp命令无密传输到另一台服务器。同时,提供了将此过程自动化到shell脚本及设置crontab定时任务的方法,确保数据备份的定期执行。

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

Step 1 导出数据

当MySQL运行在Docker中时

docker exec -it mysql mysqldump -uroot -p密码 数据库名 > /home/数据库名.sql

没有运行在Docker中时,只需要执行后半部分常规的mysqldump即可。

Step 2 将数据scp到另一台服务器

这里用S指代source服务器,D指代destination服务器。

首先,获取S的公钥

ssh-keygen -t rsa

然后将S的公钥复制到D的/root/.ssh/authorized_keys文件中,之后就可以免密进行scp

scp /home/数据库名.sql root@D的IP地址:/home/数据库名.sql

Step 3 将以上两步编写为sh脚本

#!/bin/bash
# Name:XXX
# 备份XXX数据库
docker exec -it mysql mysqldump -uroot -p密码 数据库名 > /home/数据库名.sql
scp /home/数据库名.sql root@D的IP地址:/home/数据库名.sql

Step 4 添加crontab定时任务

注意crontab语法,参考这篇文章

查看日志是否有报错,可能会报属组属主,rwx权限等错误。一般将属组属主都改为root,rwx改为644即可。可以将cron表达式先改成每分钟,检查效果,之后再改回实际时间。

在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`每天执行一次备份和传输任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

肯特技术宅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值