一、迁移MongoDB数据到MySQL
1、使用mongoexport导出.csv文件
mongodb自带mongoexport工具,可便捷导出csv、json等格式数据:
mongoexport -h .0.1 -u username -p password -d userInfoDB数据库名称 -c regInfo集合名称 -f _id,字段1,字段2 --typecsv -o /tmp/mongoStore/userInfo.csv保存路径
根据个人需要选择要导出的字段,此处可以无须导出_id字段
2、新建数据库和数据表
按照个人需要设计数据表结构。此处注意数据表的字段顺序必须一一对应于csv文件中首行的key,所以对应数据表可以暂时先不用设置自增id,否则数据导入后数据表字段对应的值会混乱。
3、新建csv导入mysql的sql脚本
创建load_csv.sql文件
load data infile 修改为指定csv文件路径into table 修改为mysql中新建数据表名称 character utf8
fields terminated by optionally enclosed by
lines terminated by
ignore lines
执行以下mysql load sql命令
mysql -uroot -pmysql -DuserInfoDB --default-character-setutf8 --local-infile ~/load_csv.sql
这样数据就从迁移到了mysql
如果mongodb中键比较多,可以通过如下方式获取keys
比较麻烦的点在于导出csv文件的时候要选择字段和新建mysql表的时候也要写全字段。
如下方式可以比较快的获取字段列表:
从mongodb获取一条数据
$ mongo use userInfoDB
db.regInfo.find.limit
ObjectId, , , , , ,
以上数据复制到python解释器中,使用python命令获取所有key的列表
(_id的值不符合dict格式,此处删掉)
json s "
. , , , , , "
s_dict json.loadss
s_dict.keys
, , , , ,
这样就获得了keys
二、Python迁移MySQL数据到MongoDB
1、Python模块
执行如下命令即可:
pip pymysql pip pymongo
2、脚本内容
pymysql,pymongo,time
mysql pymysql.connecthost, , ,
cursor mysql.cursor
mongo pymongo.MongoClient.database
mongo.authenticate,password
cursor.execute
countlines cursor.fetchall
count countlines
printcount
i
j
start_time time.time
range,count,100:
submission mysql.queryf %i,j
submission:
mongo.collection_name.insert_manysubmission
else:
i
j
i
j
end_time time.time
deltatime end_time - start_time
totalhour intdeltatime /
totalminute int
cursor.close
mysql.close
三、使用pandas将MySQL的数据导入MongoDB
需求:把mysql的70万条数据导入到mongodb并去重,同时在第二列加入一个url字段,字段的值和第三列的值一样
pandas as pd
from sqlalchemy create_engine
from pymongo MongoClient
json
class MongoBase:
def __init__self, collection:
self.collection collection
self.OpenDB
def read_mysqlself:
engine create_engine
time.time
self.get_max_id
df1 pd.read_sqlf, engine
end time.time
print,lendf1,,end-start
df1.drop_duplicates, , True
df1.insert, , df1
df1
def OpenDBself:
self.con MongoClienthosthost
self.db self.conself.collection
self.collection self.db
def closeDBself:
self.con.close
def get_max_idself:
max_id self.collection.find.sort, -1.limit
max_id:
max_id.get
__name__
time.time
mongo MongoBase
mongo.read_mysql
mongo.collection.insertjson.loadsdf.T.to_json.values
mongo.closeDB
time.time
print,end-start
还没有评论,来说两句吧...