啟動選項
指令行
在MySQL服務指令啟動時,帶上配置參數
啟動方式可參考這篇:
MySQL 的啟動和連接配接方式
指令格式:
啟動指令 --啟動選項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服務啟動時未指定配置檔案時,會從以下地方查找讀取并初始化。
* /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,可以針對不同組别進行配置

内容格式
[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系統變量。
例如:
1. 允許同時連入的用戶端數量用系統變量max_connections表示
2. 表的預設存儲引擎用系統變量default_storage_engine表示
3. 查詢緩存的大小用系統變量query_cache_size表示
......
檢視
格式:
SHOW VARIABLES [LIKE 比對的模式];
例如:
SHOW VARIABLES LIKE 'default_storage_engine';
設定
通過啟動項設定
指令行設定
mysqld --default-storage-engine=MyISAM --max-connections=10
配置檔案設定
[mysqld]
default-storage-engine = MyISAM
max-connections = 10
......
注意:
對于啟動選項來說,如果啟動選項名由多個單詞組成,各個單詞之間用短劃線-或者下劃線_連接配接起來都可以,但是它對應的系統變量的單詞之間必須使用下劃線_連接配接起來(即通過show檢視或set設定時)
伺服器程式運作過程中設定
系統變量比較牛逼的一點就是,對于大部分系統變量來說,它們的值可以在伺服器程式運作過程中進行動态修改而無需停止并重新開機伺服器
不過系統變量有全局和目前會話作用域之分
作用域
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
補充說明
并不是所有系統變量都具有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》