1. 程式人生 > >mysqldump默認參數add-drop-table

mysqldump默認參數add-drop-table

升級表 重名 同事 rim 腳本 刪除 ble creat 模糊

mysqldump默認參數add-drop-table
原創 2014年01月28日 11:35:18 9214
接到一個同事電話,說UAT環境上的一張表被刪了,要恢復一下。原來是新項目UAT,從測試庫用mysqldump導出表結構在UAT上執行。由於只是新增幾個表結構,相關的人員也就沒去審核。由開發同事自己去執行升級表結構的腳本,剛執行完就發現業務出問題了。查看後發現UAT庫上丟了一張表。

檢查表結構變更的腳本,發現腳本中有一個刪除表的命令。原來測試庫有一張表與UAT庫中的表重名。本來這個表是不應該升級的,但導出表結構時用了模糊查詢,去查找要導出的表。所以導致多導出了一張表。mysqldump導出表結構時,默認情況下會在create語句前加add-drop-table,導致每個建表

腳本前都有droptable的命令。

 

通過mysqldump的幫助可以看到如下信息:

[sql] view plain copy
mysqldump --help|more  
--add-drop-table   Add a DROP TABLE before each create.  
(Defaults to on; use --skip-add-drop-table to disable.)  
也就是在默認情況下,mysqldump的add-drop-table是開啟的。

                 

mysqldump默認導出的表結構如下:                                          

mysqldump  -uroot -p-d  -B testdb >testdb.sql     

[sql] view plain copy
DROP TABLE IF EXISTS `test`;  
CREATE TABLE `test` (  
  `id` int(11) NOTNULL AUTO_INCREMENT,  
  `name` varchar(5)DEFAULT NULL,  
  PRIMARY KEY (`id`)  
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;  


如果mysqldump導出表結構加了--skip-add-drop-table參數,只create語句,沒有delete。

mysqldump  -uroot -p-d --skip-add-drop-table  -B testdb>testdb.sql

[sql] view plain copy
CREATE TABLE `test` (  
  `id` int(11) NOTNULL AUTO_INCREMENT,  
  `name` varchar(5)DEFAULT NULL,  
  PRIMARY KEY (`id`)  
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;  
   

總結:

1. 不要忽視“貌似簡單”的問題,很多生產事故都是因為“貌似簡單”的問題引起的。

2. 流程切忌輕易變更。你不按流程做事,出事的時候它不會給你留情。

mysqldump默認參數add-drop-table