【问题标题】:Grails database migration on deployed server已部署服务器上的 Grails 数据库迁移
【发布时间】:2014-09-23 01:19:32
【问题描述】:

大家好,我在使用 grails 数据库迁移插件时遇到问题/困惑。

用于学习的资源-

  1. Grails 数据库迁移插件官方文档-http://grails-plugins.github.io/grails-database-migration/docs/manual/guide/introduction.html
  2. 数据库迁移示例-http://grails.github.io/grails-howtos/en/manageDatabases.html

现在在这些帮助下,我可以很好地迁移或更改本地计算机上的数据库,该计算机已安装并正常工作。

问题是生产服务器是在线部署的,我总是上传我的 WAR 文件以部署在 apache tomcat 上。所以它基本上是在 JAVA 上运行的,所以 grails 没有安装在 ubuntu 机器上。 现在我将如何迁移服务器上的 mysql 数据库?

【问题讨论】:

    标签: mysql database tomcat grails database-migration


    【解决方案1】:

    在您的 Config.groovy 文件中添加以下配置。迁移将在 WAR 部署期间运行。

    //===========================DATA MIGRATION============================
    //Run changelog.groovy during application deployment on server?
    grails.plugin.databasemigration.updateOnStart = true
    //File used to run the db migration scripts
    grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.groovy']
    //Absolute path of changelog.groovy in the app base dir
    grails.plugin.databasemigration.changelogLocation = 'migrations'
    //  the default schema to use when running auto-migrate on start
    //grails.plugin.databasemigration. updateOnStartDefaultSchema ='schema' // You may not need this in MYSQL
    //=====================================================================
    

    根据上面的配置,你的文件夹结构应该是这样的:

    your-grails-project
          --migrations/
              --changelog.groovy
              --migration1.groovy
              --migration2.groovy
    

    changelog.groovy

    databaseChangeLog = { 
      include file: 'migration1.groovy'
      include file: 'migration2.groovy'
    }    
    

    【讨论】:

    • 感谢您的回复拉利特。我的 config.groovy 中已经有了这些行。我使用 2 个命令来生成更改日志 - 第一个 - grails dbm-update 和第二个 grails dbm-gorm-diff changelog.groovy --add。那么你的意思是我必须在本地机器上运行这两个命令来生成更改日志并将其上传到服务器并让它自动处理更改?
    • 已编辑我的答案,请看一下。在生成 WAR 之前,您需要拥有这些文件。
    • 网络场会发生什么?如果我有 5 个 Web 服务器,changelog 脚本会尝试运行 5 次吗?
    • @dudemonkey 您的 5 个 Web 服务器是连接到不同的数据库还是都连接到同一个数据库?
    • @dudemonkey 好的。因此,liquibase 将在您的数据库中维护一个名为:databasechangelog 的表。该表将包含在该数据库上执行的更改日志脚本的所有信息及其校验和。因此,如果您的更改日志脚本在所有 Web 服务器中完全相同,则不应多次执行。
    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 2015-03-06
    • 1970-01-01
    • 2017-01-08
    • 2011-05-22
    • 1970-01-01
    • 2012-01-01
    • 2019-01-25
    相关资源
    最近更新 更多