2011-03-29 67 views
49

如何指示mysqldump使用插入语句中的列名进行备份?
在我来说,我没有一个正常的备份与插入SQL的产生Mysqldump:备份时创建插入列名

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-03-29 03:24:57

回答

113

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

+6

有没有一个理智的原因,为什么这不应该是mysqldump的默认行为? – paradiso 2014-06-17 22:55:58

+4

@paradiso我相信这是因为'mysqldump'主要用于备份,并且它们越小越好。 – Cacovsky 2014-07-03 18:30:45

+6

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