【勝通 】mysql的引數變數

idba發表於2008-07-10

mysql伺服器的系統變數,mysql server system viriables,其實我更願意叫它為“系統引數”!
每一個系統變數都有一個預設值,這個預設值是在編譯mysql系統的時候確定的。對系統變數的指定,一般可以在server啟動的時候在命令列指定選項或者通過選項檔案來指定,當然,大部分的系統變數,可以在系統的執行時,通過set命令指定其值。
mysql的系統引數(系統變數)一共分為2類,全域性變數(global variables)和會話變數(session variables),它們的含義與區別如其各佔的名稱所示。session variables是在session級別的,對其的變更只會影響到本session。global variables是系統級別的,對其的變更會影響所有新session(變更時已經存在session不受影響)至下次mysql server重啟動,注意它的變更影響不能跨重啟,要想再mysql server重啟時也使用新的值,那麼就只有通過在命令列指定變數選項或者更改選項檔案來指定,而通過SET變更是達不到跨重啟的。

當系統啟動是,它會初始化所有的global變數為它們對應的預設值,這些預設值可以通過命令列指定選項或者選項檔案來改變。當一個新的連線建立後,系統也會初始化一批session變數,把它們的值初始化對應的系統變數的值。可見任何一個session變數都有一個global變數與其對應,但是未必每個global變數都有對應的session變數。
系統變數的變更,如果它的值是數字的,你可以通過簡化使用K/M/G作為單位來指定。下面就來介紹一下幾種變更系統變數的方法:
1、在mysql server啟動的時候,命令列選項中指定

mysqld --query_cache_size=16M --max_allowed_packet=1G

2、在mysql server啟動的時候,通過選項檔案中指定

[mysqld]
query_cache_size=16M
max_allowed_packet=1G

如果你想限制某個變數的最大值,那麼在系統啟動的時候通過–maximum-var_name=value方式來指定,如果假設我要限制max_allowed_packet最多設定為4G,那麼我只需要通過1、2方法指定:–maximum_allowed_packet=4G,就可以了,這樣在後面的動態改動中,都無法指定大於4G。
3、在mysql server執行的時候,通過SET命令動態指定
有很多的系統變數,都可以在mysql server執行時,通過SET命令來動態指定她的值,這樣的系統變數,我們又稱之為“動態系統變數”(Dynamic System Variables)。
我們首先來看看SET命令的語法:

SET variable_assignment [, variable_assignment] …
variable_assignment:
user_var_name = expr
| [GLOBAL | SESSION] system_var_name = expr
| [@@global. | @@session. | @@]system_var_name = expr

i):如果要修改global系統變數值,你必須要顯示指定“GLOBAL”或者“@@global.”,同時注意,你必須要有SUPER許可權。
ii):如果要修改session變數值,可以指定“SESSION”或者“@@session.”或者“@@”或者“LOCAL”或者“@@local.”,或者什麼都不使用。

有沒有辦法,將session變數值設定為對應的global變數值呢?有,採用如下方式:

SET @@session.var_name=@@global.var_name;

有沒有辦法,將session變數值設定為mysql編譯時候的預設值呢?有,採用如下方式:

SET var_name=DEFAULT;

這裡要注意的是,並不是所有的系統變數都能被設定為DEFAULT,如果你設定這些變數為DEFAULT則會返回錯誤。

上面說了如何設定變數,下面來介紹如何查詢變數。
1、使用SELECT @@global.var_name等來查詢。

mysql> select @@session.table_type,@@local.table_type,@@table_type;
+----------------------+--------------------+--------------+
| @@session.table_type | @@local.table_type | @@table_type |
+----------------------+--------------------+--------------+
| InnoDB               | InnoDB             | InnoDB       |
+----------------------+--------------------+--------------+
1 row in set (0.00 sec)

mysql> select @@global.table_type;
+---------------------+
| @@global.table_type |
+---------------------+
| InnoDB              |
+---------------------+
1 row in set (0.00 sec)

這裡要注意的是,如果你查詢session變數的值,如果沒有這個session設定了值則返回其值,如果沒有設定則其對應的global變數的值,這裡與SET的時候是不一樣滴。
2、使用SHOW VARIABLES語法:

SHOW [GLOBAL | SESSION] VARIABLES
[LIKE ‘pattern’ | WHERE expr]

http://rdc.taobao.com/blog/dba/html/186_mysql_server_system_variables.html/trackback

<!--

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1384/viewspace-374954/,如需轉載,請註明出處,否則將追究法律責任。

相關文章