我在开发过程中对数据库模式进行了许多更改,包括添加新表和对其他表进行更改。有没有一种简单的方法可以将此架构传输到服务器、构建新表并重建其他表,而不必重复我花费大约 15 个小时实现的所有更改?
答案1
当然可以,但是如果您提前计划一下,这种事情会更容易做到。
变化
当您创建数据库迁移(想想架构更改)时,您需要创建一个sql
封装更改的语句。如果您要向其中包含数据的现有表添加一列,您应该能够创建sql
描述更改的语句。例如:
ALTER TABLE `myTable`.`local`
ADD COLUMN `last_update` timestamp NULL AFTER `location_name`,
...;
如果您保留一个sql
包含跟踪每个更改的语句的文件,然后在生产表上以正确的顺序运行这些语句,那么生活应该会很好。如果您正在跟踪此类内容,您甚至可以将此类内容添加到版本控制中。这可能是在没有已经具有此支持的框架的帮助下执行此操作的最佳方法。
新表
新东西更容易。继续处理它,直到弄清楚所有索引和数据类型,然后将架构转储到文件中.sql
。在您的生产服务器上运行此命令,该表应该在那里。
mysqldump -d -h localhost -u root -pmypassword databasename > dumpfile.sql
应该-d
只转储模式而不是数据。
艰难的道路
如果您没有保留增量更改的运行列表或进行了架构破坏性更改,那么它会有点困难。您可能必须手动比较生产表和开发表上的架构,并手动创建迁移。我假设您没有对表进行太大的更改,以致现有数据将不再适合字段定义。
您可能只需从生产表中转储架构,将其导入到开发计算机上的另一个数据库中,然后在那里创建迁移。但请记住,这可能会比设计新模式更快,因为您只需创建从旧模式到新模式的迁移。