Python中MySQL数据迁移到MongoDB脚本的方法
MongoDB简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB是一个文档数据库,在存储小文件方面存在天然优势。随着业务求的变化,需要将线上MySQL数据库中的行记录,导入到MongoDB中文档记录。
一、场景:线上MySQL数据库某表迁移到MongoDB,字段无变化。
二、Python模块:
使用Python的torndb,pymongo和time模块。
*注释:首先安装setup.py,pip,MySQLdb
执行如下命令即可:
pipinstalltorndb
pipinstallpymongo
三、脚本内容如下:
[root~]#catnmytomongo.py
#!/usr/bin/envpython#fielName:mytomongo.py#Author:xkops#coding:utf-8importtorndb,pymongo,time#connecttomysqldatabasemysql=torndb.Connection(host='127.0.0.1',database='database',user='username',password='password')#connecttomongodbandobtaintotallinesinmysqlmongo=pymongo.MongoClient('mongodb://ip').databasemongo.authenticate('username',password='password')countlines=mysql.query('SELECTmax(table_field)FROMtable_name')count=countlines[0]['max(table_field)']#count=300printcounti=0j=100start_time=time.time()#selectfrommysqltoinsertmongodbby100lines.foriinrange(0,count,100):#printa,b#printi#print'SELECT*FROMquiz_submissionwherequiz_submission_id>%dandquiz_submission_id<=%d'%(i,j)submission=mysql.query('SELECT*FROMtable_namewheretable_field>%dandtable_field<=%d'%(i,j))#printsubmissionifsubmission:#collection_namelikemysqltable_namemongo.collection_name.insert_many(submission)else:i+=100j+=100continuei+=100j+=100end_time=time.time()deltatime=end_time-start_timetotalhour=int(deltatime/3600)totalminute=int((deltatime-totalhour*3600)/60)totalsecond=int(deltatime-totalhour*3600-totalminute*60)#printmigratedatatotaltimeconsuming.print"DataMigrateFinished,TotalTimeConsuming:%dHour%dMinute%dSeconds"%(totalhour,totalminute,totalsecond)
*注释:按照自己的需求更改上述代码中的数据库地址,用户,密码,库名,表名以及字段名等。
四、执行迁移脚本:
[root~]#pythonnmytomongo.py&>/tmp/migratelog.txt&
脚本执行完成后查看/tmp/migratelog.txt数据迁移消耗的时间。