Mysql系列(二)—— 系統變量與狀態變量

系統變量

什麼是系統變量

系統變量,就是Mysql針對本身程序運行的一些參數配置。例如經過系統變量咱們能夠指定諸如容許同時連入的客戶端數量、客戶端和服務器通訊方式、表的默認存儲引擎、查詢緩存的大小等設置項。mysql

系統變量的分類

  • GLOBAL:全局變量,影響服務器的總體操做。
  • SESSION:會話變量,影響某個客戶端鏈接的操做。(注:SESSION有個別名叫LOCAL)

注:程序員

  1. 在服務器啓動時,會將每一個全局變量初始化爲其默認值(能夠經過命令行或選項文件中指定的選項更改這些默認值)。而後服務器還爲每一個鏈接的客戶端維護一組會話變量,客戶端的會話變量在鏈接時使用相應全局變量的當前值初始化。
  2. 並非全部系統變量都具備GLOBAL和SESSION的做用範圍。有一些系統變量只具備GLOBAL做用範圍,比方說max_connections,表示服務器程序支持同時最多有多少個客戶端程序進行鏈接。有一些系統變量只具備SESSION做用範圍,好比insert_id,表示在對某個包含AUTO_INCREMENT列的表進行插入時,該列初始的值。有一些系統變量的值既具備GLOBAL做用範圍,也具備SESSION做用範圍,好比咱們default_storage_engine(存儲引擎),並且其實大部分的系統變量都是這樣的。

如何查看系統變量

命令:SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式](不寫GLOBAL或SESSION等同於SESSION);sql

如何設置系統變量

  • 經過啓動選項設置,如命令: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,效果跟mysqld_safe同樣,mysqld_multi是用於單機多個mysql服務端進程的啓動,中止腳本。緩存

每一個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組下面配置:code

[server]
default-storage-engine=MyISAM
max-connections=10

表示默認存儲引擎爲MyISAM,最大鏈接數爲10。server

  • 服務器程序運行過程當中設置

命令: SET [GLOBAL|SESSION] 系統變量名 = 值 或 SET [@@(GLOBAL|SESSION).]系統變量名 = 值(不寫GLOBAL或SESSION等同於SESSION);進程

例如:

語句一:SET GLOBAL default_storage_engine = MyISAM;

語句二:SET @@GLOBAL.default_storage_engine = MyISAM;

注:若是某個客戶端改變了某個系統變量在GLOBAL做用範圍的值,並不會影響該系統變量在當前已經鏈接的客戶端做用範圍爲SESSION的值,只會影響後續連入的客戶端在做用範圍爲SESSION的值。

2、狀態變量

什麼是狀態變量

MySQL服務器程序中維護了好多關於程序運行狀態的變量,它們被稱爲狀態變量,因爲狀態變量是用來顯示服務器程序運行情況的,因此它們的值只能由服務器程序本身來設置,咱們程序員是不能設置的。與系統變量相似,狀態變量也有GLOBAL和SESSION兩個做用範圍的。比方說Threads_connected表示當前有多少客戶端與服務器創建了鏈接,Handler_update表示已經更新了多少行記錄。

查看狀態變量命令

SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式](不寫GLOBAL或SESSION等同於SESSION;

相關文章
相關標籤/搜索