MySQL / 簡短指南

如何檢查 MySQL 配置中的語法錯誤

分享到

簡介

在設定服務時,務必先驗證您的變更,再將其套用至會受到影響的環境。對於 MySQL 資料庫等重要服務的變更而言,更是如此。

雖然許多變更需要手動檢查語意正確性 (確保配置符合您的預期),但通常您可以自動檢查語法正確性 (確保變更格式正確)。這提供了一個有限但非常有用的檢查,可以捕捉拼字錯誤、標點符號錯誤和格式錯誤的配置選項,否則這些錯誤會在嘗試整合新變更時阻止伺服器正確啟動。

在本簡短指南中,我們將介紹如何使用內建選項驗證 MySQL 伺服器設定檔。這可以幫助您驗證您執行的編輯在重新啟動服務時不會干擾 MySQL。

檢查 MySQL 伺服器設定檔

用於執行 MySQL 伺服器的 mysqld 二進制檔案包含許多您可能不常使用的選項。其中之一是 --validate-config 旗標。

--validate-config 旗標會使 mysqld 二進制檔案解析其設定檔,然後退出。您可以輸入以下內容來執行驗證檢查

mysqld --validate-config

如果未發現任何問題,程式將成功退出,且不會有任何輸出,而不會嘗試啟動 MySQL 伺服器。您可以透過檢查其退出代碼來驗證程序是否成功退出

echo $?
0

如果發現任何錯誤,MySQL 將中止程序,就像在實際啟動情境中一樣,並輸出有關問題發生的檔案和行的資訊。您可以將語法錯誤新增至您的 MySQL 設定檔以觸發此程序,請參閱輸出。例如,您可以

echo "hello there" | sudo tee --append /etc/mysql/my.cnf

現在當您再次檢查配置時,命令會輸出我們新增至配置的錯誤行

mysqld: [ERROR] Found option without preceding group in config file /etc/mysql/my.cnf at line 23.
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!

退出代碼也驗證了發生錯誤

echo $?
1

您可以使用 sed 移除我們新增至 MySQL 設定檔的行。再次驗證設定檔,以確保移除成功

sudo sed --in-place '/hello there/d' /etc/mysql/my.cnf
mysqld --validate-config

伺服器設定檔現在已驗證為語法再次正確。

結論

在本指南中,我們介紹了如何使用帶有 --validate-config 旗標的 mysqld 二進制檔案來驗證 MySQL 伺服器的設定檔是否存在錯誤。雖然這不能用於偵測所有錯誤,但它在防止錯字、不正確的配置語法和無效選項方面有很大幫助。在重新啟動伺服器之前始終使用 --validate-config 旗標是個好主意,以確保您的新配置在停止資料庫服務之前是有效的。

關於作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以來一直撰寫關於資料庫、Linux、基礎設施和開發人員工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不必以第三人稱寫作,這對所有相關方來說都是一種解脫。