使用db-migrate软件包时如何保存数据?

时间:2019-06-23 00:19:40

标签: mysql node.js

我正在使用db-migrate npm软件包来管理我的带有MySQL数据库的Nodejs服务器的生产和开发模式。我配置了所有内容,他们意识到运行db-migrate会删除所有数据。有没有办法使用此程序包更改架构而不丢失所有表数据?

此刻我已经设置了迁移文件

/ *基于回调的版本* /

exports.up = function (db, callback) {
  db.createTable('pets', {
    id: { type: 'int', primaryKey: true },
    name: 'string'
  }, callback);
};

exports.down = function (db, callback) {
  db.dropTable('pets', callback);
};

每次更改模式db-migrate down都比更改

db-migrate up

1 个答案:

答案 0 :(得分:0)

您正在丢失数据,因为您的向下迁移脚本会删除表+数据。如果需要保留数据,则在删除/截断表之前,应该有明确的步骤进行复制。

您可以创建数据库快照(使用mysqldump)并重新加载该快照,这样您就可以在其中拥有数据副本的“检查点”。

或者,您可以在向上迁移脚本中添加一些步骤,这些步骤将创建带有时间戳的备份表供您参考。我通常这样做的方式是:

  • renaming一张带有时间戳的变体表
  • 从带有时间戳的表中创建新表
  • 将值回填到新表中

值得一提的是,db-migrate用于使您的应用程序和db模式保持同步。在向下迁移中删除表,同时正确创建表,但对以后的代码管理有更多影响。我以前的技术顾问会告诉我,在大多数情况下,向下迁移会带来更多的麻烦,而不是其价值,因此,最好是随着新的迁移而“向前滚动”。 感觉是错误的,但是实际上,这是我使用db-migrate,mysql和node.js时的务实举措。