關於MySQL引數,這些你要知道

wang_KJ發表於2020-09-04

前言:

在前面一些文章中,經常能看到介紹某某引數的作用,可能有些小夥伴仍搞不清楚 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 或運維來維護,可能有些同學對這些引數還比較陌生。建議在資料庫初始化時,根據伺服器規格設定對應的資料庫引數。對於不清楚作用的引數,建議保持預設值即可。關於更多引數相關的內容,可以參考官方文件:

總結:

本篇文章詳細講述了 MySQL 引數相關概念及查詢更改方法,希望各位小夥伴能學到相關知識。

wx_blog.png

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31401187/viewspace-2717151/,如需轉載,請註明出處,否則將追究法律責任。

相關文章