摘要:一啟動選項和系統變量啟動服務器程序這個可執行文件就代表著服務器程序,運行這個可執行文件就可以直接啟動一個服務器進程。
MySql(一)——啟動選項和系統變量 啟動MySql服務器程序
mysqld
mysqld這個可執行文件就代表著MySql服務器程序,運行這個可執行文件就可以直接啟動一個服務器進程。
mysqld_safe
mysqld_safe是一個啟動腳本,它會間接的調用mysql,而且還順便啟動了另外一個監控服務,這個監控進程在服務器進程掛了的時候,可以幫助重啟它。另外,使用mysqld_safe啟動服務器程序時,它會將服務器程序的出錯信息和其他診斷信息重定向到某個文件中,產生出錯誤日志,這樣可以方便我們找出發生錯誤的原因。
mysql.server
mysql.server也是一個啟動腳本,它會間接的調用mysql_safe,在調用mysql.server時在后邊指定start參數就可以啟動服務器程序了:
mysql.server start
mysqld_multi
一臺計算機上可以運行多個服務器實例。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語句),服務器進程處理后再向客戶端進程發送一段文本(處理結果)。
大致是以下三個部分
連接管理:
每當有一個客戶端進程連接到服務器進程時,服務器進程都會創建一個線程來專門處理與這個客戶端的交互,當該客戶端退出時會與服務器斷開連接,服務器并不會立即把與該客戶端交互的線程銷毀掉,而是把它緩存起來,在另一個新的客戶端再進行連接時,把這個緩存的線程分配給該新客戶端。這樣就起到了不頻繁創建和銷毀線程的效果,從而節省開銷
解析與優化
查詢緩存:如果兩個查詢請求在任何字符上的不同(例如:空格、注釋、大小寫),都會導致緩存不會命中。雖然查詢緩存有時可以提升系統性能,但也不得不因維護這塊緩存而造成一些開銷,比如每次都要去查詢緩存中檢索,查詢請求處理完需要更新查詢緩存,維護該查詢緩存對應的內存區域。從MySQL 5.7.20開始,不推薦使用查詢緩存,并在MySQL 8.0中刪除
語法解析:判斷請求的語法是否正確
查詢優化:MySql的優化程序會對我們的語句做一些優化
存儲引擎
blackhole、MyIsam、InnoDB...
關于存儲引擎的一些操作SHOW ENGINES;
創建表時指定存儲引擎:CREATE TABLE 表名( 建表語句; ) ENGINE = 存儲引擎名稱;
修改表的存儲引擎:ALTER TABLE 表名 ENGINE = 存儲引擎名稱;
啟動選項和配置文件
在命令行上使用選項,格式:
--啟動選項1[=值1] --啟動選項2[=值2] ... --啟動選項n[=值n]
mysqld --skip-networking:客戶端不能用-h(TCP/IP)進行網絡通信
mysqld --default-storage-engine=MyISAM:把默認引擎設置為MyISAM
在命令行中設置啟動選項只對當次啟動生效
配置文件中使用選項
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實用程序創建的加密文件。文件中只能包含一些用于啟動客戶端軟件時連接服務器的一些選項,包括 host、user、password、port和socket。而且它只能被客戶端程序所使用。
類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] |
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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30988.html
閱讀 3250·2021-10-21 17:50
閱讀 3260·2021-10-08 10:05
閱讀 3386·2021-09-22 15:04
閱讀 586·2019-08-30 14:00
閱讀 1944·2019-08-29 17:01
閱讀 1512·2019-08-29 15:16
閱讀 3222·2019-08-26 13:25
閱讀 856·2019-08-26 11:44