需求背景:
公司内部由于开发的维护的网站及工具使用的数据库,由于时间比较悠久,架构比较旧,当开发人及维护员离职后,一旦服务崩溃后新的员工没法恢复服务使用了,在只有遗留数据库备份文件的情况下,有需要查询旧的数据资源。
造成的原因:
开发及运维人员没有完整的开发和部署文档,旧的技术或者架构早已经被弃用,年轻人对于比较老旧的技术了解的不多。
解决方案
1. 重新开发新的网站,并且使用旧的数据库
2. 重新开发新的网站,不是用旧的数据库,提供查询就数据的功能
方案选择分析:
由于旧的数据使用频率比较低,而且主要是查询需求,而新的需求需要增加一些字段,在旧的数据表并没有预留相关的字段,所以采用方案2.对于什么形式的查询功能,通过综合考虑,旧的数据库条目大概几万条,查询频率低于每天5次,所以采取导出到CSV文件的做法。开发一个专门的查询功能作用不大。
1. 导入备份sql文件到数据库
使用以下命令将备份数据库文件导入,可以提前创建一个专门作为数据还原的数据库。
msyql -h localhost -uroot -p citools < e:\mysql\mysqldb2.sql2
编写脚本前先参看需要备份字段,规划那些字段需要备份,那些是没有意义的。
脚本示例:
import MySQLdb
import csv
conn = MySQLdb.connect(
host='127.0.0.1',#数据库ip地址
user='root',#username
passwd='password',#你的用户密码
db='dbaname')#使用database名称
cur = conn.cursor()
sql = "select * from ReceivedItem" #ReceivedItem修改为你要导出数据的表
cur.execute(sql)
results=cur.fetchall()
csvfile=file('old_citool.csv','wb')
writercsv=csv.writer(file('old_citool.csv','wb'))
#CSV 文件第一行,注释每一列都是什么数据
writercsv.writerow(['id','create_date','site','PO','category',
'PlacedLocation','ReceivedInOFA','ItemName',
'Model','SN','bin','assetid','quantity','RMAID'])
for item in results:
'''每个item对应你数据表里的一个字段,并不是每一个字段根据需求导出'''
item_dict=[
item[1],
item[3],
item[4],
item[5],
item[6],
item[7],
item[8],
item[9],
item[10],
item[11],
item[12],
item[13],
item[14],
item[15],
item[18]
]
writercsv.writerow(item_dict)
csvfile.close()
cur.close()
- 编码问题
完成后打开文件可能出现汉字乱码的问题,这由于编码格式不同所造成,按照下面的文档可以解决:主要方式用notebook打开CSV文件保存为txt,然后新建excel文件,导入数据即可,需要注意分隔符的选择。
参考:http://jingyan.baidu.com/article/ac6a9a5e4c681b2b653eacf1.html