標籤:伺服器 資料庫 客戶機 mysql local
在資料庫中,變數分為系統變數(以‘@@’開頭)以及使用者自訂變數。系統變數分為全域系統變數以及會話系統變數,靜態變數屬於特殊的全域系統變數。
全域系統變數(global)和會話系統變數(session),有時也把全域系統變數稱為全域變數,把會話系統變稱為local變數或者系統會話變數。Mysql服務成功啟動後,如果沒有mysql客戶機串連mysql伺服器,那麼mysql伺服器記憶體中的系統變數全部是全域系統變數。
每個mysql客戶機成功串連mysql伺服器後,都會產生與之對應的會話。會話期間,沒有mysql服務執行個體會在mysql伺服器記憶體中產生與該會話對應的會話系統變數,這些會話系統變數的初始值是全域系統變數值的複製。由於各會話在會話期間所做的操作不盡相同,為了標記各個會話,會話系統變數又新增12個變數,例如,會話系統變數pseudo_thread_id用於標記當前會話的mysql串連ID。
會話系統變數的特點在於,它僅僅用於定義當前會話的屬性,會話期間,當前會話對某個會話系統變數值得修改,不會影響其他會話同一個會話系統變數的值,即MySQL客戶機1的會話系統變數值不會被MySQL客戶機2看到或修改;MySQL客戶機1關閉或者MySQL客戶機1與伺服器中斷連線後,與MySQL客戶機1相關的所有會話系統變數將自動釋放,以便於節省MySQL伺服器的記憶體。
全域系統變數的特點在於,它是用於定義MySQL服務執行個體的屬性、特點,會話1對某個全域系統變數值得修改會導致會話2中同一個全域系統變數值得修改。
查看系統變數值“show global variables;”命令即可查看全域系統變數值;使用“show session variable;”即可查看與當前會話相關的所有會話系統變數以及所有的全域系統變數。
在MySQL中,有一些系統變數僅僅是會話系統變數。例如,MySQL串連ID會話系統變數pseudo_thread_id,可以使用下面兩種方法查看該會話系統變數的值。
Show session variables like ‘pseudo_thread_id’;
Show variables like ‘pseudo_thread_id’;
在MySQL中,有一些系統變數即是全域系統變數,又是會話系統變數。例如,系統變數character_set_client既是全域系統變數,又是會話系統變數。
備忘:作為MySQL編碼規範,MySQL中的系統變數以兩個“@”開頭,其中“@@global”僅僅用於標記全域系統變數,“@@session”僅僅用於標記會話系統變數。“@@”首先標記會話系統變數,如果會話系統變數不存在,則標記全域系統變數。例如,查看InnoDB_data_file_path而言,可以使用“select @@global.innodb_data_file_path;”。
設定系統變數的值
方法一:修改MySQL原始碼,然後對MySQL設定檔,繼而修改MySQL系統變數的值(適用於MySQL進階使用者);
方法二:通過修改MySQL設定檔,繼而修改MySQL系統變數的值(需要重新啟動MySQL服務);
方法三:在MySQL服務運行期間,使用“set”命令重新設定系統變數的值,如果將一個系統值設定為MySQL預設值,可以使用default關鍵字;例如,set @@global.innodb_file_per_table=default;注意set命令不會導致my.ini設定檔的內容發生變化。
如果重新設定全域系統變數值(例如InnoDB_file_per_table)的值,可以使用下面兩種方法(global關鍵字不能省略)
Set @@global.innodb_file_per_table=ON;
Set global.innodb_file_per_table=ON;
重新設定會話系統變數(session)的值,有四種方法:
Set @@session.pseudo_thread_id=5;
Set session pseudo_thread_id=5;
Set @@pseudo_thread_id=5;
Set pseudo_thread_id=5;
對於大部分的系統變數而言,可以在MySQL服務運行期間通過“set”命令重新設定其值。在MySQL中還有一些特殊的全域變數(例如log_in tmpdir version datadir),在MySQL服務執行個體運行期間它們的值不能動態修改,不能使用set命令進行重新設定的,這種變數稱為靜態變數,資料庫管理員可以使用方法一或方法二對靜態變數的值重新設定。