首先把本地数据导出来,在本地到moba-mobile-site执行命令:mongodump -d 数据库名称:

    -d 表示要导出哪个数据库,在db.js里面已经写过了,连接的是本地的27017/moba,所以moba就是我们的数据库名称。

    所以执行命令:mongodump -d moba

    但是这里会报错:mongodump: command not found

    经查是因为安装mongodb时未配置环境变量,会出现如下图错误:不认识mongodump是什么指令。

    参考这篇文章:https://blog.csdn.net/wangcuiling_123/article/details/78591084

    配置环境变量:
    image.png

    还有记得重新启动mongoDB服务后,便可以在任意位置进行mongod命令了(查看版本), 再次运行mongodump -d moba 就在当前文件夹出现了一个dump文件夹了。
    image.png

    这个dump文件夹后面是不需要的,只是备份,暂时放这边。要把里面所有数据库中导出的文件放到服务器上去,然后在服务器上运行导入就可以了。

    接下来去服务器上打开一个文件夹:在vscode里远程资源里,打开/root/ 个人文件夹,然后把刚刚那些数据库文件复制过来,复制dump文件夹,到root个人文件夹里,复制好后打开服务器中的终端,执行一个mongorestore,恢复数据。

    所以这两个命令是成对的,在本地要导出数据的地方执行mongodump -d,导出哪个数据库,现在打开网页看一下:
    image.png

    如果服务器停了,需重启服务器:

    cd /data/moba-mobile-site/,然后执行:pm2 start moba-node/index.js

    但是后台中的物品列表中图片有问题,但是英雄列表中的图片没有问题,因为英雄列表中的图片就是线上地址,而物品列表中图片是因为上传地址为localhost:3000,是个本地地址,如果这个网站要给别人用的话,在他们的本地肯定是没有开localhost:3000这个端口的,所以图片绝对不能出现本地地址。

    由于这个地址已经传过了,已经晚了,现在改是修复以后会出现的问题,到moba-node/routes/admin/index里:

    图片上传地址里面的localhost:3000:
    image.png

    改成线上地址:

    file.url = http://test.miqilin21.cn/uploads/${file.filename}

    当本地代码改了之后呢,就要同步到正式的服务器上去,这里先把dump临时的文件删了,不要加到版本库里。

    git status看修改了什么,检查当前文件状态,git diff看一下这个文件是哪里修改的,按一下q就退出去。接下来就是把代码推到github上。

    先执行:git commit -am "fix upload url",把本地代码库提交完成了,-am是add,modify的缩写。

    上传到github上后到服务器上拉一下代码:在 /data/moba-mobile-site/里输入:(sudo) git pull
    image.png

    注意:每次拉完代码后,在服务器上由于我们并不是用nodemon来启动的,nodemon可以自动重启,但是pm2是正式的用的是node,不会重启,所以要用pm2 reload index,类似刷新。index是我们开启那个name,用pm2 list可以看那个id:
    image.png

    以后一定要记住:!!!!拉完代码一定要 pm2 reload 这个进程的一个名称,这个代码才会更新。

    下一步是迁移数据,回到线上后台界面,可以看到这个图片还是没显示,检查一下:
    image.png

    还是本地的3000,我们要把这个数据改掉。

    涉及到改数据,接下来就是要操作数据库,最好是有个可视化的s数据库的管理软件,建议下载 Robo 3T,打开它之后可以通过它连接到数据库上去,

    创建一个连接,比较重要的是要选择这个SSH,因为我们从这里连接到服务器上去是不能直接去连的,一定要我们通过img/SSH登上服务器,再到服务器上去连接本地的数据库localhost:27017,
    image.png

    点左下角test测试一下,都是可以后就保存了。

    然后连接服务器上的数据库,可以看到一个moba,就是这个数据库了:
    image.png

    collections:是这个数据库的集合;比如items就是对应的Item数据模型的所有数据。

    里面的数据几乎就是我们JS里的json数据了,但有点区别,比如说_id是个对象,并不是一个普通的数字或文字。可以看到里面的物品还是3000地址:
    image.png

    我们要改的就是它。

    可以在表格模式下一个个去修改,表格模式可以点右键Edit Document修改,但是这种方式比较繁琐,这里介绍一个技巧:通过mongodb里的命令行去修改它,比如双击某个集合,其实就是执行了右边这个命令,所以mongodb和nodejs结合是最好用的,因为都是js语言:
    image.png

    这里的命令行可以用JS的一些方法,比如forEach,map,都是JS的语法:

    右键点击集合,open shell,输入以下代码:

    1. db.getCollection("items").find({}).map(doc => {
    2. doc.icon = doc.icon ? doc.icon.replace('localhost:3000', 'test.miqilin21.cn') : null
    3. db.items.save() //记得这行
    4. return doc
    5. })

    执行一下,就修改好了:
    image.png

    再回去后台界面:
    image.png

    物品也就有了,地址也是对应域名的地址了。

    所以用Robo 3t来直接修改服务器上的数据库的信息是比较方便的,还有英雄司马懿里的技能和首页广告也没照片,一样去修改地址就可以了。

    至此就完成了本地到线上数据库的迁移。

    还有记得每次拉完代码,如果server有新的npm依赖,要进去server里**sudo npm i**一下,不然会报nginx 502错误