关于MySQL数据库迁移的问题

时间:2010-04-20 21:11:14

标签: mysql database migration

如果我在实时服务器上有一个包含多个表的MySQL数据库,现在我想将此数据库迁移到另一台服务器。当然,我在这里的迁移涉及一些数据库表,例如:向几个表添加一些新列,添加一些新表等。    现在,我能想到的唯一方法是使用一些php / python(我知道的两个脚本)脚本,连接两个数据库,从旧数据库转储数据,然后写入新数据库。但是,这种方法根本没有效率。例如:在旧数据库中,表A有28列;在新数据库中,表A有29列,但额外列对于所有旧行都具有默认值0。我的脚本仍然需要逐行转储数据并将每一行插入新数据库。

使用MySQLDump等..将无法正常工作。这是细节。例如:我有四个旧数据库,我可以将它们命名为'DB_a','DB_b','DB_c','DB_d'。现在旧表A有28列,我想将表A中的每一行添加到新数据库中,新的列ID为“DB_x”(x表示它来自哪个数据库)。如果我无法通过行的内容区分数据库ID,我可以识别它们的唯一方法是通过一些用户输入参数。

是否有自己编写脚本的工具或更好的方法?在这里,我不需要担心多线程写入问题等等。我的意思是旧的数据库会被关闭(不公开使用等等,仅用于升级)一段时间。

谢谢!

6 个答案:

答案 0 :(得分:1)

我不完全了解你的列的情况(迁移后添加任何新列不是更明智吗?),但是跨服务器复制数据库的最快方法之一是{{3} }。它只能复制myISAM,并且有许多其他要求,但速度非常快,因为它完全跳过了create dump / import dump步骤。

答案 1 :(得分:1)

通常,当您将数据库迁移到新服务器时,由于您现在正在运行的原因,您不会同时应用一堆架构更改。

MySQL有一个名为 mysqldump 的转储工具,可用于轻松获取数据库的快照/备份。然后可以将快照复制到新服务器并进行安装。

您应该弄清楚对“新”数据库所做的所有更改,并写出将旧数据库“升级”到您正在使用的新版本所需的所有SQL命令的脚本(例如ALTER TABLE a ADD COLUMN x等)。确定它正常工作后,转储旧的转储,复制,安装,然后应用更改脚本。

答案 2 :(得分:0)

当然,有些工具可以帮助您实现您想要做的事情。 Mysqldump 是此类工具的首要示例。请稍等一下: http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

你能做的是:

1)使用mysqldump(使用--no-data选项)转储当前数据库,仅获取模式

2)您更改了已转储的架构,添加了新列

3)您创建新架构(mysql< dump.sql - 只需google进行 mysql备份恢复以获取有关语法的更多帮助)

4)使用mysqldump complete-insert选项转储数据(参见上面的链接)

5)使用mysql<导入数据data.sql

这应该为你做好,祝你好运!

答案 3 :(得分:0)

使用mysqldump转储数据,然后echo output.txt > msyql。现在旧数据在新服务器上。必要时操纵。

答案 4 :(得分:0)

可以在实时数据库中添加额外的行:

ALTER TABLE [table-name] ADD [row-name] MEDIUMINT(8) default 0;

MySql会将所有现有行默认为默认值。

所以我会这样做:

  1. 使用MySql dump命令复制您的旧数据库。

  2. 针对您的新数据库运行生成的SQL文件,现在您有一个完整的副本。

  3. 编写一个migration.sql文件,该文件将使用修改表命令修改您的数据库,并为复杂的转换编写一些临时的MySql过程。

  4. 测试你的脚本(失败时,转到(2))。

  5. 如果一切正常,请转到(1)并继续使用您的新数据库。

答案 5 :(得分:0)

这些都是有效的方法,但我相信你想编写一个sql语句来编写支持你所拥有的新列的其他插入语句。