Mysql系列(二)—— 系統變數與狀態變數
系統變數的分類
- GLOBAL:全域性變數,影響伺服器的整體操作。
- SESSION:會話變數,影響某個客戶端連線的操作。(注:SESSION有個別名叫LOCAL)
注:
- 在伺服器啟動時,會將每個全域性變數初始化為其預設值(可以通過命令列或選項檔案中指定的選項更改這些預設值)。然後伺服器還為每個連線的客戶端維護一組會話變數,客戶端的會話變數在連線時使用相應全域性變數的當前值初始化。
- 並不是所有系統變數都具有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
每個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