Mysql系統(tǒng)變量與狀態(tài)變量詳細(xì)介紹
系統(tǒng)變量
什么是Mysql系統(tǒng)變量
能夠在程序運(yùn)行過(guò)程中影響Mysql程序行為的變量稱之為系統(tǒng)變量。
在Mysql中存在多個(gè)系統(tǒng)變量,可以使用show variables查看,如果直接執(zhí)行得到的結(jié)果是查詢了所有的系統(tǒng)變量,所以這個(gè)命令支持模糊匹配,
演示如下:
### 模糊搜索系統(tǒng)變量中包含conn的所有變量,精確匹配時(shí)值不包含% mysql> show variables like '%conn%'; +-----------------------------------------------+-----------------+ | Variable_name | Value | +-----------------------------------------------+-----------------+ | character_set_connection | utf8 | | collation_connection | utf8_general_ci | | connect_timeout | 10 | | disconnect_on_expired_password | ON | | init_connect | | | max_connect_errors | 100 | | max_connections | 400 | | max_user_connections | 0 | | performance_schema_session_connect_attrs_size | 512 | +-----------------------------------------------+-----------------+
設(shè)置系統(tǒng)變量
設(shè)置系統(tǒng)變量其實(shí)在上篇已經(jīng)聊過(guò)兩種通過(guò)啟動(dòng)項(xiàng)配置以及my.cnf配置文件配置,演示如下
my.cnf設(shè)置配置
my.cnf文件配置;
[mysqld] datadir=/usr/local/mysql-5.7.26/data default-storage-engine=MyISAM max-connections=10 ### 其它配置省略
客戶端讀取:
mysql> show variables like '%datadir%'; +---------------+-------------------------------+ | Variable_name | Value | +---------------+-------------------------------+ | datadir | /usr/local/mysql-5.7.26/data/ | +---------------+-------------------------------+ 1 row in set (0.00 sec) mysql> show variables like '%default-storage-engine%'; Empty set (0.01 sec) #### 注意搜索系統(tǒng)變量名字的區(qū)別?。?! mysql> show variables like '%default_storage_engine%'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | default_storage_engine | MyISAM | +------------------------+--------+ 1 row in set (0.00 sec)
注意:在MySQL客戶端讀取配置時(shí)所有系統(tǒng)變量采用的是下劃線(僅支持下劃線),而在配置文件My.cnf或者啟動(dòng)配置項(xiàng)中采用中劃線或者下劃線是等價(jià)的,一定要注意區(qū)分?。。。。?!。
啟動(dòng)項(xiàng)配置
服務(wù)端啟動(dòng)配置
###?root用戶執(zhí)行采用配置--user=root,非root用戶不用 mysqld?--user=root?--max-connections=111
客戶端查詢系統(tǒng)變量
mysql> show variables like '%max_connections%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 111 | +-----------------+-------+ 1 row in set (0.00 sec)
這兩種方法都可以修改系統(tǒng)變量,但是缺點(diǎn)也是存在的
- 修改完需要重啟服務(wù)端才可以生效。
- 修改完對(duì)所有的客戶端都生效,有時(shí)單個(gè)客戶端需要有特定的系統(tǒng)變量,顯然不符合要求。
所以這里介紹第三種方式,采用set的形式修改系統(tǒng)變量。
Set的形式修改系統(tǒng)變量
在Mysql客戶端我們可以采用Set命令直接修改系統(tǒng)變量,不過(guò)需要注意的是,Set的形式修改會(huì)指定系統(tǒng)變量生效的范圍,因?yàn)楫?dāng)多個(gè)客戶端連接同一個(gè)服務(wù)端時(shí)可能一個(gè)系統(tǒng)變量需要作用于所有的客戶端,有的系統(tǒng)變量只需要作用于當(dāng)前的客戶端即可,根據(jù)作用范圍分為如下兩種。
- **GLOBAL:**針對(duì)所有的客戶端生效。
- **SESSION(也被稱為local):**只對(duì)當(dāng)前會(huì)話生效,其余客戶端不受影響。
顯然對(duì)于my.cnf設(shè)置配置和啟動(dòng)項(xiàng)配置都是作用于所有的客戶端,也就是GLOBAL作用范圍,那么只針對(duì)當(dāng)前客戶端的系統(tǒng)變量需要如何設(shè)置呢,
體驗(yàn)如下所示:
#### 先查詢一次存儲(chǔ)引擎的值 mysql> show variables like '%default_storage_engine%'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | default_storage_engine | MyISAM | +------------------------+--------+ 1 row in set (0.00 sec) mysql> set default_storage_engine=InnoDB; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%default_storage_engine%'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | default_storage_engine | InnoDB | +------------------------+--------+ 1 row in set (0.00 sec)
SESSION作用范圍語(yǔ)法
我們?cè)谑褂胹et命令改變系統(tǒng)變量的值其實(shí)默認(rèn)就是session范圍的語(yǔ)法,具體語(yǔ)法如下:
### 語(yǔ)法一:默認(rèn)采用session mysql> set default_storage_engine=InnoDB; ### 語(yǔ)法二:指定作用范圍session mysql> set session default_storage_engine InnoDB; ### 語(yǔ)法三 mysql> set @@session.default_storage_engine=InnoDB;
GLOBAL作用范圍語(yǔ)法
global影響范圍是所有的客戶端,具體語(yǔ)法如下所示:
### 語(yǔ)法一 mysql> set global default_storage_engine=InnoDB; ### 語(yǔ)法二 mysql> set @@global.default_storage_engine=MyISAM;
查看系統(tǒng)變量值
從上面我們知道了Mysql中的系統(tǒng)變量分為兩種操作范圍,同樣查詢系統(tǒng)變量時(shí)也是分作用范圍查詢,查詢系統(tǒng)變量語(yǔ)法如下所示。
show [global|session] variables like [匹配元素支持模糊匹配%]
默認(rèn)顯示的是session作用范圍的系統(tǒng)變量。
命令演示如下:
### 查詢session當(dāng)前客戶端存儲(chǔ)引擎的系統(tǒng)變量 mysql> show session variables like 'default_storage_engine'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | default_storage_engine | InnoDB | +------------------------+--------+ 1 row in set (0.01 sec) ### 查詢global所有客戶端存儲(chǔ)引擎的系統(tǒng)變量 mysql> show global variables like 'default_storage_engine'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | default_storage_engine | InnoDB | +------------------------+--------+ 1 row in set (0.01 sec) ### 改變?nèi)窒到y(tǒng)變量【默認(rèn)存儲(chǔ)引擎】 mysql> set global default_storage_engine=MyISAM; Query OK, 0 rows affected (0.00 sec) ### 再次查詢?nèi)窒到y(tǒng)變量【默認(rèn)存儲(chǔ)引擎】值,修改成功?。。。。。?! mysql> show global variables like 'default_storage_engine'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | default_storage_engine | MyISAM | +------------------------+--------+ 1 row in set (0.00 sec) ### 再次查詢當(dāng)前客戶端【默認(rèn)存儲(chǔ)引擎】值,沒(méi)有被修改!! mysql> show session variables like 'default_storage_engine'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | default_storage_engine | InnoDB | +------------------------+--------+ 1 row in set (0.00 sec)
注意:當(dāng)修改全局global作用范圍的系統(tǒng)變量時(shí),session作用范圍的相同名字系統(tǒng)變量值并不會(huì)馬上修改,需要等客戶端下一次接入時(shí)才會(huì)生效,也就是說(shuō)修改全局global作用范圍的系統(tǒng)變量,只會(huì)影響后續(xù)接入客戶端作用范圍為session的系統(tǒng)變量。
系統(tǒng)變量注意點(diǎn)
并不是所有的系統(tǒng)變量都有session范圍和global范圍
只有session范圍的系統(tǒng)變量
只有session范圍的系統(tǒng)變量,如insert_id,表示對(duì)當(dāng)前客戶端表設(shè)置了自增長(zhǎng)AUTO_INCREMENT列,插入數(shù)據(jù)的自增長(zhǎng)id初始值,
演示如下:
### 初始值默認(rèn)0
mysql> show variables like 'insert_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| insert_id | 0 |
+---------------+-------+
1 row in set (0.00 sec)
### 設(shè)置初始值為2
mysql> set session insert_id=2;
Query OK, 0 rows affected (0.00 sec)
### 創(chuàng)建一張表,帶有自增長(zhǎng)AUTO_INCREMENT列
mysql> CREATE TABLE tb_student(
-> id INT(4) PRIMARY KEY AUTO_INCREMENT,
-> name VARCHAR(25) NOT NULL
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> insert into tb_student(name) values('zhangsan');
Query OK, 1 row affected (0.00 sec)
### 自增長(zhǎng)初始值由0變?yōu)?,設(shè)置成功??!
mysql> select * from tb_student;
+----+----------+
| id | name |
+----+----------+
| 2 | zhangsan |
+----+----------+
1 row in set (0.00 sec)session作用范圍的不能設(shè)置為全局系統(tǒng)變量,提示如下:
mysql> set global insert_id=2; ERROR 1228 (HY000): Variable 'insert_id' is a SESSION variable and can't be used with SET GLOBAL
只有g(shù)lobal范圍的系統(tǒng)變量
這類變量多為系統(tǒng)功能支持變量,如max_connections系統(tǒng)最大連接數(shù),只能采用global修改
mysql> set max_connections=123; ERROR 1229 (HY000): Variable 'max_connections' is a GLOBAL variable and should be set with SET GLOBAL
并不是所有系統(tǒng)變量可以修改
對(duì)于絕大多數(shù)系統(tǒng)變量來(lái)講都是可以修改的,但萬(wàn)事有例外,有些系統(tǒng)變量只讀,如version查看數(shù)據(jù)庫(kù)版本。
mysql> show variables like 'version'; +---------------+--------+ | Variable_name | Value | +---------------+--------+ | version | 5.7.26 | +---------------+--------+ 1 row in set (0.01 sec) ### 只讀系統(tǒng)變量修改報(bào)錯(cuò) mysql> set version='1.0.0'; ERROR 1238 (HY000): Variable 'version' is a read only variable
狀態(tài)變量
系統(tǒng)變量是能夠影響程序的運(yùn)行行為的變量,而狀態(tài)變量是能夠幫我們了解程序運(yùn)行過(guò)程中的情況,這些狀態(tài)變量的值由程序運(yùn)行過(guò)程中產(chǎn)生,不可設(shè)置,具體語(yǔ)法如下
show [global|session] status like [匹配元素支持模糊匹配%]
不寫明作用范圍默認(rèn)session
命令演示如下:
### 默認(rèn)查詢session作用范圍的數(shù)據(jù) mysql> show status like '%threads%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | Delayed_insert_threads | 0 | | Slow_launch_threads | 0 | | Threads_cached | 0 | | Threads_connected | 2 | | Threads_created | 2 | | Threads_running | 1 | +------------------------+-------+
到此這篇關(guān)于Mysql系統(tǒng)變量與狀態(tài)變量詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Mysql系統(tǒng)變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL修改默認(rèn)存儲(chǔ)引擎的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇MySQL修改默認(rèn)存儲(chǔ)引擎的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
Mysql實(shí)現(xiàn)定時(shí)清空一張表的舊數(shù)據(jù)并保留幾條數(shù)據(jù)(推薦)
這篇文章主要介紹了Mysql實(shí)現(xiàn)定時(shí)清空一張表的舊數(shù)據(jù)并保留幾條數(shù)據(jù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
關(guān)于Mysql中文亂碼問(wèn)題該如何解決(亂碼問(wèn)題完美解決方案)
這篇文章給大家介紹關(guān)于Mysql中文亂碼問(wèn)題該如何解決(亂碼問(wèn)題完美解決方案)的相關(guān)資料,還給大家收集些關(guān)于MySQL會(huì)出現(xiàn)中文亂碼原因常見(jiàn)的幾點(diǎn),小伙伴快來(lái)看看吧2015-11-11
MySQL數(shù)據(jù)庫(kù)索引優(yōu)化及應(yīng)用
本文詳細(xì)介紹了MySQL數(shù)據(jù)庫(kù)索引的基本概念、優(yōu)缺點(diǎn)、常見(jiàn)類型、使用策略、優(yōu)化技巧以及查看和分析索引使用情況的方法,通過(guò)這些內(nèi)容,讀者可以更好地理解和使用索引來(lái)優(yōu)化MySQL數(shù)據(jù)庫(kù)的性能,感興趣的朋友跟隨小編一起看看吧2025-11-11
MySQL之同表一個(gè)字段如何賦值給另一個(gè)字段
這篇文章主要介紹了MySQL之同表一個(gè)字段如何賦值給另一個(gè)字段問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07

