MySQL 引數相關概念及查詢更改方法
前言:
在前面一些文章中,經常能看到介紹某某引數的作用,可能有些小夥伴仍搞不清楚 MySQL 引數是啥。本篇文章我們來聊聊 MySQL 引數,學習下如何管理維護 MySQL 引數。
1.MySQL引數概念
我們所說的引數在官方文件中稱為 系統變數 (system variable),不同的變數有著不同的作用。 MySQL 服務端維護了許多表示其配置的系統變數,所有變數均有預設值。一般可以在啟動命令列中或配置檔案中對它們進行設定。
系統變數分為全域性系統變數(global)和會話系統變數(session)。有些變數既有全域性變數又有會話變數,有些變數只有全域性變數。全域性變數影響伺服器的全域性操作,會話變數隻影響具體客戶端連線相關操作。若會話變數未單獨設定,則繼承自相應全域性變數。
MySQL 服務啟動時,會按照配置檔案或命令列中指定的選項來給全域性變數賦值,沒有指定則按預設值處理。服務啟動後,通過連線伺服器並執行 SET GLOBAL var_name 語句可以動態更改部分全域性變數的值。要想更改全域性變數,必須具有 SUPER 許可權。 MySQL 還為每個客戶端連線維護會話變數,連線時使用相應全域性變數的當前值對客戶端會話變數進行初始化。客戶端可以通過 SET SESSION var_name 語句來動態更改會話變數。設定會話變數不需要特殊許可權,但會話變數只作用於當前連線。
2.引數查詢與變更示例
這裡也要說明下,並不是所有的引數都可以動態修改,某些引數只能寫入配置檔案然後重啟資料庫才能生效。下面我們來展示下 MySQL 引數的查詢與修改。
# 引數查詢 show global variables like 'var_name'; //檢視全域性系統變數的值,可使用%萬用字元 show session variables like 'var_name'; //檢視會話系統變數的值 show variables like 'var_name'; //優先返回會話系統變數,若會話系統變數不存在,則返回全域性系統變數。 # 也可用select查詢某個特定引數 select @@global.var_name; //全域性系統變數 select @@session.var_name; //會話系統變數 select @@var_name; //優先會話系統變數 # 查詢示例 mysql> show global variables like 'server_id'; +---------------+---------+ | Variable_name | Value | +---------------+---------+ | server_id | 1003306 | +---------------+---------+ 1 row in set (0.00 sec) mysql> show global variables like 'log_bin%'; +---------------------------------+-------------------------------+ | Variable_name | Value | +---------------------------------+-------------------------------+ | log_bin | ON | | log_bin_basename | /data/mysql/logs/binlog | | log_bin_index | /data/mysql/logs/binlog.index | | log_bin_trust_function_creators | ON | | log_bin_use_v1_row_events | OFF | +---------------------------------+-------------------------------+ 5 rows in set (0.00 sec) mysql> select @@server_id; +-------------+ | @@server_id | +-------------+ | 1003306 | +-------------+ 1 row in set (0.00 sec) # 動態修改引數 set global var_name = value; set session var_name = value; set var_name = value; set @@global.var_name = value; set @@session.var_name = value; set @@var_name = value; # 引數修改示例 mysql> set global sort_buffer_size = 2097152; Query OK,0 rows affected (0.00 sec) mysql> set session sort_buffer_size = 4194304; Query OK,0 rows affected (0.00 sec) mysql> select @@global.sort_buffer_size,@@session.sort_buffer_size; +---------------------------+----------------------------+ | @@global.sort_buffer_size | @@session.sort_buffer_size | +---------------------------+----------------------------+ | 2097152 | 4194304 | +---------------------------+----------------------------+ 1 row in set (0.00 sec)
引數動態修改後,建議將其寫入配置檔案。因為動態修改的引數在 MySQL 服務重啟後會失效,只有寫入配置檔案才能夠重啟後仍有效。對於一些無法動態修改的引數,我們只能通過修改配置檔案,然後重啟來使之生效。這裡所說的配置檔案就是 my.cnf 檔案了,Linux 系統一般在 /etc 目錄下;Windows 系統一般在 basedir 目錄下,名稱可命名為 my.ini 。大部分引數需要配置在 [mysqld] 下,一份簡單的配置檔案示例如下:
vi /etc/my.cnf # 簡單模板如下: [mysqld] user = mysql datadir = /data/mysql/data socket = /data/mysql/tmp/mysql.sock pid-file = /data/mysql/tmp/mysqld.pid skip_name_resolve = 1 max_connections = 2000 lower_case_table_names = 1 log_timestamps=SYSTEM max_allowed_packet = 32M ...
MySQL 引數一般由 DBA 或運維來維護,可能有些同學對這些引數還比較陌生。建議在資料庫初始化時,根據伺服器規格設定對應的資料庫引數。對於不清楚作用的引數,建議保持預設值即可。關於更多引數相關的內容,可以參考官方文件:
https://dev.mysql.com/doc/refman/5.7/en/server-system-variable-reference.html
總結:
本篇文章詳細講述了 MySQL 引數相關概念及查詢更改方法,希望各位小夥伴能學到相關知識。
以上就是MySQL 引數相關概念及查詢更改方法的詳細內容,更多關於MySQL 引數的資料請關注我們其它相關文章!