1. 程式人生 > 其它 >【MySQL學習筆記(二)】之啟動選項,系統變數,狀態變數

【MySQL學習筆記(二)】之啟動選項,系統變數,狀態變數

技術標籤:MYSQLmysql資料庫

本文章由公號【開發小鴿】釋出!歡迎關注!!!


老規矩–妹妹鎮樓:

一. MySQL啟動選項

(一) 概述

MySQL的伺服器程式和客戶端程式有很多設定項,如允許同時連入的客戶端數量,客戶端和伺服器的通訊方式等等,都可以通過啟動選項來設定,可以在命令列中指定,也可以在配置檔案中指定,命令列的優先順序大於配置檔案。

(二) 命令列

在命令列中指定啟動選項時需要在選項名之前加上–字首,如果選項名是由多個單詞構成的,可以由短劃線-連線,或者下劃線_連線。如禁止TCP/IP:

mysqld –skip-networking

指定儲存引擎為MyISAM:

mysqld –default-storage-engine=MyISAM

還有一些啟動選項具有短形式,即長度很短的字母,如-h, -u等等。

(三) 配置檔案

在命令列中設定的啟動選項只對當次啟動有效,如果要永久生效,需要在配置檔案中配置啟動選項,每次啟動伺服器時都從這個檔案中載入。


1. 配置檔案的路徑

MySQL程式啟動時會在多個路徑下尋找配置檔案,這些路徑有個是固定的,有的是在命令列中指定。不同系統的路徑都是不同的,但是多個路徑的優先順序的邏輯是相似的,MySQL程式每次啟動時按照系統->伺服器->客戶端的優先順序順序來載入,越靠後的配置檔案優先順序越大。命令列還能夠通過 defaults-extra-file 選項來指定額外載入的配置檔案。


2. 配置檔案的內容

配置檔案中的啟動選項被劃分為若干個組,每個組有一個組名,用中括號[]擴起來,每個組下面可以定義若干個啟動選項,如下所示:

[server]
option1
optino2 = value2

不同的選項組是個不同的程式使用的,如果選項組名稱與程式名稱相同,那麼組中的選項就會專用於該程式,不過也有特例,如[server]組下面的啟動選項將用於所有的伺服器程式,[client]組下面的啟動選項將用於所有的客戶端程式,還有mysqld_safe和mysql.server這兩個程式會在啟動時讀取[mysqld]選項組中的內容。


3. 特定MySQL版本的專用選項組

我們可以在選項組的名稱後面加上特定的MySQL版本號,如:

[mysqld-5.7]

含義和[mysqld]一樣,但是隻有版本號為5.7的mysqld程式能夠使用這個選項組中的選項。


4. 選項組的優先順序

如果在不同的選項組中出現了同樣的啟動選項,那麼將以最後一個出現的組中的啟動選項為準。


5. default-file

在命令列中新增default-file 選項,表示只在該路徑下搜尋配置檔案,不會到預設的路徑搜尋,而default-extra-file 選項表示在預設的搜尋路徑之外的額外搜尋路徑。


二. 系統變數

(一) 概述

MySQL伺服器程式在執行過程中會用到許多影響程式行為的變數,稱為系統變數,如允許同時連入的客戶端數量用系統變數max_connections表示,嚴格地說,MySQL伺服器允許max_connections+1個客戶端連線,多出來的一個是root使用者。每一個系統變數都有一個預設值,我們可以在命令列或配置檔案中設定,同時大多數系統變數的值也可以在程式執行過程中修改,無需重啟伺服器。

(二) 檢視系統變數

使用下面的命令檢視MySQL伺服器程式支援的系統變數以及當前值:

SHOW VARIABLES [like 匹配模式];

like表示式用於指定過濾條件,如檢視當前的儲存引擎:

SHOW VARIABLES like “default_storage_engine”;

也可以採用模糊查詢的方式:

SHOW VARIABLES like “default%;

(三) 設定系統變數

1. 通過啟動選項設定

大部分系統變數都可以通過啟動伺服器時傳送啟動選項的方式設定,通過命令列或者配置檔案:

mysqld --default-storage-engine=MyISAM
[server]
default-storage-engine=MyISAM

2. 執行過程中設定

對於大部分系統變數,可以在伺服器程式執行過程中動態修改,不過系統變數有作用範圍之分,系統變數的作用範圍分為全域性範圍和會話範圍。全域性範圍是影響伺服器的全面變數,而會話範圍是影響某個客戶端連線的會話變數。伺服器在啟動時,會將每個全域性變數設為預設值,伺服器還為每個連線的客戶端維護一組會話變數,客戶端的會話變數在連線時使用相應全域性變數的當前值進行初始化。很顯然,通過啟動選項設定的系統變數的系統變數的作用範圍都是GLOBAL的,因為伺服器啟動時客戶端還沒有連線。

在伺服器執行期間通過客戶端程式設定系統變數的語法:

SET [ GLOBAL|SESSION] 系統變數名 =;
SET [@@(GLOBAL|SESSION).]系統變數名 =;

設定的語法預設作用範圍是SESSION,如果使用SESSION修飾符,表示針對當前連線有效的系統變數值。

3. 注意事項

並不是所有的系統變數都有GLOBAL 和 SESSION 的作用範圍,有一些系統變數只有GLOBAL,如max_connections;有一些變數只有SESSION,如insert_id,表示對某個AUTO_INCREMENT列的表進行插入時,該列的初始值。

有的系統變數是隻讀的,如version表示mysql的版本資訊。

(四) 啟動選項和系統變數的區別

大部分系統變數都可以當做啟動選項傳入;
有些啟動選項也不是系統變數,如defaults-file


三. 狀態變數

MySQL伺服器程式維護了一些關於程式執行狀態的變數,稱為狀態變數,如Threads_connected,表示當前連線的客戶端數量。這些狀態變數只能由伺服器程式自己設定,不能認為控制。與系統變數類似,狀態變數也有GLOBAL 和 SESSION兩個作用範圍,檢視狀態變數的語句可以這樣寫:

SHOW [GLOBAL|SESSION] STATUS [like 匹配模式];
show status like “thread%;