我有一个本地服务器,我在我的项目上工作,我有另一个测试服务器,我在那里部署项目。
案例: 我想将新的数据库结构从本地服务器传输到测试服务器,并保留测试服务器数据库上已有的数据。
我试着这样做:
通过以下方式备份测试服务器数据:
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")
任何人都知道我能做些什么来解决这个问题?
提前谢谢
答案 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。