pythontcp协议传递数据到mysql,Python实现简单的文件传输与MySQL备份的脚本分享

用python实现简单Server/Client文件传输:

服务器端:

#!/usr/bin/python

import SocketServer, time

class MyServer(SocketServer.BaseRequestHandler):

userInfo = {

'leonis' : 'leonis',

'hudeyong' : 'hudeyong',

'mudan' : 'mudan' }

def handle(self):

print 'Connected from', self.client_address

while True:

receivedData = self.request.recv(8192)

if not receivedData:

continue

elif receivedData == 'Hi, server':

self.request.sendall('hi, client')

elif receivedData.startswith('name'):

self.clientName = receivedData.split(':')[-1]

if MyServer.userInfo.has_key(self.clientName):

self.request.sendall('valid')

else:

self.request.sendall('invalid')

elif receivedData.startswith('pwd'):

self.clientPwd = receivedData.split(':')[-1]

if self.clientPwd == MyServer.userInfo[self.clientName]:

self.request.sendall('valid')

time.sleep(5)

sfile = open('down.sh', 'rb')

while True:

data = sfile.read(1024)

if not data:

break

while len(data) > 0:

intSent = self.request.send(data)

data = data[intSent:]

time.sleep(3)

self.request.sendall('EOF')

else:

self.request.sendall('invalid')

elif receivedData == 'bye':

break

self.request.close()

print 'Disconnected from', self.client_address

print

if __name__ == '__main__':

print 'Server is started\nwaiting for connection…\n'

srv = SocketServer.ThreadingTCPServer(('ip', 50000), MyServer)

srv.serve_forever()

客户端:

import socket, time

class MyClient:

def __init__(self):

print 'Prepare for connecting…'

def connect(self):

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect(('ip', 50000))

sock.sendall('Hi, server')

self.response = sock.recv(8192)

print 'Server:', self.response

self.s = raw_input("Server: Do you want get the 'thinking in python' file?(y/n):")

if self.s == 'y':

while True:

self.name = raw_input('Server: input our name:')

sock.sendall('name:' + self.name.strip())

self.response = sock.recv(8192)

if self.response == 'valid':

break

else:

print 'Server: Invalid username'

while True:

self.pwd = raw_input('Server: input our password:')

sock.sendall('pwd:' + self.pwd.strip())

self.response = sock.recv(8192)

if self.response == 'valid':

print 'please wait…'

f = open('down.sh', 'wb')

while True:

data = sock.recv(1024)

if data == 'EOF':

break

f.write(data)

f.flush()

f.close()

print 'download finished'

break

else:

print 'Server: Invalid password'

sock.sendall('bye')

sock.close()

print 'Disconnected'

if __name__ == '__main__':

client = MyClient()

client.connect()

由于担心服务器数据安全,所以写了这个脚本,结合上面分享的Server/Client 文件互传,可以备份网站数据到本地,安全又可靠

#!/usr/bin/python

# Filename: webbak.py

import os

import time

import tarfile

os.chdir('/home/web/') #切换目录

source = 'leonis'

bakdir = '/home/web/leonis/'

# mysql dump

dump = 'mysqldump'

dbuser = 'XXXXXXX'

dbpwd = 'XXXXXXXXXXX'

dbname = 'XXXXXXXX'

sqlfile = '/home/web/leonis/leonis.sql'

sql = "%s -u%s -p%s %s > %s" % (dump,dbuser,dbpwd,dbname,sqlfile)

if os.path.exists(sqlfile):

os.remove(sqlfile)

else:

print 'then will dump sql file'

result = os.popen(sql)

if result: #

print ("SQL backup completed!")

else:

print ("SQL backup failed!")

# gzip 压缩 以当日日期命名

filename = bakdir + time.strftime('%Y%m%d')+'.tar.gz'

tar = tarfile.open(filename,"w:gz")

tar.add(source)

tar.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值