類似於Oracle的引數檔案,MySQL的選項檔案(如my.cnf)用於配置MySQL伺服器,但和Oracle叫法不一樣,在MySQL裡, 官方叫變數(Varialbes),但其實叫引數也是可以的,只要明白這倆是同一個東西就可以了。
MySQL的變數分為以下兩種:
1)系統變數:配置MySQL伺服器的執行環境,可以用show variables檢視
2)狀態變數:監控MySQL伺服器的執行狀態,可以用show status檢視
系統變數
系統變數按其作用域的不同可以分為以下兩種:
1)分為全域性(GLOBAL)級:對整個MySQL伺服器有效
2)會話(SESSION或LOCAL)級:隻影響當前會話
有些變數同時擁有以上兩個級別,MySQL將在建立連線時用全域性級變數初始化會話級變數,但一旦連線建立之後,全域性級變數的改變不會影響到會話級變數。
檢視系統變數的值
可以通過show vairables語句檢視系統變數的值:
[sql]
mysql> show variables like 'log%';
mysql> show variables where Variable_name like 'log%' and value='ON';
注意:show variables優先顯示會話級變數的值,如果這個值不存在,則顯示全域性級變數的值,當然你也可以加上GLOBAL或SESSION關鍵字區別:
[sql]
show global variables;
show session/local variables;
在寫一些儲存過程時,可能需要引用系統變數的值,可以使用如下方法:
[sql]
@@GLOBAL.var_name
@@SESSION.var_name 或
@@LOCAL.var_name
如果在變數名前沒有級別限定符,將優先顯示會話級的值。
最後一種檢視變數值的方法是從INFORMATION_SCHEMA資料庫裡的GLOBAL_VARIABLES和SESSION_VARIABLES表獲得。
設定和修改系統變數的值
在MySQL伺服器啟動時,有以下兩種方法設定系統變數的值:
1)命令列引數,如:mysqld --max_connections=200
2)選項檔案(my.cnf)
在MySQL伺服器啟動後,如果需要修改系統變數的值,可以通過SET語句:
[plain]
SET GLOBAL var_name = value;
SET @@GLOBAL.var_name = value;
SET SESSION var_name = value;
SET @@SESSION.var_name = value;
如果在變數名前沒有級別限定符,表示修改會話級變數。
注意:和啟動時不一樣的是,在執行時設定的變數不允許使用字尾字母'K'、‘M'等,但可以用表示式來達到相同的效果,如:
[sql]
SET GLOBAL read_buffer_size = 2*1024*1024
這裡一個容易把人搞蒙的地方是如果查詢時使用的是show variables的話,會發現設定好像並沒有生效,這是因為單純使用show variables的話就等同於使用的是show session variables,查詢的是會話變數,只有使用show global variables,查詢的才是全域性變數。
網路上很多人都抱怨說他們set global之後使用show variables查詢沒有發現改變,原因就在於混淆了會話變數和全域性變數,如果僅僅想修改會話變數的話,可以使用類似set wait_timeout=10;或者set session wait_timeout=10;這樣的語法。
網路上很多人都抱怨說他們set global之後使用show variables查詢沒有發現改變,原因就在於混淆了會話變數和全域性變數,如果僅僅想修改會話變數的話,可以使用類似set wait_timeout=10;或者set session wait_timeout=10;這樣的語法。
狀態變數
狀態變數可以使我們及時瞭解MySQL伺服器的執行狀況,可以使用show status語句檢視。
狀態變數和相同變數類似,也分為全域性級和會話級,show status也支援like匹配查詢,比較大的不同是狀態變數只能由MySQL伺服器本身設定和修改,對於使用者來說是隻讀的,不可以通過SET語句設定和修改它們。