我如何备份数据库数据,以适应新的数据库结构?
我有一个本地服务器,我在我的项目上工作,我有另一个测试服务器,我部署该项目。我如何备份数据库数据,以适应新的数据库结构?
案例: 我想将新的数据库结构从本地服务器传输到测试服务器,并保留已存在于测试服务器数据库中的数据。
我试着这样做:由
备份测试服务器数据:
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")
任何人有一个想法我能做些什么来解决这个问题?
预先感谢您
这是在命令行完成,但可以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
瞧!
旧的数据是回到了新的数据库结构
我建议你在本地复制数据库,更改表,使其符合所在布局,然后倾倒副本,删除它并加载在目标服务器上转储。作为替代方案,您可以切换到转储表而不是整个数据库,不转储有问题的表并使用copy/alter/dump/load这个表。
嗯,它必须是一个更简单的方法,就必须有做过.... – Ikky 2010-11-05 13:30:45
我有同样的问题,运行在MySQL中data.sql文件工作台。然而,通过命令行加载它,像冠军一样工作。 – 2013-06-19 20:14:09
酷!也为我工作! - 完全插入做了诀窍,因为我的旧数据库的列数少于新数据库的数量,所以计数是错误的。但是,此选项会将旧数据库中旧列的名称与新数据库中的旧列相匹配。剩下的列变为空,这在我的情况是好的。 – Eduardo 2015-05-29 16:01:13