掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在 MySQL 數(shù)據(jù)庫,變量分為系統(tǒng)變量和用戶自定義變量。系統(tǒng)變量以 @@ 開頭,用戶自定義變量以 @ 開頭。

服務(wù)器維護(hù)著兩種系統(tǒng)變量,即
全局變量(
GLOBAL VARIABLES
)和
會話變量(
SESSION VARIABLES
)。全局變量影響 MySQL 服務(wù)的整體運(yùn)行方式,會話變量影響具體客戶端連接的操作。
每一個(gè)客戶端成功連接服務(wù)器后,都會產(chǎn)生與之對應(yīng)的會話。會話期間,MySQL 服務(wù)實(shí)例會在服務(wù)器內(nèi)存中生成與該會話對應(yīng)的會話變量,這些會話變量的初始值是全局變量值的拷貝。
可以使用以下命令查看 MySQL 中所有的全局變量信息。
SHOW GLOBAL VARIABLES;
可以使用以下命令查看與當(dāng)前會話相關(guān)的所有會話變量以及全局變量。
SHOW SESSION VARIABLES;
其中,SESSION 關(guān)鍵字可以省略。
MySQL 中的系統(tǒng)變量以兩個(gè)“@”開頭。
MySQL 中有一些系統(tǒng)變量僅僅是全局變量,例如 innodb_data_file_path,可以使用以下 3 種方法查看:
SHOW GLOBAL VARIABLES LIKE 'innodb_data_file_path';
SHOW SESSION VARIABLES LIKE 'innodb_data_file_path';
SHOW VARIABLES LIKE 'innodb_data_file_path';
MySQL 中有一些系統(tǒng)變量僅僅是會話變量,例如 MySQL 連接 ID 會話變量 pseudo_thread_id,可以使用以下 2 種方法查看。
SHOW SESSION VARIABLES LIKE 'pseudo_thread_id';
SHOW VARIABLES LIKE 'pseudo_thread_id';
MySQL 中有一些系統(tǒng)變量既是全局變量,又是會話變量,例如系統(tǒng)變量 character_set_client 既是全局變量,又是會話變量。
SHOW SESSION VARIABLES LIKE 'character_set_client';
SHOW VARIABLES LIKE 'character_set_client';
此時(shí)查看全局變量的方法如下:
SHOW GLOBAL VARIABLES LIKE 'character_set_client';
可以通過以下方法設(shè)置系統(tǒng)變量:
服務(wù)器啟動(dòng)時(shí),會將所有的全局變量賦予默認(rèn)值。這些默認(rèn)值可以在選項(xiàng)文件中或在命令行中對執(zhí)行的選項(xiàng)進(jìn)行更改。
更改全局變量,必須具有 SUPER 權(quán)限。設(shè)置全局變量的值的方法如下:
需要注意的是,更改全局變量只影響更改后連接客戶端的相應(yīng)會話變量,而不會影響目前已經(jīng)連接的客戶端的會話變量(即使客戶端執(zhí)行 SET GLOBAL 語句也不影響)。也就是說,對于修改全局變量之前連接的客戶端只有在客戶端重新連接后,才會影響到客戶端。
客戶端連接時(shí),當(dāng)前全局變量的值會對客戶端的會話變量進(jìn)行相應(yīng)初始化。設(shè)置會話變量不需要特殊權(quán)限,但客戶端只能更改自己的會話變量,而不能更改其它客戶端的會話變量。設(shè)置會話變量的值的方法如下:
如果沒有指定修改全局變量還是會話變量,服務(wù)器會當(dāng)作會話變量來處理。比如:
SET @@sort_buffer_size = 50000;
上面語句沒有指定是 GLOBAL 還是 SESSION,服務(wù)器會當(dāng)做 SESSION 處理。
使用 SET 設(shè)置全局變量或會話變量成功后,如果 MySQL 服務(wù)重啟,數(shù)據(jù)庫的配置就又會重新初始化。一切按照配置文件進(jìn)行初始化,全局變量和會話變量的配置都會失效。
MySQL 中還有一些特殊的全局變量,如 log_bin、tmpdir、version、datadir,在 MySQL 服務(wù)實(shí)例運(yùn)行期間它們的值不能動(dòng)態(tài)修改,也就是不能使用 SET 命令進(jìn)行重新設(shè)置,這種變量稱為靜態(tài)變量。數(shù)據(jù)庫管理員可以使用前面提到的修改源代碼或更改配置文件來重新設(shè)置靜態(tài)變量的值。

我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流