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

Ikk*_*kky 2 mysql backup

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

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

我试着这样做:

备份测试服务器数据:

mysqldump –u USER –p –no-create-info DATABASE < OUTPUTFILE.sql
Run Code Online (Sandbox Code Playgroud)

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

mysql –u USER –p –h localhost DATABASE < OUTPUTFILE.sql
Run Code Online (Sandbox Code Playgroud)

获取所有数据.

问题是这样的:

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

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

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

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

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

活性

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

ERROR 1136 (21S01) at line 17: Column count doesn't match value count at row 1
Run Code Online (Sandbox Code Playgroud)

因为它正在尝试:

INSERT INTO `TABLENAME` VALUES (1,"test")
Run Code Online (Sandbox Code Playgroud)

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

先感谢您

Ikk*_*kky 5

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

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

mysqldump –u USER –p PASSWORD --no-create-info --complete-insert  DATABASE > BACKUPFILEData.sql
Run Code Online (Sandbox Code Playgroud)

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

mysqldump –u USER –p PASSWORD --no-data DATABASE > BACKUPFILEStructure.sql
Run Code Online (Sandbox Code Playgroud)

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

mysql –u USER –p Password –h localhost DATABASE < BACKUPFILEStructure.sql
Run Code Online (Sandbox Code Playgroud)

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

mysql –u USER –p Password –h localhost DATABASE < BACKUPFILEData.sql
Run Code Online (Sandbox Code Playgroud)

瞧!

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