MySQL 的啓動選項和系統變量

MySQL的配置信息能夠經過兩種方式實現,一種是命令行形式,在啓動MySQL服務時後邊帶上相關配置參數,此種方式會在MySQL重啓後失效。另一種是經過寫入配置文件,如my.cnf,啓動或者重啓MySQL服務都會生效,此種方式是永久生效。mysql

啓動選項

命令行

在MySQL服務命令啓動時,帶上配置參數程序員

啓動方式可參考這篇:MySQL 的啓動和鏈接方式sql

命令格式:
啓動命令 --啓動選項1[=值1] --啓動選項2[=值2] ... --啓動選項n[=值n]
複製代碼
例如:
mysqld --default-storage-engine=MyISAM //設置默認存儲引擎
複製代碼
錯誤例子:
mysqld --default-storage-engine = MyISAM //設置默認存儲引擎
緣由:
由於啓動項和值之間的等號不能有空格
複製代碼

參數的長形式和短形式

配置參數有長形式和短形式之分,有些做用是同樣的,只是寫法不一樣而已緩存

--host => -h //主機
--port => -P // 端口
--user => -u //用戶
--password => -p //密碼
--version => -V //版本
......
複製代碼
例子:
mysqld --port=3306
mysqld -P3306
mysqld -P 3306
複製代碼
注意:
密碼不能有空格
mysqld -proot
複製代碼

配置文件

配置文件my.cnf的位置,有多是如下的幾種,如MySQL服務啓動時未指定配置文件時,會從如下地方查找讀取並初始化。bash

* /etc/my.cnf 
* /etc/mysql/my.cnf
* defaults-extra-file //指定的額外配置文件路徑
* SYSCONFDIR/my.cnf //cmake編譯安裝狀況
* $MYSQL_HOME/my.cnf //設置環境變量,默認安裝路徑
* ~/.my.cnf  //用戶特定選項,家目錄
* ~/.mylogin.cnf //用戶特定的登陸路徑選項(僅限客戶端),mysql_config_editor修改,不是純文件
複製代碼
注意
1. 在配置文件中指定的啓動選項不容許加--前綴,而且每行只指定一個選項,並且=周圍能夠有空白字符
2. 若是咱們在多個配置文件中設置了相同的啓動選項,那以最後一個配置文件中的爲準
3. 若是同一個啓動選項既出如今命令行中,又出如今配置文件中,那麼以命令行中的啓動選項爲準
4. mysqld --defaults-file=/tmp/myconfig.txt  
//在程序啓動的時候將只在/tmp/myconfig.txt路徑下搜索配置文件。若是文件不存在或沒法訪問,則會發生錯誤
複製代碼

配置組

配置文件一共能夠如下這些組別:mysqld、mysqld_safe、mysql.server、mysql、mysqladmin、mysqldump,能夠針對不一樣組別進行配置服務器

MySQL的啓動選項和系統變量

內容格式
[server]
(具體的啓動選項...)
[mysqld]
(具體的啓動選項...)
[mysqld_safe]
(具體的啓動選項...)
[client]
(具體的啓動選項...)
[mysql]
(具體的啓動選項...)
[mysqladmin]
(具體的啓動選項...)
複製代碼
例子:
[mysqld]
pid-file          = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
# 優化配置
wait_timeout=10
back_log=600
key_buffer_size = 2048M
read_buffer_size = 100M
max_allowed_packet      = 1000M
thread_stack            = 192K
thread_cache_size       = 4
myisam-recover-options  = BACKUP
max_connections        = 4000
max_user_connections = 0
max_connect_errors = 65535
open_files_limit = 10240
......
複製代碼
注意
1. [server]組下邊的啓動選項將做用於全部的服務器程序,如mysqld、mysqld_safe、mysql.server
2. [client]組下邊的啓動選項將做用於全部的客戶端程序,如mysql、mysqladmin、mysqldump
3. 同一個配置文件中多個組的優先級,將以最後一個出現的組中的啓動選項爲準
複製代碼

系統變量

MySQL服務器程序運行過程當中會用到許多影響程序行爲的變量,它們被稱爲MySQL系統變量。session

例如:
1. 容許同時連入的客戶端數量用系統變量max_connections表示
2. 表的默認存儲引擎用系統變量default_storage_engine表示
3. 查詢緩存的大小用系統變量query_cache_size表示
......
複製代碼

查看

格式:
SHOW VARIABLES [LIKE 匹配的模式];
複製代碼
例如:
SHOW VARIABLES LIKE 'default_storage_engine';
複製代碼

MySQL 的啓動選項和系統變量

設置

經過啓動項設置

命令行設置
mysqld --default-storage-engine=MyISAM --max-connections=10
複製代碼
配置文件設置
[mysqld]
default-storage-engine = MyISAM
max-connections = 10
......
複製代碼
注意:
對於啓動選項來講,若是啓動選項名由多個單詞組成,各個單詞之間用短劃線-或者下劃線_鏈接起來均可以,可是它對應的系統變量的單詞之間必須使用下劃線_鏈接起來(即經過show查看或set設置時)
複製代碼

服務器程序運行過程當中設置

系統變量比較牛逼的一點就是,對於大部分系統變量來講,它們的值能夠在服務器程序運行過程當中進行動態修改而無需中止並重啓服務器socket

不過系統變量有全局和當前會話做用域之分優化

做用域

GLOBAL:全局變量,影響服務器的總體操做。
SESSION:會話變量,影響某個客戶端鏈接的操做。(別名叫LOCAL)
複製代碼
格式:
1. SET [GLOBAL|SESSION] 系統變量名 = 值;
2. SET [@@(GLOBAL|SESSION).]var_name = XXX;
複製代碼
global
例如:
1. SET GLOBAL default_storage_engine = InnoDB;
2. SET @@GLOBAL.default_storage_engine = InnoDB;
複製代碼
session
例如:
1. SET SESSION default_storage_engine = InnoDB;
2. SET @@SESSION.default_storage_engine = InnoDB;
3. SET default_storage_engine = InnoDB;//默認 session
複製代碼
查看
格式:SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];
1. SHOW SESSION VARIABLES LIKE 'default_storage_engine';
2. SHOW GLOBAL VARIABLES LIKE 'default_storage_engine';
複製代碼

注意: 若是某個客戶端改變了某個系統變量在GLOBAL做用範圍的值,並不會影響該系統變量在當前已經鏈接的客戶端做用範圍爲SESSION的值,只會影響後續連入的客戶端在做用範圍爲SESSION的值。ui

補充說明
並非全部系統變量都具備GLOBAL和SESSION的做用範圍
* 有一些系統變量只具備GLOBAL做用範圍,比方說max_connections,表示服務器程序支持同時最多有多少個客戶端程序進行鏈接
* 有一些系統變量只具備SESSION做用範圍,好比insert_id,表示在對某個包含AUTO_INCREMENT列的表進行插入時,該列初始的值
* 有一些系統變量的值既具備GLOBAL做用範圍,也具備SESSION做用範圍,好比咱們前邊用到的default_storage_engine,並且其實大部分的系統變量都是這樣的
複製代碼
有些系統變量是隻讀的,並不能設置值
比方說version,表示當前MySQL的版本,咱們客戶端是不能設置它的值的,只能在SHOW VARIABLES語句裏查看。
複製代碼
啓動選項與系統變量的關係

啓動選項是在程序啓動時咱們程序員傳遞的一些參數,而系統變量是影響服務器程序運行行爲的變量

* 大部分的系統變量均可以被看成啓動選項傳入
* 有些系統變量是在程序運行過程當中自動生成的,是不能夠看成啓動選項來設置,好比auto_increment_offset、character_set_client啥的
* 有些啓動選項也不是系統變量,好比defaults-file
複製代碼

狀態變量

爲了讓咱們更好的瞭解服務器程序的運行狀況,MySQL服務器程序中維護了好多關於程序運行狀態的變量,它們被稱爲狀態變量。

比方說Threads_connected表示當前有多少客戶端與服務器創建了鏈接,Handler_update表示已經更新了多少行記錄

因爲狀態變量是用來顯示服務器程序運行情況的,因此它們的值只能由服務器程序本身來設置,咱們程序員是不能設置的

查看

格式:
SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];
例如:
SHOW STATUS LIKE 'thread%';
複製代碼

MySQL 的啓動選項和系統變量

參考:掘金小冊《MySQL 是怎樣運行的:從根兒上理解 MySQL》

相關文章
相關標籤/搜索