我有一个本地服务器,我在我的项目上工作,我有另一个测试服务器,我部署项目.
案例:我想将新的数据库结构从本地服务器传输到测试服务器,并保留测试服务器数据库上已有的数据.
我试着这样做:
备份测试服务器数据:
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)
任何人都知道我能做些什么来解决这个问题?
先感谢您
这是在命令行中完成的,但可以使用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)
瞧!
旧数据又回到了新的数据库结构中
| 归档时间: |
|
| 查看次数: |
990 次 |
| 最近记录: |