MySQL服务器参数介绍
生活随笔
收集整理的這篇文章主要介紹了
MySQL服务器参数介绍
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前面介紹了服務器硬件,操作系統,和數據庫引擎對數據庫性能的影響,現在我們再來看看,MYSQL服務器配置,是如何影響MYSQL性能的,大家知道,MYSQL有大量可以修改的參數,以我們演示的MYSQL系統來說呢,就有450項可配置的參數,當然這其中呢很大一部分的參數呢,只要保持默認值就可以了,有一些是需要根據我們服務器硬件的情況,應用類型,以及數據量的大小,和服務器的負載來進行調整,有一點要注意的是,修改默認參數配置時呢,一定要小心,并不是說默認的參數對我們來說就已經足夠好了,而是說參數的調整,需要有經驗的專業人員來處理,錯誤的參數配置,可能會導致服務器的奔潰,停止,或者運行緩慢,另外還有一點需要注意,MYSQL可以從多個位置獲取參數,并且呢會按照獲取的先后順序,來處理對同一參數有沖突的配置,也就是說,對于同一個配置項,從后面位置獲取的配置呢,會覆蓋前面的配置,我們會經常遇到修改某個參數之后呢,發現在MYSQL服務器中,并沒有生效的情況,這多半是由于多個地方對同一個參數進行配置的原因,那么MYSQL服務器呢,可以通過兩種方式,來獲取配置信息,一個是命令行參數,如下面Mysql啟動命令呢,我們就在命令行中指定datadir這個參數mysqlid_safe -- datadir=/data/sql_data
數據庫目錄的位置,MYSQL服務器獲取配置信息的另一種方法呢,是讀取配置文件,對于任何長期使用的配置呢,我們都應該寫在全局配置文件中,而不是在命令行中指定,前面說到過,對于配置文件我們一定要理解,所使用的系統中,MYSQL是在什么位置去讀取配置文件的,只所以這么說呢,因為在不同的操作系統中,MYSQL讀取配置文件的順序呢可能是不同的,而在CentOS系統中呢,默認是讀取etc下的my.cnf文件,對于我們所使用的系統,讀取MYSQL系統配置文件的順序呢,我們可以通過下面這個命令來進行查詢mysqlid --help --verbose | grep -A 1 'Default options'/etc/my.cnf /etc/mysql/my.cnf /home/mysql/my.cnf ~/.my.cnf下面就是我們的演示系統中,mysql讀取配置文件的順序,我們可以看到,MYSQL會先從/etc下的my.cnf文件中讀取配置文件信息,然后才是etc下的mysql下的my.cnf文件,從上面的介紹可以看出,我們使用的是CentOS系統,最后呢MYSQL從我們使用的用戶的home目錄讀取my.cnf配置,大家注意這是一個隱藏文件,另外在啟動MYSQL服務器時,來指定一個特殊的位置,作為我們讀取配置文件的起始位置
MYSQL配置參數,根據作用域的不同呢,可以分為全局參數,和會話參數,有的參數只能進行全局配置,有的參數呢,可以對全局和會話作用域進行配置,另外有的參數是可以進行動態調整的,有的參數只能在系統啟動時,或者初始化時來進行設置,下面我們所說的全局參數和會話參數呢,只能動態調整的參數才有效,我們可以使用下面的命令對全局參數進行配置,注意啊,這些命令要在MYSQL客戶端上進行執行,而不是在系統命令行上執行,set global 參數名=參數值,set @@global.參數名:=參數值,這兩種方法是等效的,同樣的會話參數也可以通過下面的命令來進行設置,叫set[session]參數名=參數值,set @@session.參數名:=參數值,大家可以看到,上面兩種命令唯一不同的就是,全局變量使用的是global關鍵字,而會話變量呢,session關鍵字,會話參數在沒有被單獨指定的情況下,會使用相同名稱的全局參數的值來作為默認值,還有一點大家要注意,全局變量的更改,是對服務器全局有效地,但是呢有一點要注意,有的全局參數更改后只對新的連接的session有效,而對于已經連接的session呢,還是使用原來的參數,關于這一點可以給大家舉個例子
回到我們的演示系統中,我們在演示系統中要建立兩個連接,也就稱之為session1和session2,我們先連到系統中,session1,這個是session2,可以先看一看當前系統環境中,timeout這個值是多少,我們有兩個timeout參數,一個是wait_timeout,一個是交互的,大家可以看到,目前設置的都是18800秒,下面我們就通過global命令,來調整一下這兩個參數的參數值,比如我們把它調整成3600秒,現在我們已經把這兩個參數值改變了,注意這兩個值要一起更改才會有效show variables where variable_name='wait_timeout' or variable_name='interactive_timeout';set global wait_timeout=3600; set global interactive_timeout=3600;
否則系統回去這兩個最大的值來做為這兩個參數的值,下面我們來回到session2中,來看看在session1中設置的兩個值在session1中是否生效,在session2中這兩個值還是18800秒show variables where variable_name='wait_timeout' or variable_name='interactive_timeout';
這并不是因為session1設置的參數在session2中沒有生效,而是session2在session1改變參數之前就已經登陸了,我們要給他設置生效呢,就要退出當前session,重新再進入
發現他已經變成3600秒,這個就是我剛才說的那種情況show variables where variable_name='wait_timeout' or variable_name='interactive_timeout';
就是配置完成之后,我們要重新退出, 才能使我們的配置生效,如果我們不想重新登陸,那么要怎么做呢,其實對于我們可以控制的連接來說,是很簡單的,只要對session級的參數進行配置就可以了,而對于我們無法控制的連接呢,在MYSQL5.7之前,是沒有辦法的,只能把它斷開在登陸,而5.7之后呢,有的參數也是支持可以設置其他參數的配置值,另外還有一點需要我們注意的是,不要輕易的在全局參數中進行設置,因為有一些緩存,會一次性分配全部的內存,而不管實際上需要多么大,所以對于這種參數呢,一個全局設置可能會浪費大量的內存,對于這種情況最好的辦法就是修改連接session級別的配置
?
總結
以上是生活随笔為你收集整理的MySQL服务器参数介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何选择存储引擎
- 下一篇: 数据库设计对性能的影响