1. 程式人生 > >Mysql系列(二)—— 系統變數與狀態變數

Mysql系列(二)—— 系統變數與狀態變數

系統變數的分類

  • GLOBAL:全域性變數,影響伺服器的整體操作。
  • SESSION:會話變數,影響某個客戶端連線的操作。(注:SESSION有個別名叫LOCAL)

注:

  1. 在伺服器啟動時,會將每個全域性變數初始化為其預設值(可以通過命令列或選項檔案中指定的選項更改這些預設值)。然後伺服器還為每個連線的客戶端維護一組會話變數,客戶端的會話變數在連線時使用相應全域性變數的當前值初始化。
  2. 並不是所有系統變數都具有GLOBAL和SESSION的作用範圍。有一些系統變數只具有GLOBAL作用範圍,比方說max_connections,表示伺服器程式支援同時最多有多少個客戶端程式進行連線。有一些系統變數只具有SESSION作用範圍,比如insert_id,表示在對某個包含AUTO_INCREMENT列的表進行插入時,該列初始的值。有一些系統變數的值既具有GLOBAL作用範圍,也具有SESSION作用範圍,比如我們default_storage_engine(儲存引擎),而且其實大部分的系統變數都是這樣的。

如何檢視系統變數

命令:SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式](不寫GLOBAL或SESSION等同於SESSION);

如何設定系統變數

  • 通過啟動選項設定,如命令:mysqld --default-storage-engine=MyISAM --max-connections=10,就是配置預設儲存引擎為MyISAM,最大連線數為10。

注:在類Unix系統中,啟動指令碼有mysqld、mysqld_safe、mysql.server,其中mysqld代表直接啟動mysql伺服器程式,mysqld_safe會在此基礎上啟動一個監控程序,它會將伺服器程式的出錯資訊和其他診斷資訊重定向到某個檔案中,產生出錯日誌,mysql.server也可以啟動Mysql,使用命令mysql.server start

,效果跟mysqld_safe一樣,mysqld_multi是用於單機多個mysql服務端程序的啟動,停止指令碼。

每個MySQL程式都有許多不同的選項。例如,使用mysql --help可以看到mysql程式支援的啟動選項,mysqld_safe --help可以看到mysqld_safe程式支援的啟動選項。檢視mysqld支援的啟動選項有些特別,需要使用mysqld --verbose --help。

  • 在my.cnf配置檔案中新增啟動選項

配置檔案形如:

[server]
(具體的啟動選項...)

[mysqld]
(具體的啟動選項...)

[mysqld_safe]
(具體的啟動選項...)

[client]
(具體的啟動選項...)

[mysql]
(具體的啟動選項...)

[mysqladmin]
(具體的啟動選項...)

像這個配置檔案裡就定義了許多個組,組名分別是server、mysqld、mysqld_safe、client、mysql、mysqladmin。每個組下邊可以定義若干個啟動選項。

如在server組下面配置:

[server]
default-storage-engine=MyISAM
max-connections=10

表示預設儲存引擎為MyISAM,最大連線數為10。

  • 伺服器程式執行過程中設定

命令: SET [GLOBAL|SESSION] 系統變數名 = 值 或 SET [@@(GLOBAL|SESSION).]系統變數名 = 值(不寫GLOBAL或SESSION等同於SESSION);

例如:

語句一:SET GLOBAL default_storage_engine = MyISAM;

語句二:SET @@GLOBAL.default_storage_engine = MyISAM;

注:如果某個客戶端改變了某個系統變數在GLOBAL作用範圍的值,並不會影響該系統變數在當前已經連線的客戶端作用範圍為SESSION的值,只會影響後續連入的客戶端在作用範圍為SESSION的值。

二、狀態變數

什麼是狀態變數

MySQL伺服器程式中維護了好多關於程式執行狀態的變數,它們被稱為狀態變數,由於狀態變數是用來顯示伺服器程式執行狀況的,所以它們的值只能由伺服器程式自己來設定,我們程式設計師是不能設定的。與系統變數類似,狀態變數也有GLOBAL和SESSION兩個作用範圍的。比方說Threads_connected表示當前有多少客戶端與伺服器建立了連線,Handler_update表示已經更新了多少行記錄。

檢視狀態變數命令

SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式](不寫GLOBAL或SES