Mysqldump:备份时为插入创建列名


69

如何指示mysqldump在插入语句中使用列名进行备份?
在我的情况下,我没有进行正常的备份,而插入sql导致

LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` 
INSERT INTO `users` VALUES (1

结构体。

现在,我继续从用户的架构中删除一列。此后,当我运行备用sql时,出现列号不匹配错误

要解决这个问题,我该如何指示mysqldump也写列名?这就是我现在的做法

mysqldump --host=${dbserver} --user=${dbusername} --password=${dbpassword} \
          --no-create-db --no-create-info --extended-insert --single-transaction \
          --compress tablename  

从广义上讲,管理这些架构更改的最佳实践是什么?


1
明确指定的字段将如何为您提供帮助?删除一列后,甚至具有指定字段的查询也将不正确。
zerkms 2011年

@zerkms仅在向表添加字段时会有所帮助。如果已删除字段,则应将其完全删除
Kolob Canyon'Apr

Answers:


178

使用--complete-insert在mysqldump命令PARAMS


8
有没有理智的理由为什么这不是mysqldump的默认行为?
paradiso 2014年

8
@paradiso我相信这是因为mysqldump备份大量使用了它,并且尽可能地减小它们是一件好事。
Cacovsky

8
@paradiso还请注意,默认情况下,mysqldump会转储结构和数据,从而使列名信息无用。当您将值加载到结构可能与从中提取数据的表不同的表中时,指定列名很有用。
Ninj 2015年

@paradiso文件越小越好。不包括列名,将很大程度上取决于数据库的复杂性,从而降低文件的大小
Kolob Canyon

但是在某些情况下,例如我的这种情况可以挽救生命,我的本地数据库每天都在发生变化,但不会立即转到实时服务器,因此当我要更新实时服务器数据库时,那对我来说无疑是一种生命节省,否则,我将不得不跟踪已添加到本地shema的所有列名称,然后为每个表手动添加这些列以及添加列。但是通过这个简单的技巧,我可以节省很多时间和头痛。
Nirob
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.