2010-04-20 96 views
1

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

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

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

谢谢!

回答

1

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

+0

好吧,转储数据然后更改模式在这里不起作用。实际情况是:我需要将当前4个数据库合并为1个。我将更详细地修改我的问题。 – WilliamLou 2010-04-20 21:42:07

0

当然有些工具可以帮助你实现你想要做的事情。 Mysqldump是这类工具的首要例子。只要看看这里一目了然: http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

你可以做的是:

1)你使当前数据库的转储,使用mysqldump(使用--no-data选项),只取架构

2)你改变你有倾倒的模式,添加新列

3)创建了新的架构(MySQL的< dump.sql - 只是谷歌的的MySQL备份的语法恢复更多的帮助)

4)使用mysqldump的完整,插入选项转储数据(见上面的链接)

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

这应该为你做的工作,好运气!

0

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

1

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

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

您应该计算出对“新”数据库所做的所有更改,并写出一个脚本,其中包含将旧数据库“升级”为所用新版本所需的所有SQL命令例如ALTER TABLE a ADD COLUMN x等)。在确定它正在工作之后,请转储旧的,复制它,安装它,然后应用您的更改脚本。

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),并与您同时是新的数据库。

0

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