mongodb 数据传输到mysql数据库

本文介绍了如何通过shell脚本从MongoDB数据库向MySQL迁移数据,包括MongoDB的配置、连接、SQL查询执行以及初次插入和更新操作,最后提到设置定时任务的重要性。

mongodb 数据传输到mysql数据库

1、首先安装MongoDB数据库,测试连接。(https://blog.youkuaiyun.com/weixin_38568503/article/details/127885059)

​ 启动方式我用的是:bin/mongod --port=20255 --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongodb.log --bind_ip=0.0.0.0 --fork

2、连接之后登录。

mongo mongodb://prod-mongodb-1.mongo:10255/mongodb -u prod-mongodb-1 -p  --ssl --sslAllowInvalidCertificates   #举例daas 数据库连接命令,要输入密码

常用命令

show dbs;  
use daasmongodb;
show collections;
db.wlw_card_open_door_log.find().pretty()   #查看表结构
db.wlw_card_open_door_log.count({open_result:1})  #使用count函数查询字段

3、使用shell脚本执行传输操作,

#!/bin/bash

#MongoDB连接信息
mongo_host="******"
mongo_port="***"
mongo_user="mongodb-1"
mongo_pwd="****************"
mongo_db="daasmongodb"

#MySQL连接信息
mysql_host="dev-mysql"
mysql_user="dev-mysql"
mysql_pwd="****************"
mysql_db="test"

#执行MongoDB查询
face_count=$(mongo ${mongo_host}:${mongo_port}/${mongo_db} -u ${mongo_user} -p ${mongo_pwd} --ssl --sslAllowInvalidCertificates --quiet --eval "db.wlw_face_open_door_log.count({open_result: 1})")
qrcode_count=$(mongo ${mongo_host}:${mongo_port}/${mongo_db} -u ${mongo_user} -p ${mongo_pwd} --ssl --sslAllowInvalidCertificates --quiet --eval "db.wlw_qrcode_open_door_log.count({open_result: 1})")
remote_count=$(mongo ${mongo_host}:${mongo_port}/${mongo_db} -u ${mongo_user} -p ${mongo_pwd} --ssl --sslAllowInvalidCertificates --quiet --eval "db.wlw_remote_open_door_log.count({open_result:1})")
call_count=$(mongo ${mongo_host}:${mongo_port}/${mongo_db} -u ${mongo_user} -p ${mongo_pwd} --ssl --sslAllowInvalidCertificates --quiet --eval "db.wlw_call_open_door_log.count({call_object:1})")

#将查询结果写入MySQL数据库
mysql -u ${mysql_user} -p${mysql_pwd} -h ${mysql_host} ${mysql_db} <<EOF
UPDATE result_table SET value = ${face_count} WHERE name = 'face_count';
UPDATE result_table SET value = ${qrcode_count} WHERE name = 'qrcode_count';
UPDATE result_table SET value = ${remote_count} WHERE name = 'remote_count';
UPDATE result_table SET value = ${call_count} WHERE name = 'call_count';
EOF

4、记得第一次创建的时候要先实行insert 语句,再执行update语句

INSERT INTO result_table (name, value) VALUES ('face_count',${face_count});
INSERT INTO result_table (name, value) VALUES ('qrcode_count',${qrcode_count});
INSERT INTO result_table (name, value) VALUES ('remote_count',${remote_count});
INSERT INTO result_table (name, value) VALUES ('call_count',${call_count});

5、设置定时任务,

实时同步 MongoDB 数据到 MySQL 的方法和工具主要包括以下几种方式: 1. **使用中间件工具** - **Tapdata Cloud** 是一种支持多种数据库实时同步的工具,能够将 MongoDB 数据同步到 MySQL。其操作流程包括配置源数据库MongoDB)和目标数据库MySQL)的连接信息,然后创建同步任务并选择同步模式(全量/增量/全量+增量)。这种方式支持多种数据库之间的数据同步,包括 MongoDBMySQL 的实时同步,且提供低延迟的数据传输[^2]。 2. **基于日志的增量同步工具** - **go-mysql-transfer** 是一个使用 Go 语言实现的工具,虽然主要用于 MySQL 的增量同步,但其原理可以扩展到 MongoDBMySQL 的同步。通过监听 MongoDB 的变更流(Change Streams)或操作日志(oplog),将数据变更实时捕获并传输到 MySQL 数据库中。这种方式能够实现高性能、低延迟的增量数据同步[^3]。 3. **ETL 工具** - **Kettle(现称 **Pentaho Data Integration**)是一个强大的 ETL 工具,可以用于从 MongoDBMySQL 同步数据。通过 Kettle,可以设计数据转换流程,将 MongoDB 中的数据抽取、转换后加载到 MySQL 数据库中。虽然主要用于批量同步,但结合定时任务也可以实现准实时同步[^4]。 4. **自定义开发** - 通过编写自定义脚本或应用程序,使用 MongoDB 的 Change Streams 功能监听数据变更,并将变更实时写入 MySQL。例如,可以使用 Python 或 Node.js 编写程序,监听 MongoDB 的 oplog 或变更流,然后将数据转换为 MySQL 支持的格式并插入到目标数据库中。 5. **第三方数据同步服务** - 一些云服务提供商(如阿里云、AWS)提供了数据库同步服务,支持 MongoDBMySQL 的实时同步。这些服务通常提供图形化界面和自动化的同步流程,适合企业级应用。 ### 示例代码:使用 Python 实现 MongoDBMySQL 的简单同步 以下是一个简单的 Python 脚本示例,用于从 MongoDB 读取数据并插入到 MySQL: ```python import pymongo import mysql.connector # 连接到 MongoDB client_mongo = pymongo.MongoClient("mongodb://localhost:27017/") db_mongo = client_mongo["mydatabase"] collection_mongo = db_mongo["mycollection"] # 连接到 MySQL conn_mysql = mysql.connector.connect( host="localhost", user="root", password="password", database="mydatabase" ) cursor_mysql = conn_mysql.cursor() # 从 MongoDB 获取数据并插入到 MySQL for document in collection_mongo.find(): # 假设文档中有字段 name 和 age sql = "INSERT INTO mytable (name, age) VALUES (%s, %s)" val = (document["name"], document["age"]) cursor_mysql.execute(sql, val) # 提交事务 conn_mysql.commit() # 关闭连接 cursor_mysql.close() conn_mysql.close() ``` ### 注意事项 - **数据格式转换**:MongoDB 是 NoSQL 数据库,存储的是文档型数据,而 MySQL 是关系型数据库,存储的是结构化数据。在同步过程中,需要将 MongoDB 的文档结构转换为 MySQL 的表结构。 - **性能优化**:对于大规模数据同步,建议使用批量插入和索引优化来提高同步效率。 - **错误处理**:在同步过程中,应加入错误处理机制,确保数据一致性和完整性。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值