有关网站建设的标题,网站建设新闻发布注意什么,什么是营销型企业网站,网页制作成品源代码FAQ v2.0终于上线了#xff0c;断断续续忙了有2个多月。这个项目是我实践的第一个全栈的项目#xff0c;从需求(后期有产品经理介入)到架构#xff0c;再到设计(有征询设计师的意见)、构建(前端、后台、数据库、服务器部署)#xff0c;也是第一次独立负责一个项目#xff…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 --typecsv -o 保存路径(/data/kagol/records.csv)导出的csv文件格式是一条mongo记录占一行字段之间用逗号(,)分割。第二步将csv文件导入到MySQL数据库中可以用MySQL的load命令。SQL语句如下(load_csv_data.sql)1 load data local infile /data/kagol/records.csv2 into table records character setutf83 fields terminated by , optionally enclosed by 4 lines terminated by \n5 ignore 1 lines;写成shell脚本(load_csv_data.sh)mysql -hip(192.168.0.105) -umysql登录用户名 -pmysql登录密码 mysql数据库名 --default-character-setutf8 --local-infile1 /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);34 //mysql对象5 var mysql require(mysql);6 var connection mysql.createConnection({7 host : 192.168.0.104,//mysql服务器ip8 user : XXX,//mysql登录名9 password : XXX,//mysql登录密码10 database : XXX//mysql数据库名11 });1213 connection.query(set names latin1);//这句很关键确保中文不乱码1415 var addZero function(num){16 return num 10 ? 0 num : num;17 }1819 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 }2829 var yesterday getYesterday();3031 //导入昨天的数据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 i0;i37 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: String7 });8 var Record connectionRecord.model(Record, recordSchema);9 module.exports Record;这个方案完美地解决了中文乱码问题大家有别的方法可以一起讨论哈~~PS一直没搞明白为什么第一种方案会乱码mongo里的数据确实是没有乱码的csv文件里的数据也没有乱码就是到了MySQL里就是乱码怀疑是load data那一步有问题但是我加了character set utf8和--default-character-setutf8啊~~