如何使用以下方案更新数据库?
我在测试环境(server1)中有一个数据库,我必须用开发环境(server2)中的那个来更新它,但我只想在结构中进行更改,而不删除已经存储的数据,我已经检查过了那:
我不会更新现有列的结构,我只会添加新的,不存在的数据会用 adefault
或 put as放置null
。
那么,如何进行开发服务器的比较并获得与生产服务器的差异并带来我必须在生产服务器中进行的更改?
如何使用以下方案更新数据库?
我在测试环境(server1)中有一个数据库,我必须用开发环境(server2)中的那个来更新它,但我只想在结构中进行更改,而不删除已经存储的数据,我已经检查过了那:
我不会更新现有列的结构,我只会添加新的,不存在的数据会用 adefault
或 put as放置null
。
那么,如何进行开发服务器的比较并获得与生产服务器的差异并带来我必须在生产服务器中进行的更改?
如果您不使用Workbench,我建议您使用它,它具有同步模型的功能。
1.逆向工程
有必要首先对您的开发数据库进行逆向工程,使用该工具非常简单。这会按设计检索您的数据库。
设计可以存储在文件中
2.模型同步
然后您可以从 Workbench 连接到您的服务器并执行同步。
稍后,该程序将向您展示导致模型和生产数据库之间存在差异的脚本。
有一套工具叫做
MySQL Utilities
,我们可以在其中找到mysqldiff
。假设以下对象定义:
产品主机:
开发主机
要生成一组
SQL
将 的定义转换为prod_db.table
的语句dev_db.table
,请使用以下命令:--
尝试对远程共享或专用服务器运行此命令时的常见错误如下:
这是因为您正在
mysqldiff
尝试运行SELECT * FROM mysql.proc;
,并且该命令对除帐户之外的所有用户都被阻止root
。此外,有必要验证用户root
是否具有远程访问权限(例如:)GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD ...
。如果您使用 Symfony + 教义,则有一个称为教义迁移捆绑t 的包。这有一个 Diff 命令,可以获取数据库和您定义的模型之间的差异,从而创建一个 PHP 迁移文件。
通常,如果您在应用程序中使用 orm 来定义架构,通常会有一个库根据您使用的环境(开发、生产、测试...)来区分架构