python2实现数据库表定时全量同步sftp
需求
周边系统需要通过sftp接口,将本系统数据库的8张表吐给sftp,文件名为txt,提供的字段用#号分隔(逗号存在分隔不开的情况),8张表采用全量每天同步。
环境
操作系统centos7.9
自带的python2.7.5,
python2存在缺少MySqldb、paramiko模块情况,参考上两篇博客进行模块安装
脚本编写
本地环境编写脚本auto_table_up_sftp_v2.py代码如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MySQLdb
import paramiko
from datetime import datetime
import os
# MySQL数据库连接信息
db_host = '192.168.2.206'
db_user = 'root'
db_password = 'ze1bw0,7E[9V'
db_name = 'mysql'
table_list = ['user','db','event',]
#生成的文件列表信息
file_list = []
#创建生成文件的目录
directory = './AuditToPass'
# 检查目录是否存在,如果不存在则创建
if not os.path.exists(directory):
os.makedirs(directory)
# SFTP连接信息
sftp_host = '192.168.2.139'
sftp_user = 'ynsftp'
sftp_password = '1'
sftp_directory = './'
# 获取当前日期
current_date = datetime.now().strftime('%Y-%m-%d')
# 连接MySQL数据库
conn = MySQLdb.connect(host=db_host, user=db_user, passwd=db_password, db=db_name)
cursor = conn.cursor()
for table_name in table_list:
# 从MySQL数据库中读取数据
query = "SELECT * FROM {}".format(table_name)
cursor.execute(query)
rows = cursor.fetchall()
# 将数据写入到txt文件
txt_filename = "{}{}.txt".format(table_name,current_date)
with open('./AuditToPass/' + txt_filename, 'w') as file:
for row in rows:
file.write('#'.join(str(col) for col in row) + '\n')
print('生成文件{}成功'.format(txt_filename))
file_list.append(txt_filename)
print('{}添加到待上传文件列表成功'.format(txt_filename))
# 关闭MySQL连接
cursor.close()
conn.close()
for file_name in file_list:
# 上传txt文件到SFTP目录
transport = paramiko.Transport((sftp_host, 22))
transport.connect(username=sftp_user, password=sftp_password)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put('./AuditToPass/' + file_name, sftp_directory + file_name)
print('上传文件{}成功'.format(file_name))
# 关闭SFTP连接
sftp.close()
transport.close()
#清理本地文件
print('开始清理本地的文件列表{}'.format(file_list))
for file_name1 in file_list:
os.remove('./AuditToPass/' + file_name1)
print('清理本地文件{}成功'.format(file_name1))
创建定时任务
[root@localhost ~]# crontab -l
10 16 * * * python /root/auto_table_up_sftp/auto_table_up_sftp_v2.py >> /root/auto_table_up_sftp/auto_table_up_sftp.log
实现结果如下