大规模MySQL更改为活动站点

时间:2010-06-25 13:36:10

标签: mysql deployment

这里只是一些指示。 我正在对网站进行相当广泛的修改,包括MySQL数据库。

我的计划是在我的开发服务器上执行所有操作,导出数据库的新MySQL结构并将其导入客户端服务器。

基本上我需要知道,执行仅导入的结构不会覆盖/删除现有数据。我没有更改数据类型或字段长度。

3 个答案:

答案 0 :(得分:1)

根据我的经验,当您导出数据库时(例如通过phpMyAdmin),创建的部分SQL脚本包含“DROP TABLE IF EXISTS'table_name';”在做“CREATE TABLE'table_name'...;”之前建立新表。

我的猜测是你想做什么!当然使用开发系统来改变结构以使一切正确,但是然后四处寻找数据库同步例程,在那里你可以提供旧结构,新结构,软件将创建适当的“ALTER TABLE'table_name' ......“;用于进行所需更改的脚本。

然后,您应该在实时数据库上执行它们之前检查这些更改文件,当然 BACKUP 实时数据库,并确保您能够完全从在开始任何改动之前进行备份!

答案 1 :(得分:0)

我必须经常这样做,而且总是这样:

  1. 备份实时数据库,并附上数据。
  2. 仅备份实时数据库架构。
  3. 计算旧(实时)架构与新(开发)架构之间的差异。
  4. 创建从旧架构升级到新架构所需的所有“ALTER TABLE ...”DDL语句。请记住,如果重命名字段,您可能无法重命名它 - 您需要创建新字段,从旧字段中复制数据,然后删除旧字段。
  5. 如果您更改了表之间的关系,则可能需要先删除索引和外键关系,然后再将其添加回来。
  6. 您需要根据默认值(如果有)填充任何新字段。
  7. 一旦你完成了所有工作,你就需要将它们组合成一个大型脚本,然后在实时数据库的副本上运行它。
  8. 转储架构并将其与所需的新架构进行比较 - 如果它们不匹配,请返回步骤3并重复。
  9. 转储数据并将其与预期的更改进行比较 - 再次,如果它们不匹配,请返回步骤3并重复。
  10. 在此过程中,您将学习更多关于SQL DDL / DML的知识,而不是您曾经想过的。 (对于一个项目,我们从自然键切换到50多个表的UUID键,我最终编写程序来生成所有DDL / DML。)

    祝你好运,并经常备份。

答案 2 :(得分:0)

我建议为您在开发服务器上执行的每个更改准备一个sql脚本,这样您就可以在开发时重现它。您不应该达到需要计算数据库结构之间差异的程度

这就是我的工作方式,所有更改都反映在sql脚本中,如果需要,我可以重建运行所有这些文件的数据库的历史记录。

在“staging”mysql服务器上测试最终版本。在另一台机器上制作生产服务器的副本并测试您的脚本以确保一切正常。

当然,初步数据库备份是必须的。