模块:MySQLdb  Crypto加密  ConfigParser加载配置

mydb.py

#!/usr/bin/env python
#coding=utf-8
import MySQLdb as mdb
from Crypto.Cipher import AES #算法
key = '0x7jz75nmrjx5k52lcqpybm12b1frbmn'
iv='1234567812345678'
BS = 16
pad = lambda s: s + (BS - len(s) % BS) * '\0' #加密
def encrypt(text):
aes_obj = AES.new(key, AES.MODE_CBC,iv)
buf=aes_obj.encrypt(pad(text)).encode('hex')
return buf
#解密
def decrypt(text):
aes_obj = AES.new(key, AES.MODE_CBC,iv)
buf=aes_obj.decrypt(text.decode('hex'))
return buf
#生成insert语句,从mysql自带的information_schema库中获取字段
def genSchema(host,user,passwd,table,*keys):
dbname = "information_schema"
con = None
sqlSel = "select column_name from columns where table_name='"+table+ "'"
con = mdb.connect(host=host,user=user,passwd=passwd,db=dbname,charset="utf8", unix_socket="/data/mysql/data/mysql.sock");
cur = con.cursor()
cur.execute(sqlSel)
rows = cur.fetchall()
insert =""
update =""
for row in rows:
txtRow = ""
insert = insert+ row[0] +","
if(row[0] == keys[0] or row[0] == keys[1]):
continue
else:
update = update +row[0]+"=values("+row[0]+"),"
fieldsIn = insert.rstrip(",")
fieldsUpdate = update.rstrip(",")
if con:
con.close()
sqlPre = "insert into " + table + " (" + fieldsIn + ") values ("
sqlLast = ") on duplicate key update " + fieldsUpdate
f=open('struc%s.txt'%table,'w')
f.write(sqlPre+"\n")
f.write(sqlLast+"\n")
f.close()
#获取insert语句
def getSchema(table):
f=open('struc%s.txt'%table)
index = 0
sqlInsert = ""
sqlUpdate = ""
while True:
line = f.readline()
if len(line) ==0:break
if(index == 0):
sqlInsert =line.rstrip("\n")
if(index == 1):
sqlUpdate = line.rstrip("\n")
index = index+1
return (sqlInsert, sqlUpdate)

  syncData.py

#!/usr/bin/env python
#coding=utf-8
import os
import sys
import time
import types
import MySQLdb as mdb
import ConfigParser
from mydb import genSchema
from mydb import getSchema
from mydb import encrypt
from mydb import decrypt reload(sys)
sys.setdefaultencoding('utf8') if __name__ == '__main__':
if (len(sys.argv)<2):
print sys.argv[0],' export|import start end'
sys.exit(1)
method=sys.argv[1] start = ""
end = ""
myday = '2018-01-01'
if(len(sys.argv)==4):
start = sys.argv[2] + " 00:00:00"
end = sys.argv[3] + " 23:59:59"
else:
myday= time.strftime('%Y-%m-%d',time.localtime(time.time()-24*3600))
#myday = '2018-12-10'
start = myday+" 00:00:00"
end = myday+" 23:59:59" #加载config.ini
config = ConfigParser.ConfigParser()
config.readfp(open("config.ini","rb")) fromHost = config.get('cloud_blacklist',"host")
fromUser = config.get('cloud_blacklist',"user")
fromPass = decrypt(config.get('cloud_blacklist',"pass")).replace("\x00","")
toHost = config.get('boxing_blacklist',"host")
toUser = config.get('boxing_blacklist',"user")
toPass = decrypt(config.get('boxing_blacklist',"pass")).replace("\x00","") dbname = "blacklist"
con = None
Blacklistbackup = {
'black_record':['id','uuid'],
'temp_black_record':['id']
}
#从阿里云导出
if(method == 'export'):
for key in Blacklistbackup:
try:
Lenth = len(Blacklistbackup[key])
if Lenth == 2:
genSchema(fromHost,fromUser,fromPass,key,Blacklistbackup[key][0],Blacklistbackup[key][1])
elif Lenth == 1:
genSchema(fromHost,fromUser,fromPass,key,Blacklistbackup[key][0],key,Blacklistbackup[key][0])
con = mdb.connect(host=fromHost,user=fromUser,passwd=fromPass,db=dbname,charset="utf8", unix_socket="/data/mysql/data/mysql.sock");
cur = con.cursor()
sqlSel = "SELECT * from %s where update_at between '"%key+start+"' and '"+end+ "'"
print sqlSel
cur.execute(sqlSel)
rows = cur.fetchall()
f=open('data%s.txt'%key,'w')
indexNum = 0
for row in rows:
txtRow = ""
for field in row:
if(type(field) is types.UnicodeType):
field1=field.replace(chr(10), "")
txtRow += field1+"|||"
elif(type(field) is not types.StringType):
txtRow += str(field)+"|||"
else:
txtRow += field+"|||"
line=txtRow.rstrip("|||")
f.write(line+"\n")
indexNum = indexNum+1
f.close()
print "export %s totals="%key+str(indexNum)
except Exception as e:
print e
finally:
if con:con.close() #导入博兴kvm
if(method == 'import'):
for key in Blacklistbackup:
try:
(preSql,lastSql) = getSchema(key)
con = mdb.connect(host=toHost,user=toUser,passwd=toPass,db=dbname,charset="utf8",unix_socket="/data/mysql/data/mysql.sock");
cur = con.cursor()
f=open('data%s.txt'%key)
index = 0
uuid=""
while True:
line=f.readline().rstrip("\n")
if len(line) ==0:break
array = line.split("|||")
values=""
for aa in array:
if(aa.isdigit()):
values += str(aa)+","
elif(aa=='None'):
values += "NULL,"
else:
values += "'"+aa.replace("'","\\\'")+"',"
uuid=array[1]
myvalues=values.rstrip(',')
sqlInsert = preSql + myvalues + lastSql
index=index+1
cur.execute(sqlInsert)
if(index % 100 == 0):
con.commit()
con.commit()
f.close()
print "totals %s import="%key+str(index)
except Exception as e:
print e
print uuid
finally:
if con:
con.close()

  mail.py

#!/usr/bin/env python
#coding=utf-8
from email.mime.text import MIMEText
import smtplib
import os
from mydb import decrypt def mail():
mail_host = 'smtp.intellicredit.cn'
mail_user = 'xxxxxxx@intellicredit.cn'
mail_pass = decrypt('加密后的密码').replace("\x00","")
sender = 'xxxxxxx@intellicredit.cn'
receivers = ['zhangshun@intellicredit.cn']
temp_black_record = os.popen('cat sync.log |grep temp_black_record|tail -3').read() #黑名单temp_black_record表增量备份
black_record = os.popen('cat sync.log |grep black_record|grep -v temp_black_record|tail -3').read() #黑名单black_record表增量备份
message = MIMEText('%s%s'%(temp_black_record,black_record),'plain','utf-8')
message['Subject'] = '黑名单数据增量备份'
message['From'] = sender
message['To'] = receivers[0]
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host,25)
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender,receivers,message.as_string())
smtpObj.quit()
except Exception as e:
print(e)
if __name__ == '__main__':
  mail()

  config.ini

[cloud_blacklist]
host=1.1.1.1
user=user
pass=加密后的passwd [boxing_blacklist]
host=1.1.1.1
user=user
pass=加密后的passwd [general]
mailUser=xxxxxxx@intellicredit.cn
mailPass=加密后的passwd
mailHost=smtp.intellicredit.cn
[security]
mailUser=xxxxxxx@intellicredit.cn
mailPass=加密后的passwd
mailHost=smtp.intellicredit.cn

  

python:mysql增量备份的更多相关文章

  1. innobackupex做MySQL增量备份及恢复【转】

    创建备份用户 mysql> grant process,reload,lock tables,replication client on *.* to 'backup'@'localhost' ...

  2. MYSQL数据库自动本地/异地双备份/MYSQL增量备份

    构建高安全电子商务网站之(网站文件及数据库自动本地/异地双备份)架构图 继续介绍Linux服务器文件备份,数据库备份,数据安全存储相关的电子商务系统架构.针对安全性有多种多样的解决方案,其中数据备份是 ...

  3. windows下mysql增量备份与全备份批处理

    win下的全备批处理 批处理用于游戏服务器,经过严格测试,且正式使用,主要用来完全备份数据库,当然.这只是将数备份出来 ,至于如何将备份出来的数据远程传送的远程服务器上可以调用ftp的功能,此脚本并未 ...

  4. mysql增量备份 percona-xtrabackup

    先说下实际环境 阿里云买的ESC跑的mysql服务,目前由于数据量过大,数据库目前有800多GB,每次全备需要等20多个小时才能够完成,然后就想到做增量备份,写下此文档 一.测试环境 [root@lo ...

  5. 【转】mysql增量备份恢复实战企业案例

    来源地址:http://seanlook.com/2014/12/05/mysql_incremental_backup_example/ 小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但 ...

  6. mysql增量备份脚本

    #!/bin/sh ############################### # 此脚本用来增量备份 # 此文件名:mysqldailybackup.sh # # Author: zhangro ...

  7. mysql增量备份(2/2)

    前言 这是在百度文库里看到的文章,原名叫做<MYSQL 完全与增量备份及恢复文档 >,是关于完全备份和增量备份以及恢复文档的...... 文档介绍 本文档采用 mysqldump  对数据 ...

  8. mysql增量备份(1/2)

    转自:http://www.centos.bz/2012/11/mysql-incremental-backup/ 小量的数据库我们可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,我们 ...

  9. Mysql 增量备份和全量备份

    全量备份: # vim /root/DBFullyBak.sh //添加以下内容 #!/bin/bash # Program # use mysqldump to Fully backup mysql ...

随机推荐

  1. 字典转json

    1.字典转json -(NSString*)dictionaryToJson:(NSDictionary *)dic { NSError *parseError = nil; NSData *json ...

  2. 抛出异常-throws和throw

    package com.mpp.test; import java.util.Scanner; public class TryDemoFour { public static void main(S ...

  3. 描述符__get__,__set__,__delete__和析构方法__del__

    描述符__get__,__set__,__delete__ 1.描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一 ...

  4. mybatis实现简单的增删查改

    接触一个新技术,首先去了解它的一些基本概念,这项技术用在什么方面的.这样学习起来,方向性也会更强一些.我对于mybatis的理解是,它是一个封装了JDBC的java框架.所能实现的功能是对数据库进行增 ...

  5. java中 awt Graphics2D

    Graphics2D ,Graphics 类,提供了对几何形状.坐标转换.颜色管理和文本布局更为复杂的控制.它是用于在 Java(tm) 平台上呈现二维形状.文本和图像的基础类.验证码生成可以用到此类 ...

  6. [转]在C#中使用托管资源和非托管资源的区别,以及怎样手动释放非托管资源:

    托管资源指的是.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源.托管资源的回收工作是不需要人工干预的,有.NET运行库在合适调用垃圾回收器进行回收. 非托管资源指的是.NET不知道如何回 ...

  7. 集成SpringMVC, Spring, Mybatis环境

    web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app version=" ...

  8. WORD操作的问题

    最近有个小项目主要是对文档,特别是WORD的操作,读取表格数据存到数据库: 再把数据库的数据读出来写入WORD,下载下来,诸如此类的东西,说来很是简单. 想了想是用什么开发呢? C#常用的,没话说,也 ...

  9. IOSAutolayout

    21:55:33前言 1 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-ip ...

  10. QT如何设置应用程序的图标

    QT如何设置应用程序的图标 准备:.ico格式的图片,可以选择任意其他图片格式的一张图片用格式工厂转换成.ico图片     例如选用的图片是Application.ico 把图片放到工程目录下 在工 ...