数据库迁移

前言

数据库迁移有啥好记录的, 一句话搞就完了.
操蛋在于, 项目没有实际开发测试完,但是需要先写发版步骤. 

场景:

平常开发服务器A, 要给客户定制化部署一份B. A的表结构等信息还没有完全确定, 开发中可能存在变动, 如何写发版迁移步骤呢?

mysql:

方案1(navicat视图化工具):

navicat 通过数据库连接工具直接迁移.
工具-> 结构同步/数据同步. 选择源和目标之后执行.
  • 优点:

    链接简单, 所见即所得

  • 缺点:

    不容易描述, 要么截图让运维按照截图操作, 要么现场指导, 各种点击选择容易出错.
    比如我只迁移某个库中的某个表的数据, 操作上可能要找到表再勾选, 比较难找.

方案2(mysqldump):

示例:

仅导出结构
mysqldump -u账号 -p密码 -hIP地址 -d -B 数据库1 数据2 数据库3 > 导出的建库语句.sql
导出数据
mysqldump -u账号 -p密码 -hIP地址 数据库 表1 表2 表3> 导出数据执行语句.sql
-u 账号
-p 密码
-h 数据库
--where 查询语句
有了sql怎么写到新库, 这个就不赘述了. 
mysql -u账号 -p密码 -hIP地址 --database=数据库1 -e"要手动执行的sql语句"
mysql -u账号 -p密码 -hIP地址 --database=数据库1  < 要导入的sql文件.sql
  • 优点:

    不会出错,傻瓜式操作,不会因为误点击导致数据出错.

  • 缺点:

    需要拼接账号密码ip地址才能操作, 落了下乘.

mongoDB

众所周知, mongoDB,无需建表语句, 动态创建表, 所以没有啥结构迁移?
嗯? 怎么可能没有结构迁移, 还有索引迁移呢!

索引导出(js脚本):

var collectionList = db.getCollectionNames();
for(var index in collectionList){
    var collection = collectionList[index];
    var cur = db.getCollection(collection).getIndexes();
    if(cur.length == 1){
        continue;
    }
    for(var index1 in cur){
        var next = cur[index1];
        //print(JSON.stringify(next))
        if(next["key"]["_id"] == '1'){
            continue;
        }
        print("try{ db.getCollection(\""+collection+"\").ensureIndex("+JSON.stringify(next.key)+",{background:1, unique:" + (next.unique || false) + "" + (next.expireAfterSeconds > 0 ? ", expireAfterSeconds :" + next.expireAfterSeconds  : "") + " })}catch(e){print(e)}")
    }
}

数据导入导出

示例导出:
mongoexport -h 127.0.0.1 --port 20000 -d chargerlink -c t_wallet_card_reset_record  --file 123.json --query='{"reset_time":{$gte:1561392000000}}'
-h 地址
-port 端口
-d 数据库名称
-c 表名称
--type 导出数据类型,
-o 导出数据存储位置
--query 检索条件
导入:
mongoimport -h 127.0.0.1 --port 20000 -d mamcharge -c unionUser --file 123.json
-h 地址
-port 端口
-d 数据库名称
-c 表名称
-file 导入数据存储位置

给别人让别人录入采用export导出文件,copy给对方,给对方写好import语句,
自己执行当然采用mongodump了, 方便.
备份示例:
mongodump --host 172.16.1.185 --port 27017 -u mamcharge -p hlBAPwR2DG -d mamcharge -c conf_alarm_definition
参数说明:
--host:MongoDB所在服务器IP。
--port:MongoDB所在服务器端口。
-d:需要备份的数据库实例。
-o:备份的数据存放位置。
-u : 指定登录用户
-p : 指定登录用户的密码
-c :  指定要备份的集合
posted on 2023-02-01 11:29  夜色无边000  阅读(17)  评论(0编辑  收藏  举报