MySQL 系統變數(system variables),mysqlvariables
MySQL系統變數(system variables)實際上是一些系統參數,用於初始化或設定資料庫對系統資源的佔用,檔案存放位置等等。這些個系統變數可以分為全域以及會話層級層面來修改,有些也可以進行動態修改。本文主要介紹了系統變數的一些概念以及如何設定查看這些系統變數。
1、什麼是系統變數
系統變數實際上用於控制資料庫的一些行為和方式的參數。比如我們啟動資料庫的時候設定多大的記憶體,使用什麼樣的隔離等級,記錄檔的大小,存放位置等等一系列的東東。當然我們資料庫系統啟動後,有些系統變數(參數)也可以通過動態修改來及時調整資料庫。這個系統變數在Oracle裡邊是通過pfile或者spfile來控制,稱之為參數,是一個意思。
系統變數取值:都有預設值,可以在啟動時及啟動後修改。
設定範圍:全域與回話層級,全域層級需要super許可權,會話層級隻影響自身會話。
設定方法:啟動前可以通過設定檔以及啟動選項來修改,啟動後通過SET子句來設定。
生效周期:全域變數全域可見,但隻影響在更改後串連的從該全域變數初始化相應會話變數的用戶端。當前會話及已登入的會話不受影響。
對於有關涉及到size的設定值,可以使用尾碼K、M或G分別表示KB、MB或gigabytes,不區分大小寫。
2、set設定系統變數的用法
--當前的版本mysql> show variables like 'version%';+-------------------------+------------------------------+| Variable_name | Value |+-------------------------+------------------------------+| version | 5.5.37 || version_comment | MySQL Community Server (GPL) || version_compile_machine | x86_64 || version_compile_os | Linux |+-------------------------+------------------------------+--擷取有關set的協助mysql> help setName: 'SET'Description:Syntax:SET variable_assignment [, variable_assignment] ...variable_assignment: user_var_name = expr | [GLOBAL | SESSION] system_var_name = expr | [@@global. | @@session. | @@]system_var_name = expr--查看全部系統變數root@localhost[tempdb]> show variables; --該命令會輸出當前系統全部系統變數--查看sort_buffermysql> show variables like 'sort_buffer%';+------------------+---------+| Variable_name | Value |+------------------+---------+| sort_buffer_size | 2097152 |+------------------+---------+--在省略global與session關鍵字的情形下為session層級mysql> set sort_buffer_size=1024*1024*4; --設定為4Mmysql> show variables like 'sort_buffer%';+------------------+---------+| Variable_name | Value |+------------------+---------+| sort_buffer_size | 4194304 |+------------------+---------+--恢複到預設值mysql> set sort_buffer_size=default;mysql> show variables like 'sort_buffer%';+------------------+---------+| Variable_name | Value |+------------------+---------+| sort_buffer_size | 2097152 |+------------------+---------+
3、全域與會話層級設定樣本
--如何設定隔離等級mysql> help isolationName: 'ISOLATION'Description:Syntax:SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL { REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE } --下面我們通過示範隔離等級來設定全域與session層級變數--查看當前session層級的隔離方式root@localhost[(none)]> show variables like '%isolation%';+---------------+-----------------+| Variable_name | Value |+---------------+-----------------+| tx_isolation | REPEATABLE-READ |+---------------+-----------------+--修改當前session層級的隔離方式為READ-COMMITTEDroot@localhost[(none)]> set session transaction isolation level read committed;root@localhost[(none)]> show variables like '%isolation%';+---------------+----------------+| Variable_name | Value |+---------------+----------------+| tx_isolation | READ-COMMITTED |+---------------+----------------+--另外的一個session , 登入使用者為fred--當前sessioin層級繼承全域隔離等級為REPEATABLE-READfred@localhost[(none)]> show variables like '%isolation%';+---------------+-----------------+| Variable_name | Value |+---------------+-----------------+| tx_isolation | REPEATABLE-READ |+---------------+-----------------+--在root會話中設定全域隔離等級為serializableroot@localhost[(none)]> set global transaction isolation level serializable;--注意,在root會話中 session層級還是為READ-COMMITTEDroot@localhost[(none)]> show variables like '%isolation%';+---------------+----------------+| Variable_name | Value |+---------------+----------------+| tx_isolation | READ-COMMITTED |+---------------+----------------+--在root會話中我可以看到全域的值已經變為SERIALIZABLEroot@localhost[(none)]> show global variables like '%isolation%';+---------------+--------------+| Variable_name | Value |+---------------+--------------+| tx_isolation | SERIALIZABLE |+---------------+--------------+--在fred中全域的也變成了SERIALIZABLEfred@localhost[(none)]> show global variables like '%isolation%';+---------------+--------------+| Variable_name | Value |+---------------+--------------+| tx_isolation | SERIALIZABLE |+---------------+--------------+--從上面的示範來說,無論global層級如何設定,不會影響到當前session層級的設定--下面我們使用一個新使用者登入來看看全域設定是否影響新會話robin@SZDB:~> mysql -urobin--如下查詢新會話的隔離等級等於全域的隔離等級robin@localhost[(none)]> show variables like '%isolation%';+---------------+--------------+| Variable_name | Value |+---------------+--------------+| tx_isolation | SERIALIZABLE |+---------------+--------------+
4、如何擷取變數值
除了通過前面示範的使用show global|session variables like 'vari_name'方式之外,我們可以通過查詢information_schema資料中特定的表來獲得這些變數的值。通過查詢資料information_schema的表global_variablesroot@localhost[information_schema]> select variable_value from global_variables where -> variable_name='tx_isolation';+----------------+| variable_value |+----------------+| SERIALIZABLE |+----------------+--Author: Leshami--Blog : http://blog.csdn.net/leshamiroot@localhost[information_schema]> select @@global.tx_isolation;+-----------------------+| @@global.tx_isolation |+-----------------------+| SERIALIZABLE |+-----------------------+root@localhost[information_schema]> select @@session.tx_isolation;+------------------------+| @@session.tx_isolation |+------------------------+| READ-COMMITTED |+------------------------+--下面查詢session_variables結果與查詢global_variables獲得的值相同,究其原因還在進一步研究中root@localhost[information_schema]> select * from session_variables where variable_name='tx_isolation';+---------------+----------------+| VARIABLE_NAME | VARIABLE_VALUE |+---------------+----------------+| TX_ISOLATION | SERIALIZABLE |+---------------+----------------+
5、總結
a、設定方法
要想設定一個GLOBAL變數的值,使用下面的文法:
mysql> SET GLOBAL sort_buffer_size=value;
mysql> SET @@global.sort_buffer_size=value;
要想設定一個SESSION變數的值,使用下面的文法:
mysql> SET SESSION sort_buffer_size=value;
mysql> SET @@session.sort_buffer_size=value;
mysql> SET sort_buffer_size=value;
LOCAL是SESSION的同義字。
如果設定變數時不指定GLOBAL、SESSION或者LOCAL,預設使用SESSION。
b、檢索設定
要想檢索一個GLOBAL變數的值,使用下面的文法:
mysql> SELECT @@global.sort_buffer_size;
mysql> SHOW GLOBAL VARIABLES like 'sort_buffer_size';
要想檢索一個SESSION變數的值,使用下面的文法:
mysql> SELECT @@sort_buffer_size;
mysql> SELECT @@session.sort_buffer_size;
mysql> SHOW SESSION VARIABLES like 'sort_buffer_size';
這裡,LOCAL也是SESSION的同義字。
c、其他注意事項
當你用SELECT @@var_name搜尋一個變數時(也就是說,不指定global.、session.或者local.),
MySQL返回SESSION值(如果存在),否則返回GLOBAL值。
對於SHOW VARIABLES,如果不指定GLOBAL、SESSION或者LOCAL,MySQL返回SESSION值。
mysql show variables 這個variables 變數內容是存在檔案裡面
有一部分是從my.cnf讀取的...但都在performance_schema庫中..比如..GLOBAL_VARIABLES 表中很多都是 varbles的資訊..
mySQL怎配置環境變數
這和環境變數沒關係,你看下服務的名稱是不是正確的,比如mysqld。