将mongodb数据库中的数据转移到MySQL

    最近在写毕业设计,用到了Mongodb,但是在写SSM的时候,发现还是用MySQL方便,于是就想到了把MongoDB中的数据转移到MySQL中。但是过程中遇到一些问题,故做出此总结。

    首先,自己想的笨方法,就是从MOngoDB读取然后再写入MySQL,虽然肯定比较费时间,想着大不了就多运行一会,不用管它,但是发现根本不是想的这样。因为MongoDB中一条记录可能有的字段不包括,然后如果直接获取的话会报错:KeyError。故此方法效率又低又不方便。

    然后网上查找发现,可以先将MongoDB中的数据导出到CSV,然后再将CSV导入到MySQL。所以一下就介绍这个方法,以及遇到的一些问题。

   一、MongoDB导出到CSV

     我的系统是Ubuntu16,故直接运行命令行:

mongoexport -h 127.0.0.1 -d Sina1 -c Tweets -f _id,ID,PubTime,Sentiment --csv -o /data/share/sentimentRecords.csv

其中127.0.0.1为IP地址,我是本机,因为我没有用户名和密码,所以此处不加该参数。Sina1为数据库名称,Tweets是集合名称。-f后的参数为要导出的Collection中的字段,-o后的参数为导出文件的位置。

执行就可以,这个过程没有遇到什么大问题。

    导出后可能打开是乱码,用记事本或者Notepad另存为UTF8即可。


二、将CSV导入到MySQL

1.准备工作:

创建MySQL数据库和接收数据的表,注意表的顺序和字段要和MongoDB导出的字段及CSV中的文件表头一样。

在此处要注意,将编码都设置为utf8。

2.执行:

load data infile '/var/log/mysql/sentimentRecords.csv'
into table `tweets` character set utf8
fields terminated by ',' optionally enclosed by '"'
lines terminated by '\n'
ignore 1 lines;

一般都会报出这个错误:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

因为MySQL导入导出不是任意文件下的文件都是可以的。

所以我们把这个VSC文件放到指定文件夹下即可。

使用命令行查看可进行操作的文件夹:

show global variables like '%secure%';  

所以把文件放到该位置即可。

还可以修改MySQL的配置文件,my.cnf中的[mysqld]中添加一行:

 secure_file_priv = 

再次查询:


执行:

load data local infile 'C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\sentimentRecords.csv'
into table `tweets` character set utf8
fields terminated by ',' optionally enclosed by '"'
lines terminated by '\n'
ignore 1 lines;


成功。


其他问题:

因为导入另一个文件的时候,提示

ERROR 1300 (HY000): Invalid utf8 character string: ''

这个时候发现是因为我的文本中有表情,而UTF8是不支持的,所以需要将表以及有表情的字段设置为utf8mb4,utf8mb4_unicode_ci。

同时load语句也需要将UTF8改为utf8mb4.

如果还是不可以,可以试着将数据库也进行改写。

使用

SHOW VARIABLES LIKE 'character%';

可查看数据库编码,


然后使用

SET character_set_server = utf8;  

命令类型进行修改即可。

同时发现,文件导入的方式进行导入导出,速度贼快,推荐。


7W多数据5s 。美滋滋~

迁移MongoDBMySQL可以通过以下步骤实现: 1. 创建MySQL数据库和表结构,确保与MongoDB数据模型相匹配。 2. 连接MongoDB数据库,并获取需要迁移的数据。 3. 遍历MongoDB的每个文档,并将其转换MySQL的对应数据格式。 4. 将转换后的数据插入到MySQL数据库。5. 确认数据迁移完成后,关闭数据库连接。 以下是一个示例代码,演示如何将MongoDB数据快速迁移到MySQL: ```python import pymongo import mysql.connector # 连接MongoDB数据库 mongo_client = pymongo.MongoClient("mongodb://localhost:27017/") mongo_db = mongo_client["your_mongodb_database"] mongo_collection = mongo_db["your_mongodb_collection"] # 连接MySQL数据库 mysql_connection = mysql.connector.connect( host="localhost", user="your_mysql_username", password="your_mysql_password", database="your_mysql_database" ) mysql_cursor = mysql_connection.cursor() # 获取MongoDB数据 mongo_data = mongo_collection.find() # 遍历MongoDB的每个文档,并将其转换MySQL的对应数据格式 for document in mongo_data: # 根据需要进行数据转换和处理 # 例如,将MongoDB文档的字段映射到MySQL的列 # 插入转换后的数据MySQL数据库 mysql_cursor.execute("INSERT INTO your_mysql_table (column1, column2) VALUES (%s, %s)", (value1, value2)) mysql_connection.commit() # 关闭数据库连接 mongo_client.close() mysql_cursor.close() mysql_connection.close() ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值