下面是 Python 实现定时自动备份文件到其他主机的攻略,包括两个完整的示例代码。
步骤一:安装必要的库
我们需要使用 paramiko 库来建立 SSH 连接,使用 schedule 库来实现定时任务。首先需要安装它们,可以使用 pip 命令来安装:
pip install paramiko
pip install schedule
步骤二:编写备份脚本
我们可以使用 Python 的 shutil 模块来实现备份文件的功能。以下是一个简单的备份函数:
import shutil
def backup(source_file, dest_file):
shutil.copy2(source_file, dest_file)
该函数将 source_file 文件备份到 dest_file 中,使用了 shutil 中的 copy2 函数以保留源文件的元数据(如修改时间、修改者等)。
步骤三:编写 SSH 连接代码
使用 paramiko 库来建立 SSH 连接,读取远程主机的配置信息,然后上传备份文件。以下是一个示例代码:
import paramiko
hostname = 'example.com'
port = 22
username = 'your-username'
password = 'your-password'
def upload(file_path, remote_path):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, port, username, password)
sftp = ssh.open_sftp()
sftp.put(file_path, remote_path)
sftp.close()
ssh.close()
该函数使用 SSHClient 建立 SSH 连接,使用这个连接来打开一个 SFTP 通道,然后上传文件。这个函数需要文件路径和远程路径作为参数。
步骤四:实现定时任务
使用 schedule 库来实现定时任务,不同的时间可以执行不同的操作。以下是一个示例代码:
import schedule
import time
def job():
backup('/path/to/source/file', '/path/to/dest/file')
upload('/path/to/dest/file', '/path/to/remote/dest/file')
schedule.every(1).hours.do(job)
while True:
schedule.run_pending()
time.sleep(1)
这个脚本会每隔一个小时执行一次备份,并将备份文件上传到远程主机。
示例一:备份本地文件并上传到远程主机
假设我们要备份本地的 /home/user/example.txt 文件,并将备份文件上传到远程主机的 /home/user/backup/example.txt 中。可以使用以下代码:
import shutil
import paramiko
def backup(source_file, dest_file):
shutil.copy2(source_file, dest_file)
def upload(file_path, remote_path):
hostname = 'example.com'
port = 22
username = 'your-username'
password = 'your-password'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, port, username, password)
sftp = ssh.open_sftp()
sftp.put(file_path, remote_path)
sftp.close()
ssh.close()
def job():
backup('/home/user/example.txt', '/home/user/backup/example.txt')
upload('/home/user/backup/example.txt', '/home/user/remote-backup/example.txt')
schedule.every(1).hours.do(job)
while True:
schedule.run_pending()
time.sleep(1)
示例二:备份 MySQL 数据库并上传到远程主机
假设我们要备份一个名为 example 的 MySQL 数据库,并将备份文件上传到远程主机。可以使用以下代码:
import shutil
import paramiko
import subprocess
def backup(db_name, dest_file):
cmd = 'mysqldump --single-transaction {} > {}'.format(db_name, dest_file)
subprocess.check_call(cmd, shell=True)
def upload(file_path, remote_path):
hostname = 'example.com'
port = 22
username = 'your-username'
password = 'your-password'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, port, username, password)
sftp = ssh.open_sftp()
sftp.put(file_path, remote_path)
sftp.close()
ssh.close()
def job():
backup('example', '/home/user/backup/example.sql')
upload('/home/user/backup/example.sql', '/home/user/remote-backup/example.sql')
schedule.every(1).hours.do(job)
while True:
schedule.run_pending()
time.sleep(1)
这个脚本会定时备份 MySQL 数据库,并将备份文件上传到远程主机。注意要提前在远程主机上安装好 MySQL 服务器。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现定时自动备份文件到其他主机的实例代码 - Python技术站