類似於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語句設置和修改它們。