2017-04-19 31 views
0

裏面的my.cnf我指定:mysqldump的工具不包括作爲SQL_MODE在my.cnf輸出

sql-mode = STRICT_ALL_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_VALUE_ON_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ERROR_FOR_DIVISION_BY_ZERO,ONLY_FULL_GROUP_BY 

然後我重新啓動MySQL服務器:

sudo systemctl restart mysql 

然後我檢查的價值SQL_MODE變量:

show variables like '%sql_mode%'; 
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| Variable_name | Value                                       | 
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| sql_mode  | STRICT_ALL_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_VALUE_ON_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ERROR_FOR_DIVISION_BY_ZERO,ONLY_FULL_GROUP_BY | 
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ 

然後我甩MyDatabase的與命令:

mysqldump --user root --password=root --host=localhost --add-drop-table --add-locks --allow-keywords --comments --complete-insert --create-options --disable-keys --extended-insert --lock-tables --quick --quote-names --routines --set-charset --dump-date --tz-utc --verbose --databases mydatabase 

然後我看到輸出:

... omitted 
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 
... omitted 

預期輸出:

... omitted 
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='STRICT_ALL_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_VALUE_ON_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ERROR_FOR_DIVISION_BY_ZERO,ONLY_FULL_GROUP_BY' */; 
... omitted 

有什麼不對?

回答

1

這裏沒有錯。該行與轉儲文件開頭的其他行類似,在導入期間臨時將sql mode更改爲具有受控環境。這可確保您的服務器設置(例如,character settime zonesql mode)不會影響數據的添加方式。將會有一個

/*!40101 SET [email protected]_SQL_MODE*/; 

在轉儲結束時重置導入完成後的模式(以及其他設置)。服務器配置不是你的轉儲文件的一部分,你必須單獨備份它。

這是默認行爲,請參閱文檔NO_AUTO_VALUE_ON_ZERO

NO_AUTO_VALUE_ON_ZERO影響AUTO_INCREMENT列的處理。通常,通過向其中插入NULL或0來爲列生成下一個序列號。 NO_AUTO_VALUE_ON_ZERO將此行爲抑制爲0,以便只有NULL纔會生成下一個序列號。

如果0已存儲在表的AUTO_INCREMENT列中,此模式可能很有用。 [...]例如,如果您使用mysqldump轉儲表並重新加載它,MySQL通常會在遇到0值時生成新的序列號,從而生成一個內容與轉儲內容不同的表。 [...] mysqldump現在會在其輸出中自動包含一條使NO_AUTO_VALUE_ON_ZERO能夠避免此問題的語句。

+0

嗨。謝謝您的回答。據我所知,mysqldump的強制設置SQL_MODE = NO_AUTO_VALUE_ON_ZERO有一個控制器導入環境,如你所說。 – yivo