Python实现VPS云服务器快照备份恢复脚本
文章分类:技术文档 /
创建时间:2025-08-19
VPS云服务器运维中,定期做快照备份是守护数据安全、保障系统可恢复的关键动作。手动操作不仅效率低,还容易遗漏,用Python编写自动化脚本则能让备份和恢复流程更可控、更省心。本文结合实际运维场景,分享备份与恢复脚本的实现思路及具体示例。
脚本核心逻辑:从备份到恢复的闭环
备份脚本的核心是建立与VPS云服务器的连接,自动生成带时间戳的快照名称,调用服务器命令创建快照,并将关键信息记录到日志文件。恢复脚本则需读取日志中的历史快照记录,提供可视化选择界面,再调用对应命令完成恢复操作。两者配合形成“备份-记录-恢复”的完整数据保护闭环。
备份脚本示例:自动记录+错误提示
下面分享一个基础版Python备份脚本示例,基于Paramiko库通过SSH连接VPS云服务器操作:
import paramiko
import datetime
服务器连接信息(需替换为实际值)
SERVER_IP = '192.168.1.100'
SERVER_PORT = 22
USERNAME = 'admin'
PASSWORD = 'your_secure_password'
def create_snapshot():
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
# 建立SSH连接
ssh.connect(SERVER_IP, port=SERVER_PORT, username=USERNAME, password=PASSWORD)
# 生成唯一快照名(时间戳防重复)
timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
snapshot_name = f"auto_snap_{timestamp}"
# 执行创建快照命令(需替换为实际命令)
create_cmd = f"sudo vps-admin snapshot-create --name {snapshot_name}"
stdin, stdout, stderr = ssh.exec_command(create_cmd)
# 处理执行结果
result = stdout.read().decode().strip()
error = stderr.read().decode().strip()
if error:
raise Exception(f"命令执行错误:{error}")
# 记录快照日志(名称+创建时间+返回结果)
with open("snapshot_log.txt", "a", encoding="utf-8") as log_file:
log_file.write(f"{snapshot_name},{timestamp},{result}\n")
print(f"成功创建快照:{snapshot_name}")
except Exception as e:
print(f"备份过程出错:{str(e)}")
finally:
ssh.close()
if __name__ == "__main__":
create_snapshot()
脚本亮点:用时间戳生成唯一快照名避免重复,捕获命令执行错误并提示,日志记录包含名称、时间和接口返回结果,方便后续追溯。
恢复脚本示例:可视化选择+安全校验
恢复时需从日志中读取历史快照,提供交互式选择界面,确保操作可追溯:
import paramiko
服务器连接信息(与备份脚本保持一致)
SERVER_IP = '192.168.1.100'
SERVER_PORT = 22
USERNAME = 'admin'
PASSWORD = 'your_secure_password'
def restore_snapshot():
try:
# 读取快照日志
with open("snapshot_log.txt", "r", encoding="utf-8") as log_file:
snapshots = [line.strip().split(",") for line in log_file.readlines()]
if not snapshots:
print("无可用快照记录,请先执行备份操作")
return
# 显示可选快照
print("可用快照列表(名称 | 创建时间):")
for idx, snap in enumerate(snapshots):
print(f"{idx+1}. {snap[0]} | {snap[1]}")
# 交互式选择
choice = input("请输入要恢复的快照编号(1~N):")
selected = int(choice) - 1
target_snap = snapshots[selected][0]
# 连接服务器执行恢复
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(SERVER_IP, port=SERVER_PORT, username=USERNAME, password=PASSWORD)
restore_cmd = f"sudo vps-admin snapshot-restore --name {target_snap}"
stdin, stdout, stderr = ssh.exec_command(restore_cmd)
# 校验恢复结果
error = stderr.read().decode().strip()
if error:
print(f"恢复失败:{error}")
else:
print(f"成功恢复快照:{target_snap}")
except (ValueError, IndexError):
print("输入的编号无效,请重新运行脚本")
except Exception as e:
print(f"恢复过程出错:{str(e)}")
finally:
if 'ssh' in locals():
ssh.close()
if __name__ == "__main__":
restore_snapshot()
脚本优化点:提供可视化快照列表,增加输入校验避免越界错误,明确区分正常输出和错误信息。
通过这两个Python脚本,VPS云服务器的快照备份与恢复能轻松实现自动化。实际使用时注意替换脚本里的服务器IP、账号密码和具体命令(不同服务商的快照操作命令可能不同)。建议每周运行备份脚本,并每月检查一次snapshot_log.txt文件,确保日志完整。遇到脚本报错时,可优先检查SSH连接是否正常、命令权限是否足够,让数据安全防护更可靠。
上一篇: 云服务器容器跨节点网络通信5大技术问答