MySql(一)——啓動選項和系統變量

MySql(一)——啓動選項和系統變量

啓動MySql服務器程序

  • mysqldmysql

    • mysqld這個可執行文件就表明着MySql服務器程序,運行這個可執行文件就能夠直接啓動一個服務器進程。
  • mysqld_safe程序員

    • mysqld_safe是一個啓動腳本,它會間接的調用mysql,並且還順便啓動了另一個監控服務,這個監控進程在服務器進程掛了的時候,能夠幫助重啓它。另外,使用mysqld_safe啓動服務器程序時,它會將服務器程序的出錯信息和其餘診斷信息重定向到某個文件中,產生出錯誤日誌,這樣能夠方便咱們找出發生錯誤的緣由。
  • mysql.serversql

    • mysql.server也是一個啓動腳本,它會間接的調用mysql_safe,在調用mysql.server時在後邊指定start參數就能夠啓動服務器程序了:
    • mysql.server start
  • mysqld_multiwindows

    • 一臺計算機上能夠運行多個服務器實例。mysqld_multi能夠對每個服務器進程的啓動或中止進行監控。
tips:windows下,命令: "完整的可執行文件路徑" --install [-manual] [服務名]能夠指定程序註冊爲windows服務。

啓動MySql客戶端程序

  • mysql -h主機名 -u用戶名 -p密碼
參數名 含義
-h 計算機的域名或者IP地址
-u 用戶名
-p 密碼

客戶端與服務器的鏈接過程

運行着的服務器程序和客戶端程序本質上都是計算機上的一個進程,因此客戶端進程向服務器進程發送請求並獲得回覆的過程本質上是一個進程間通訊的過程! MySql支持下邊三種客戶端進程和服務器進程的通訊方式。
  • TCP/IP緩存

    • mysqld -P3307-P能夠改變MySql服務器監聽哪一個端口
    • mysql -p3307-P可讓客戶端去鏈接服務器的指定端口
  • 命名管道和共享內存服務器

    • windows用戶可用
  • Unix域套接字文件網絡

    • 若是咱們的服務器進程和客戶端進程都運行在同一臺操做系統爲類Unix的機器上的話,咱們可使用Unix域套接字文件來進行進程間通訊
    • 若是咱們在啓動客戶端程序的時候指定的主機名爲localhost,或者指定了--protocal=socket的啓動參數,那服務器程序和客戶端程序之間就能夠經過Unix域套接字文件來進行通訊了。MySql服務器程序默認監聽的Unix域套接字文件路徑爲/tmp/mysql.sock,客戶端程序也默認鏈接到這個Unix域套接字文件。若是咱們想改變這個默認路徑,能夠在啓動服務器程序時指定socket參數
    • mysqld --socket=/tmp/a.txt
    • mysql -hlocalhost -uroot --socket=/tmp/a.txt -p

服務器處理客戶端請求

  • 其實不論客戶端進程和服務器進程是採用哪一種方式進行通訊,最後實現的效果都是:客戶端進程向服務器進程發送一段文本(MySQL語句),服務器進程處理後再向客戶端進程發送一段文本(處理結果)
  • 大體是如下三個部分socket

    • 鏈接管理:性能

      1. 每當有一個客戶端進程鏈接到服務器進程時,服務器進程都會建立一個線程來專門處理與這個客戶端的交互,當該客戶端退出時會與服務器斷開鏈接,服務器並不會當即把與該客戶端交互的線程銷燬掉,而是把它緩存起來,在另外一個新的客戶端再進行鏈接時,把這個緩存的線程分配給該新客戶端。這樣就起到了不頻繁建立和銷燬線程的效果,從而節省開銷
    • 解析與優化優化

      1. 查詢緩存:若是兩個查詢請求在任何字符上的不一樣(例如:空格、註釋、大小寫),都會致使緩存不會命中。雖然查詢緩存有時能夠提高系統性能,但也不得不因維護這塊緩存而形成一些開銷,好比每次都要去查詢緩存中檢索,查詢請求處理完須要更新查詢緩存,維護該查詢緩存對應的內存區域。從MySQL 5.7.20開始,不推薦使用查詢緩存,並在MySQL 8.0中刪除
      2. 語法解析:判斷請求的語法是否正確
      3. 查詢優化:MySql的優化程序會對咱們的語句作一些優化
    • 存儲引擎

      1. blackholeMyIsamInnoDB...

關於存儲引擎的一些操做

  • SHOW ENGINES;
  • 建立表時指定存儲引擎:CREATE TABLE 表名( 建表語句; ) ENGINE = 存儲引擎名稱;
  • 修改表的存儲引擎:ALTER TABLE 表名 ENGINE = 存儲引擎名稱;

啓動選項和配置文件

  1. 在命令行上使用選項,格式:

    • --啓動選項1[=值1] --啓動選項2[=值2] ... --啓動選項n[=值n]

      • mysqld --skip-networking:客戶端不能用-h(TCP/IP)進行網絡通訊
      • mysqld --default-storage-engine=MyISAM:把默認引擎設置爲MyISAM
在命令行中設置啓動選項只對當次啓動生效
  1. 配置文件中使用選項

Windows操做系統的配置文件

路徑名 備註
%WINDIR%my.ini, %WINDIR%my.cnf WINDIR一般是C:WINDOWS
C:my.ini, C:my.cnf
BASEDIRmy.ini, BASEDIRmy.cnf BASEDIR指的是MySQL安裝目錄的路徑
defaults-extra-file 命令行指定的額外配置文件路徑
%APPDATA%MySQL.mylogin.cnf 登陸路徑選項(僅限客戶端)
列表中最後一個名爲 .mylogin.cnf配置文件有點兒特殊,它不是一個純文本文件(其餘的配置文件都是純文本文件),而是使用 mysql_config_editor實用程序建立的加密文件。文件中只能包含一些用於啓動客戶端軟件時鏈接服務器的一些選項,包括 hostuserpasswordportsocket。並且它只能被客戶端程序所使用。

類Unix操做系統中的配置文件

路徑名 備註
/etc/my.cnf
/etc/mysql/my.cnf
SYSCONFDIR/my.cnf CMake構建MySQL時使用SYSCONFDIR選項指定的目錄
$MYSQL_HOME/my.cnf 特定於服務器的選項(僅限服務器)
defaults-extra-file 命令行指定的額外配置文件路徑
~/.my.cnf 用戶特定選項
~/.mylogin.cnf 用戶特定的登陸路徑選項(僅限客戶端)

配置文件的內容

[server]
option1             #這是option1,該選項不須要選項值
option2 = value2    #這是option2,該選項須要選項值

[mysqld]
(具體的啓動選項...)

[mysqld_safe]
(具體的啓動選項...)

[client]
(具體的啓動選項...)

[mysql]
(具體的啓動選項...)

[mysqladmin]
(具體的啓動選項...)
若是咱們在多個配置文件中設置了相同的啓動選項,那以最後一個配置文件中的爲準
啓動命令 類別 能讀取的組
mysqld 啓動服務器 [mysqld]、[server]
mysqld_safe 啓動服務器 [mysqld]、[server]、[mysqld_safe]
mysql.server 啓動服務器 [mysqld]、[server]、[mysql.server]
mysql 啓動客戶端 [mysql]、[client]
mysqladmin 啓動客戶端 [mysqladmin]、[client]
mysqldump 啓動客戶端 [mysqldump]、[client]
  1. defaults-file的使用
  • 若是咱們不想讓MySql到默認的路徑下搜索配置文件(就是上表中列出的那些),能夠在命令行指定defaults-file選項,好比這樣(以UNIX系統爲例):mysqld --defaults-file=/tmp/myconfig.txt。若是文件不存在或沒法訪問,則會發生錯誤。

命令行和配置文件中啓動選項的區別

若是同一個啓動選項既出如今命令行中,又出如今配置文件中,那麼以命令行中的啓動選項爲準

系統變量

1.系統變量簡介
MySql服務器程序運行過程當中會用到許多影響程序行爲的變量

  • SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];

2.設置系統變量

  • 經過啓動選項設置:上面說的很具體
  • 服務器程序運行過程當中設置

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

設置不一樣做用範圍的系統變量

  • GLOBAL:全局變量,影響服務器的總體操做。
  • SESSION:會話變量,影響某個客戶端鏈接的操做。(注:SESSION有個別名叫LOCAL
服務器會爲每一個鏈接的客戶端維護一組會話變量

設置:

  • SET [GLOBAL|SESSION] 系統變量名 = 值;

    • SET GLOBAL default_storage_engine = MyISAM
  • SET [@@(GLOBAL|SESSION).]var_name = XXX;

    • SET @@GLOBAL.default_storage_engine = MyISAM
  • SET default_storage_engine = MyISAM
若是在設置系統變量的語句中省略了做用範圍,默認的做用範圍就是 SESSION

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

3.啓動選項和系統變量的區別

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

4.狀態變量
爲了讓咱們更好的瞭解服務器程序的運行狀況,MySQL服務器程序中維護了好多關於程序運行狀態的變量。因爲狀態變量是用來顯示服務器程序運行情況的,因此它們的值只能由服務器程序本身來設置,咱們程序員是不能設置的。如:Threads_connected

相關文章
相關標籤/搜索