如何备份数据库数据,以使其适合新的数据库结构?

时间:2010-11-05 13:16:14

标签: mysql backup

我有一个本地服务器,我在我的项目上工作,我有另一个测试服务器,我在那里部署项目。

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

我试着这样做:

通过以下方式备份测试服务器数据:

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

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

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

获取所有数据。

问题在于:

我改变的表格如下:

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

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

id ------------------------------------------ id

name ------------------------------------ name

活性

因此,当我尝试将旧数据插入新结构时,我得到错误消息:

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

因为它正在尝试:

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

任何人都知道我能做些什么来解决这个问题?

提前谢谢

2 个答案:

答案 0 :(得分:5)

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

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

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

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

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

现在我已经备份了旧数据和结构,我可以在测试服务器数据库中插入结构:

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

最后我们需要再次插入旧数据:

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

瞧!

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

答案 1 :(得分:0)

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