2011-03-29 80 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