2010-11-05 110 views
2

我有一个本地服务器,我在我的项目上工作,我有另一个测试服务器,我部署该项目。我如何备份数据库数据,以适应新的数据库结构?

案例: 我想将新的数据库结构从本地服务器传输到测试服务器,并保留已存在于测试服务器数据库中的数据。

我试着这样做:由

备份测试服务器数据:

mysqldump –u USER –p –no-create-info DATABASE < OUTPUTFILE.sql 

那么新结构传输到测试服务器,然后:

mysql –u USER –p –h localhost DATABASE < OUTPUTFILE.sql 

得到所有的数据都回来了。

问题是这样的:

我已经改变看起来像这样的表:

(本地)--------------------- ----------(测试服务器)

TABLENAME --------------------- TABLENAME

ID ---- -------------------------------------- id

name ------ ------------------------------名称

活跃

所以,当我尝试将旧的数据插入到新的结构,我得到的errormessage的:

ERROR 1136 (21S01) at line 17: Column count doesn't match value count at row 1 

,因为它试图:

INSERT INTO `TABLENAME` VALUES (1,"test") 

任何人有一个想法我能做些什么来解决这个问题?

预先感谢您

回答

5

这是在命令行完成,但可以ofcourse使用来完成的mysql:

解决的办法是先备份测试服务器上的数据,以便它创建完整的插入语句:

mysqldump –u USER –p PASSWORD --no-create-info --complete-insert DATABASE > BACKUPFILEData.sql 

然后我备份的本地数据库的新结构:

mysqldump –u USER –p PASSWORD --no-data DATABASE > BACKUPFILEStructure.sql 

现在牛逼帽子我有旧数据的备份和结构,我可以插入在测试服务器databbase结构:

mysql –u USER –p Password –h localhost DATABASE < BACKUPFILEStructure.sql 

最后,我们需要重新插入旧数据:

mysql –u USER –p Password –h localhost DATABASE < BACKUPFILEData.sql 

瞧!

旧的数据是回到了新的数据库结构

+0

我有同样的问题,运行在MySQL中data.sql文件工作台。然而,通过命令行加载它,像冠军一样工作。 – 2013-06-19 20:14:09

+0

酷!也为我工作! - 完全插入做了诀窍,因为我的旧数据库的列数少于新数据库的数量,所以计数是错误的。但是,此选项会将旧数据库中旧列的名称与新数据库中的旧列相匹配。剩下的列变为空,这在我的情况是好的。 – Eduardo 2015-05-29 16:01:13

0

我建议你在本地复制数据库,更改表,使其符合所在布局,然后倾倒副本,删除它并加载在目标服务器上转储。作为替代方案,您可以切换到转储表而不是整个数据库,不转储有问题的表并使用copy/alter/dump/load这个表。

+0

嗯,它必须是一个更简单的方法,就必须有做过.... – Ikky 2010-11-05 13:30:45