因工作原因本人日常会跟大量交换机打些交道,而交换机管理起来如果没有什么集成的网管平台也会挺复杂的。我个人是出于好奇,想深入学习下网管平台那边关于交换机的自动化运维(备份)的一些原理。我用的是python+Tftp64+数据库 这样一个环境。
前期准备:python、Tftp64、HeidiSQL
```
# 导入模块
import pymysql
import paramiko
import time
import os
import shutil
############################################################
###这一块主要是用来生成备份的文件名及文件夹名等
############################################################
now = time.strftime('%Y-%m-%d_%H-%M-%S', time.localtime(time.time()))
# 系统当前时间年份
year = time.strftime('%Y', time.localtime(time.time()))
# 月份
month = time.strftime('%m', time.localtime(time.time()))
# 日期
day = time.strftime('%d', time.localtime(time.time()))
# 切换到备份文件路径
os.chdir("D:/Tftpd64/backup")
#年路径
fileYear = os.getcwd() + '/' + year
#月路径
fileMonth = fileYear + '/' + month
#日路径
fileDay = fileMonth + '/' + day
#判断路径是否存在,不存在创建文件夹
if not os.path.exists(fileYear):
os.mkdir(fileYear)
os.mkdir(fileMonth)
os.mkdir(fileDay)
else:
if not os.path.exists(fileMonth):
os.mkdir(fileMonth)
os.mkdir(fileDay)
else:
if not os.path.exists(fileDay):
os.mkdir(fileDay)
############################################################
###这里是链接到数据库的操作
############################################################
# 1.连接到mysql数据库
db = pymysql.connect(host='数据库地址,在本机就localhost',
user='数据库账号',
password='数据库密码',
db='数据库db',
charset='utf8')
# localhost连接本地数据库 user 用户名 password 密码 db数据库名称 charset 数据库编码格式
cursor = db.cursor()
#cursor.execute("show tables;")
#swb = cursor.fetchall() # 返回执行SQL代码后的结果集,默认为元组
#打印
sql = "select * from huawei "
cursor.execute(sql)
f = cursor.execute(sql)
num = 0
#开始循环
####################################################################
###这里是记录备份的一个日志功能,就显示下正在备份哪台交换机,有没有问题等等
####################################################################
print('开始循环')
log = open('backup.log', 'a')
log.write(now+'——备份时间-----------------------------------\n')
log.close()
while True:
if num < f:
row = cursor.fetchone()
print('此时的row:')
print(row)
#上传文件
# 创建SSH对象
ssh = paramiko.SSHClient()
#print('创建SSH对象')
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#获取地址
IP = row[0]
my = '存备份文件的服务器IP地址'
User = row[1]
Pwd = row[2]
# 连接服务器
#print('连接服务器')
ssh.connect(IP, 22, User, Pwd, look_for_keys=False)
# 执行命令
#print('执行命令')
file = IP + '_' + now
stdin, stdout, stderr = ssh.exec_command(
('tftp ' + my + ' put config.cfg %s.cfg') % file)
# 获取命令结果
res, err = stdout.read(), stderr.read()
result = res if res else err
#print(result.decode())
time.sleep(30)
# 关闭连接
ssh.close()
#print('远程结束')
print(row)
#如果文件上传成功
if os.path.exists('D:\\Tftpd64\\backup\\' + file+ '.cfg'):
print('上传成功')
#移动文件
mv = shutil.move
mv('D:\\Tftpd64\\backup\\' + file + '.cfg', fileDay)
#print(IP+'备份完成')
#写入日志
log = open('backup.log', 'a')
log.write(file+'____备份完成'+ '\n')
log.close()
time.sleep(5)
num +=1
else:
print(str(row) + '上传失败')
time.sleep(5)
num +=1
#否则退出循环
else:
print('--------------华为备份循环结束,退出循环------------------')
log = open('backup.log', 'a')
log.write('华为备份循环结束,退出循环\n')
log.close()
break
```