FAQ v2.0终于上线了,断断续续忙了有2个多月。这个项目是我实践的第一个全栈的项目,从需求(后期有产品经理介入)到架构,再到设计(有征询设计师的意见)、构建(前端、后台、数据库、服务器部署),也是第一次独立负责一个项目,所以意义很不一般,后面还会写一篇总结的文章。闲言少叙,进入正题:

其中有一个自动定时发访问记录列表和反馈问题列表的邮件的功能,本来打算自己写的,不过后来了解到团队有现成的平台可以做这个事,所以就用现成的喽。但有一个问题,该平台配置的数据源必须是MySQL数据库,而FAQ平台用的是MongoDB数据库。有两个办法:一是把现有的MongoDB数据库换成MySQL,这样的话要改动比较大;二是把MongoDB里的数据迁移到MySQL数据库。我采用的是第二种方法,可是怎么迁移呢?不能直接迁移,在网上搜了下,有一个办法是先把MongoDB里的数据导出到csv文件或者txt文件中,再把csv/txt文件中的数据导入到MySQL数据库中,感觉挺靠谱的。

分两步走:

PS:昨天用windows自带的画图工具画的那个图有点丑,今天一个设计师朋友用sketch给我画了个好看点的图,附上。(2016.10.26更新)

第一步:将MongoDB里的数据导出到csv文件,有一个mongo自带的工具mongoexport就可以实现。

/usr/local/mongodb/bin/mongoexport -h ip(192.168.0.102) -u mongo数据库登录帐号 -p mongo数据库登录密码 -d mongo数据库名称 -c mongo数据库集合名 -f _id,字段1,字段2 --type=csv -o 保存路径(/data/kagol/records.csv)

导出的csv文件格式是一条mongo记录占一行,字段之间用逗号(,)分割。

第二步:将csv文件导入到MySQL数据库中,可以用MySQL的load命令。

SQL语句如下(load_csv_data.sql):

1 load data local infile '/data/kagol/records.csv'

2 into table `records` character setutf8

3 fields terminated by ',' optionally enclosed by '"'

4 lines terminated by '\n'

5 ignore 1 lines;

写成shell脚本(load_csv_data.sh):

mysql -hip(192.168.0.105) -umysql登录用户名 -pmysql登录密码 mysql数据库名 --default-character-set=utf8 --local-infile=1 < /data/kagol/load_csv_data.sql

要注意的是:

(1)-h和ip之间不需要空格(-u,-p同理);

(2)MySQL数据库的格式必须和csv格式一致(字段数、顺序等)。

这样就顺利地完成了MongoDB数据库到MySQL数据库的迁移,but!!这个方法导出来的数据中文是乱码的!!花了那么多时间居然是乱码,此刻我的内心是奔溃的!(此处不配图,自己脑补画面)

于是,有了现在的方案,写代码(Node)迁移。

1 //mongo对象

2 var Record = require('./record');

3

4 //mysql对象

5 var mysql = require('mysql');

6 var connection =mysql.createConnection({

7 host : '192.168.0.104',//mysql服务器ip

8 user : 'XXX',//mysql登录名

9 password : 'XXX',//mysql登录密码

10 database : 'XXX'//mysql数据库名

11 });

12

13 connection.query('set names latin1');//这句很关键,确保中文不乱码

14

15 var addZero = function(num){

16 return num < 10 ? '0' +num : num;

17 }

18

19 var getYesterday = function(){

20 var now = newDate();

21 var year =now.getFullYear();

22 var month = now.getMonth() + 1;

23 now.setTime(now.getTime() - 1000*60*60*24);

24 var day =now.getDate();

25 var result = year + '-' + addZero(month) + '-' +addZero(day);

26 returnresult;

27 }

28

29 var yesterday =getYesterday();

30

31 //导入昨天的数据

32 Record.find({time:{'$gt':yesterday + ' 00:00:00','$lt':yesterday + ' 23:59:59'}},function(err, docs){

33 if(err){

34 console.log('error');

35 }else{

36 for(var i=0;i

37 var 字段1 =docs[i].字段1;

38 var 字段2 =docs[i].字段2;

39 var sql = 'insert into faq_records (字段1, 字段2) values("'+字段1+'","'+字段2+');';

40 connection.query(sql, function(err, rows) {

41 return;

42 });

43 }

44 console.log('succeed!');

45 }

46 })

record.js文件是封装了对mongo数据库的操作:

1 var mongoose = require('mongoose');

2 var connectionRecord = mongoose.createConnection('mongodb://mongo登录帐号:mongo登录密码@ip:mongo服务端口(默认是27017)/数据库名');

3 var Schema =mongoose.Schema;

4 var recordSchema = newSchema({

5 字段1: String,

6 字段2: String

7 });

8 var Record = connectionRecord.model('Record', recordSchema);

9 module.exports = Record;

这个方案完美地解决了中文乱码问题!

大家有别的方法可以一起讨论哈~~

PS:一直没搞明白为什么第一种方案会乱码,mongo里的数据确实是没有乱码的,csv文件里的数据也没有乱码,就是到了MySQL里就是乱码,怀疑是load data那一步有问题,但是我加了"character set utf8"和"--default-character-set=utf8"啊~~

mongoose换成mysql_如何将MongoDB数据库的数据迁移到MySQL数据库中相关推荐

  1. ssh项目同时使用mysql跟sqlserver数据库_MSSQL_如何把sqlserver数据迁移到mysql数据库及需要注意事项,在项目开发中,有时由于项目 - phpStudy...

    如何把sqlserver数据迁移到mysql数据库及需要注意事项 在项目开发中,有时由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Serve ...

  2. centos mysql数据迁移_Centos MySQL数据库迁移详细步骤

    其实迁移数据库,一般用sql文件就行,把A服务器数据库的表结构和数据等等导出,然后导入到B服务器数据库, 但是这次数据文件过大,大约有40个G,使用命令行导入,效果不是很好,经常在执行过程中报错.卡死 ...

  3. python覆盖数据库重复数据_Python操作MySQL数据库,插入重复数据

    sql = "INSERT INTO test_c(id,name,sex)values(%s,%s,%s)" param = (1,'AJ','MAN') n = cursor. ...

  4. php mysql数据库删除数据_PHP 操作Mysql数据库删除数据示例

    需求 PHP连接数据库 POST参数数据控制ID删除数据 查询剩下的数据 php连接数据库 //config.php文件内容 $database = "xx"; $dataname ...

  5. abp mysql .net core_ABP .Net Core Entity Framework迁移使用MySql数据库

    一.迁移说明 ABP模板项目Entity Framework Core默认使用的是Sql Server,也很容易将数据库迁移到MySQL,步骤如下. 二.迁移MySQL步骤 1. 下载项目 请到 ht ...

  6. scrapy爬虫储存到mysql_详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库

    获取要爬取的URL 爬虫前期工作 用Pycharm打开项目开始写爬虫文件 字段文件items # Define here the models for your scraped items # # S ...

  7. sentinel 官方文档_Sentinel控制台监控数据持久化到MySQL数据库

    阅读文本大概需要3分钟. 根据官方wiki文档,Sentinel控制台的实时监控数据,默认仅存储 5 分钟以内的数据.如需持久化,需要定制实现相关接口. https://github.com/alib ...

  8. mysql数据库导出最大值_4.6 MySQL数据库导入与导出攻略

    4.6 MySQL数据库导入与导出攻略 4.6.1 Linux下MySQL数据库导入与导出 1. MySQL数据库的导出命令参数 主要是通过两个mysql和mysqldump命令来执行 (1) MyS ...

  9. python爬虫开发数据库设计入门经典_Python3实现的爬虫爬取数据并存入mysql数据库操作示例...

    本文实例讲述了Python3实现的爬虫爬取数据并存入mysql数据库操作.分享给大家供大家参考,具体如下: 爬一个电脑客户端的订单.罗总推荐,抓包工具用的是HttpAnalyzerStdV7,与chr ...

最新文章

  1. Linux那些事儿 之 戏说USB(24)设备的生命线(七)
  2. 字节跳动总结的设计模式 PDF 火了,完整版开放下载!
  3. 简单例子解释invalidate(), requestLayout() (常用还是需要知道的)
  4. poj2305-Basic remains(进制转换 + 大整数取模)
  5. Linux命令(27):shell 结合expect,多服务器批量分发数据
  6. 建议收藏:服务器和存储技术知识
  7. linux文件系统体系结构 和 虚拟文件系统(VFS)
  8. python datetime
  9. osquery的认识
  10. Serverless 实战 —— 前端也可以快速开发一个 Puppeteer 网页截图服务
  11. AndroidStudio安卓原生开发_android按钮防止短时间内连续点击_在android_java中都能使用---Android原生开发工作笔记131
  12. @Configuration、@Bean 装配组件 与 @Resource 与 @Autowired 与 @Qualifier 、@Primary 获取组件
  13. 计算机学win7画图,利用windows画图工具新功能,制作简易3D画图很简单了!-win7画图工具...
  14. 颜色值RGB转换为HEX(十六进制)
  15. 三级网络技术--宽带接入技术--XDSL
  16. 5月刊推荐:怎样才是真正的架构师
  17. (Java零基础学习笔记)第二章 Java中的基本语法
  18. 1.1 嵌入式系统概述
  19. 巴萨“青梅竹马”力量震惊世界 梅西小法19球占79.2%
  20. 微信公众平台支付接口调试工具

热门文章

  1. STM32连续采样_STM32 - 利用双缓冲实现实时曲线显示(续)
  2. android 对话框的父view是谁,android – 在对话框中获取相对于其父级的视图位置
  3. PHP rewinddir()函数与示例
  4. Java ClassLoader getParent()方法与示例
  5. MySQL 性能优化 分布式
  6. JAVA类(手机充电、放音乐示例)
  7. Command10,Access数据库
  8. Qt QtCreator 所有版本官方下载地址
  9. 深入了解EntityFramework——Lazy Loading与Eager Loading
  10. python 发红包import random用redenv,Python微信发红包编码案例 微信发红包的架构模式 - push博客...