聊聊MySQL配置。 大多數(shù)開發(fā)者可能不太會關注MySQL的配置,畢竟在基本配置沒有問題的情況下,把更多的精力放在schema設計、索引優(yōu)化和SQL優(yōu)化上,是非常務實的策略。這時,如果再花力氣去優(yōu)化配置項,獲得的收益通常都比較小。更多的時候,基于安全因素的考量,普通開發(fā)者很少能夠接觸到生產(chǎn)環(huán)境的MySQL配置。正是這樣,導致開發(fā)者(包括我)對MySQL的配置不甚了解,希望本文能幫你更好的了解MySQL配置。 如果讓你在某種環(huán)境上安裝配置MySQL,你會怎么做?安裝后,直接copy修改示例配置文件,應該是大多數(shù)人的做法。但強烈建議不要怎么做,首先,示例配置文件有非常多注釋掉的配置項,它可能會誘使你打開一個你并不了解的配置,而且這些注釋還不一定準確。其次,MySQL的一些配置對于現(xiàn)代化的硬件和工作負載來說,有點過時了。 MySQL有非常多的配置項可以修改,但大多數(shù)情況下,你都不應該隨便修改它,因為錯誤或者沒用的配置導致的潛在風險非常大,而且還很難定位問題。確?;九渲谜_,然后小心診斷問題,確認問題恰好可以通過某個配置項解決,緊接著再修改這個配置吧。 其實,創(chuàng)建一個好的配置,最快方法不是從學習配置項開始,也不是問哪個配置項應該怎么設置或者怎么修改開始,更不是從檢查服務器行為和詢問哪個配置項可以提升性能開始。最好是從理解MySQL內(nèi)核和行為開始,然后利用這些知識來指導你配置MySQL。 就從理解MySQL配置的工作原理開始吧。 MySQL配置的工作原理MySQL從哪兒獲得配置信息:命令行參數(shù)和配置文件。類Unix系統(tǒng)中,配置文件一般位于 /etc/my.cnf 或者 /etc/mysql/my.cnf。在啟動時,可以通過命令行參數(shù)指定配置文件的位置,當然命令行中也可以指定其它參數(shù),服務器會讀取配置文件的內(nèi)容,刪除所有注釋和換行,然后和命令行選項一起處理。 任何打算長期使用的配置項都應該寫入配置文件,而不是在命令行中指定。一定要清楚的知道MySQL使用的配置文件位置,在修改時不能想當然,比如,修改了/etc/my.cnf的配置項,但MySQL實際并未使用這個配置文件。如果你不知道當前使用的配置文件路徑,可以嘗試:
一個典型的配置文件包含多個部分,每個部分的開頭是一個方括號括起來的分段名稱。MySQL程序通常讀取跟它同名的分段部分,比如,許多客戶端程序讀取client部分。服務器通常讀取mysqld這一段,一定要確認配置項放在了文件正確的分段中,否則配置是不會生效的。 MySQL每一個配置項均使用小寫,單詞之間用下劃線或者橫線隔開,雖然我們常用的分隔符是下劃線,但如果在命令行或者配置文件中見到如下配置,你要知道,它們其實是等價的:
配置項可以有多個作用域:全局作用域、會話作用域(每個連接作用不同)、對象作用域。很多會話級配置項跟全局配置相等,可以認為是默認值,如果改變會話級配置項,它只影響改動的當前連接,當連接關閉時,所有的參數(shù)變更都會失效。下面有幾個示例配置項:
配置文件中的變量(配置項)有很多(但不是所有)可以在服務器運行時修改,MySQL把這些歸為動態(tài)配置變量:
動態(tài)的設置變量,MySQL關閉時這些變量都會失效。如果在服務器運行時修改了變量的全局值,這個值對當前會話和其他任何已經(jīng)存在的會話都不起效果,這是因為會話的變量值是在連接創(chuàng)建時從全局值初始化而來的。注意,在配置修改后,需要確認是否修改成功。 你可能注意到,上面的示例中,有些使用“=”,有些使用“:=”。對于set命令本身來說,兩種賦值運算符沒有任何區(qū)別,在命令行中使用任一運算符符,均可以生效。而在其他語句中,賦值運算符必須是“:=”,因為在非set語句中“=”被視為比較運算符。具體可以參考如下示例:
有一些配置使用了不同的單位,比如 還有一些配置可以指定后綴單位,比如 小心翼翼的配置MySQL們常常動態(tài)的修改配置,但請務必小心,因為它們可能導致數(shù)據(jù)庫做大量耗時的工作,從而影響數(shù)據(jù)庫的整體性能。比如從緩存中刷新臟塊,不同的刷新方式對I/O的影響差別很大(后文會具體說明)。最好把一些好的習慣作為規(guī)范合并到工作流程中去,就比如: 好習慣1:不要通過配置項的名稱來推斷一個變量的作用不要通過配置項的名稱來推斷一個變量的作用,因為它可能跟你想象的完全不一樣。比如:
這兩個配置都是在掃描MyISAM表時有效,且MySQL會為每個線程分配內(nèi)存。對于前者,MySQL只會在查詢需要使用時才會為該緩存分配內(nèi)存,并且一次性分配該參數(shù)指定大小的全部內(nèi)存,而后者同樣是需要時才分配內(nèi)存,但只分配需要的內(nèi)存大小而不是參數(shù)指定的數(shù)值, 好習慣2:不要輕易在全局修改會話級別的配置對于某些會話級別的設置,不要輕易的在全局增加它們的值,除非你確認這樣做是對的。比如:
好習慣3:配置變量時,并不是值越大越好配置變量時,并不是值越大越好,而且如果設置的值太高,可能更容易導致內(nèi)存問題。在修改完成后,應該通過監(jiān)控來確認變量的修改對服務器整體性能的影響。 好習慣4:規(guī)范注釋,版本控制在配置文件中寫好注釋,可能會節(jié)省自己和同事大量的工作,一個更好的習慣是把配置文件置于版本控制之下。 說完了好習慣,再來說說不好的習慣。 壞習慣1:根據(jù)一些“比率”來調(diào)優(yōu)一個經(jīng)典的按“比率”調(diào)優(yōu)的經(jīng)驗法則是,緩存的命中率應該高于某個百分比,如果命中率過低,則應該增加緩存的大小。這是非常錯誤的意見,大家可以仔細思考一下:緩存的命中率跟緩存大小有必然聯(lián)系嗎?(分母變大,值就變大了?)除非確實是緩存太小了。關于MyISAM鍵緩沖命中率,下文會詳細說明。 壞習慣2:隨便使用調(diào)優(yōu)腳本盡量不要使用調(diào)優(yōu)腳本!不同的業(yè)務場景、不同的硬件環(huán)境對MySQL的性能要求是不一樣的。比如有些業(yè)務對數(shù)據(jù)的完整性要求較高,那么就一定要保證數(shù)據(jù)不丟失,出現(xiàn)故障后可恢復數(shù)據(jù),而有些業(yè)務卻對數(shù)據(jù)的完整性要求沒那么高,但對性能要求更高。因此,即使是同一個變量,在這兩個不同場景下,其配置的值也應該是不同的。那你還能放心的使用網(wǎng)上找到的腳本嗎 ?
給你一個基本的MySQL配置前面已經(jīng)說到,MySQL可配置性太強,看起來需要花很多時間在配置上,但其實大多數(shù)配置的默認值已經(jīng)是最佳的,最好不要輕易改動太多的配置,你甚至不需要知道某些配置的存在。這里有一個最小的示例配置文件,可以作為服務器配置文件的一個起點,其中有一些配置項是必須的。本節(jié)將為你詳細剖析每個配置有何作用?為什么要配置它?怎么確定合適的值?
分段MySQL配置文件的格式為集中式,通常會分成好幾部分,可以為多個程序提供配置,如[client]、[mysqld]、[mysql]等等。MySQL程序通常是讀取與它同名的分段部分。
例如服務器mysqld通常讀取[mysqld]分段下的相關配置項。如果配置項位置不正確,該配置是不會生效的。 GENERAL首先創(chuàng)建一個用戶mysql來運行mysqld進程,請確保這個用戶擁有操作數(shù)據(jù)目錄的權限。設置默認端口為3306,有時為了安全,可能會修改一下。默認選擇Innodb存儲引擎,在大多數(shù)情況下是最好的選擇。但如果默認是InnoDB,卻需要使用MyISAM存儲引擎,請顯式地進行配置。許多用戶認為其數(shù)據(jù)庫使用了某種存儲引擎但實際上卻使用的是另外一種,就是因為默認配置的問題。 接著設置數(shù)據(jù)文件的位置,這里把pid文件和socket文件放到相同的位置,當然也可以選擇其它位置,但要注意的是不要將socket文件和pid文件放到MySQL編譯的默認位置,因為不同版本的MySQL,這兩個文件的默認路徑可能會不一致,最好明確地設置這些文件的位置,以免版本升級時出現(xiàn)問題。
DATA STORAGE
為緩存分配內(nèi)存接下來有許多涉及到緩存的配置項,緩存設置多大,最直接的因素肯定是服務器內(nèi)存的大小。如果服務器只運行MySQL,所有不需要為OS以及查詢處理保留的內(nèi)存都可以用在MySQL緩存。為MySQL緩存分配更多內(nèi)存,可以有效的避免磁盤訪問,提升數(shù)據(jù)庫性能。大部分情況來說最為重要的緩存:
還有一些其他緩存,但它們通常不會使用太多內(nèi)存。關于查詢緩存,前面文章(參考本系列的第一篇)已有介紹,大多數(shù)情況下我們不建議開啟查詢緩存,因此上文的配置中 如果只使用單一存儲引擎,配置服務器就會簡單許多。如果只使用MyISAM表,就可以完全關閉InnoDB,而如果只使用InnoDB,就只需要分配最少的資源給MyISAM(MySQL內(nèi)部系統(tǒng)表使用MyISAM引擎)。但如果是混合使用各種存儲引擎,就很難在他們之間找到恰當?shù)钠胶猓虼酥荒芨鶕?jù)業(yè)務做一個猜測,然后在運行中觀察服務器運行狀況后做出調(diào)整。 MyISAMkey-buffer-size
假設整個數(shù)據(jù)庫中表的索引大小為X,肯定不需要把緩存設置得比X還大,所以當前的索引大小就成為這個配置項的重要依據(jù)??梢酝ㄟ^下面兩種方式來查詢當前索引的大小:
你可能會問,剛創(chuàng)建好的數(shù)據(jù)庫,根本就沒什么數(shù)據(jù),索引文件大小為0,那如何配置鍵緩存大???這時候只能根據(jù)經(jīng)驗值:不超過為操作系統(tǒng)緩存保留內(nèi)存的25% ~ 50%。設置一個基本值,等運行一段時間后,根據(jù)運行情況來調(diào)整鍵緩存大小??偨Y來說,索引大小與OS緩存的25%~50%兩者間取小者。當然還可以計算鍵緩存的使用情況,如果一段時間后還是沒有使用完所有的鍵緩存,就可以把緩沖區(qū)調(diào)小一點,計算緩存區(qū)的使用率可以通過以下公式:
鍵緩存塊大小是一個比較重要的值,因為它影響MyISAM、OS緩存以及文件系統(tǒng)之間的交互。如果緩存塊太小,可能會碰到寫時讀取(OS在寫數(shù)據(jù)之前必須先從磁盤上讀取一些數(shù)據(jù)),關于寫時讀取的相關知識,大家可以自行查閱。 關于緩存命中率,這里再說一點。緩存命中率有什么意義?其實這個數(shù)字沒太大的作用。比如99%和99.9%之間看起來差距很小,但實際上代表了10倍的差距。緩存命中率的實際意義與應用也有很大關系,有些應用可以在命中率99%下良好的工作,有些I/O密集型應用,可能需要99.99%。所以從經(jīng)驗上來說,每秒未命中次數(shù)這個指標實際上會更有用一些。比如每秒5次未命中可能不會導致IO繁忙,但每秒100次緩存未命中則可能出現(xiàn)問題。 MyISAM鍵緩存的每秒未命中次數(shù)可以通過如下命令監(jiān)控:
最后,即使沒有使用任何MyISAM表,依然需要將 myisam-recover
可以設置多個值,每個值用逗號隔開,比如配置文件中的 因此,在默認使用InnoDB存儲引擎時,數(shù)據(jù)庫中只有非常小的MyISAM表時,只需要配置 SAFETY基本配置設置到位后,MySQL已經(jīng)比較安全了,這里僅僅列出兩個需要注意的配置項,如果需要啟用一些使服務器更安全和可靠的設置,可以參考MySQL官方手冊,但需要注意的是,它們其中的一些選項可能會影響性能,畢竟保證安全和可靠需要付出一些代價。 max-allowed-packet
max-connect-errors這個變量是一個MySQL中與安全相關的計數(shù)器值,它主要防止客戶端暴力破解密碼。如果某一個客戶端嘗試連接MySQL服務器失敗超過n次,則MySQL會無條件強制阻止此客戶端連接,直到再次刷新主機緩存或者重啟MySQL服務器。 這個值默認為10,太小了,有時候網(wǎng)絡抽風或者應用配置出現(xiàn)錯誤導致短時間內(nèi)不斷嘗試重連服務器,客戶端就會被列入黑名單,導致無法連接。如果在內(nèi)網(wǎng)環(huán)境,可以確認沒有安全問題可以把這個值設置的大一點,默認值太容易導致問題。 LOGGING接下來看下日志的配置,對于MySQL來說,慢日志和bin-log是非常重要的兩種日志,前者可以幫助應用程序監(jiān)控性能問題,后者在數(shù)據(jù)同步、備份等方面發(fā)揮著非常重要的作用。 關于bin-log的3個配置, sync-binlog
需要注意的是,在5.7.7之前的版本,這個選擇的默認值為0,而后默認值為1,也就是最安全的策略。對于高并發(fā)的性能,需要關注這一點,防止版本升級后出現(xiàn)性能問題。 剩下的4個配置項就沒太多要說的。
CACHES AND LIMITStmp-table-size && max-heap-table-size這兩個配置控制使用Memory引擎的內(nèi)存臨時表可以使用多大的內(nèi)存。如果隱式內(nèi)存臨時表的大小超過這兩個值,將會被轉(zhuǎn)為磁盤MyISAM表(隱式臨時表由服務器創(chuàng)建,用戶保存執(zhí)行中的查詢的中間結果)。 如果查詢語句沒有創(chuàng)建龐大的臨時表(通過合理的索引和查詢設計來避免),可以把這個值設大一點,以免需要把內(nèi)存臨時表轉(zhuǎn)換為磁盤臨時表。但要謹防這個值設置得過大,如果查詢確實會創(chuàng)建很大的臨時表,那么還是使用磁盤比較好,畢竟并發(fā)數(shù)一起來,所需要的內(nèi)存就會急劇增長。 應該簡單的把這兩個變量設為同樣的值,這里選擇了32M,可以通過仔細檢查 query-cache-type && query-cache-size看前面 max-connections用于設置用戶的最大連接數(shù),保證服務器不會應為應用程序激增的連接而不堪重負。如果應用程序有問題,或者服務器遇到連接延遲問題,會創(chuàng)建很多新連接。但如果這些連接不能執(zhí)行查詢,那打開一個連接沒什么好處,所以被“太多的連接”錯誤拒絕是一種快速而且代價小的失敗方式。 在服務器資源允許的情況下,可以把 thread-cache-size線程緩存保存那些當前沒有與連接關聯(lián)但是準備為后面新連接服務的線程。當一個新的連接創(chuàng)建時,如果緩存中有線程存在,MySQL則從緩存中刪除一個線程,并且把它分配給這個新連接。當連接關閉時,如果線程緩存還有空間的話,MySQL又會把線程放回緩存。如果沒有空間的話,MySQL會銷毀這個線程。只要MySQL在緩存里還有空閑的線程,它就可以迅速響應連接請求,因為這樣就不用為每個連接創(chuàng)建新線程。 如何判斷這個值該設置多大? 觀察 open-files-limit在類Uinux系統(tǒng)上我們把它設置得盡可能大?,F(xiàn)代OS中打開句柄開銷都很小,如果此參數(shù)設置過小,可能會遇到“打開的文件太多( table_cache_size表緩存跟線程緩存類似,但存儲的對象是表,其包含表.frm文件的解析結果和一些其他數(shù)據(jù)。準確的說,緩存的數(shù)據(jù)依賴于存儲引擎,比如,對于MyISAM,緩存表的數(shù)據(jù)和索引的文件描述符。表緩存對InnoDB的存儲引擎來說,重要性會小很多,因為InnoDB不依賴它來做那么多的事。 從5.1版本及以后,表緩存就被分為兩個部分:打開表緩存和定義表緩存,分別通過 INNODBInnoDB應該是使用最廣發(fā)的存儲引擎,最重要的配置選項是下面這兩個: innodb-buffer-pool-size如果大部分是InnoDB表,那么InnoDB緩沖池或許比其他任何東西都更需要內(nèi)存,InnoDB緩沖池緩沖的數(shù)據(jù):索引、行數(shù)據(jù)、自適應哈希索引、插入緩沖、鎖以及其他內(nèi)部數(shù)據(jù)結構。InnoDB還使用緩沖池來幫助延遲寫入,這樣就可以合并多個寫入操作,然后一起順序?qū)懭?,提升性能。總之,InnoDB嚴重依賴緩沖池,必須為其分配足夠的內(nèi)存。 當然,如果數(shù)據(jù)量不大且不會快速增長,就沒有必要為緩沖池分配過多的內(nèi)存,把緩沖池配置得比需要緩存的表和索引還要大很多,實際上也沒有什么意義。很大的緩沖池也會帶來一些挑戰(zhàn),例如,預熱和關閉都會花費很長的時間。如果有很多臟頁在緩沖池里,InnoDB關閉時可能會花很長時間來把臟頁寫回數(shù)據(jù)文件。雖然可以快速關閉,但是在啟動時需要做更多的恢復工作,也就是說我們無法同時加速關閉和重啟兩個操作。當有一個很大的緩沖池,重啟服務需要花費很長時間(幾小時或者幾天)來預熱,尤其是磁盤很慢的時候,如果想加快預熱時間,可以在重啟后立刻進行全表掃描或者索引掃描,把索引載入緩沖池。 可以看到示例的配置文件中把這個值配置為12G,這不是一個標準配置,需要根據(jù)具體的硬件來估算。那如何估算? 前面的小節(jié),我們說到,MySQL中最重要的緩存有5種,可以簡單的使用下面的公式計算: InnoDB緩沖池 = 服務器總內(nèi)存 - OS預留 - 服務器上的其他應用占用內(nèi)存 - MySQL自身需要的內(nèi)存 - InnoDB日志文件占用內(nèi)存 - 其它內(nèi)存(MyISAM鍵緩存、查詢緩存等) 具體來看,至少需要為OS保留1~2G內(nèi)存,如果機器內(nèi)存大的話可以預留多一些,建議2GB和總內(nèi)存的5%為基準,以較大者為準,如果機器上還運行著一些內(nèi)存密集型任務,比如,備份任務,那么可以為OS再預留多一些內(nèi)存。不要為OS緩存增加任何內(nèi)存,因為OS通常會利用所有剩下的內(nèi)存來做文件緩存。 一般來說,運行MySQL的服務器很少會運行其他應用程序,但如果有的話,請為這些應用程序預留足夠多的內(nèi)存。 MySQL自身運行還需要一些內(nèi)存,但通常都不會太大。需要考慮MySQL每個連接需要的內(nèi)存,雖然每個連接需要的內(nèi)存都很少,但它還要求一個基本量的內(nèi)存來執(zhí)行任何給定的查詢,而且查詢過程中還需要為排序、GROUP BY等操作分配臨時表內(nèi)存,因此需要為高峰期執(zhí)行大量的查詢預留足夠的內(nèi)存。這個內(nèi)存有多大?只能在運行過程中監(jiān)控。 如果大部分表都是InnoDB,MyISAM鍵緩存配置一個很小值足矣,查詢緩存也建議關閉。 公式中就剩下InnoDB日志文件了,這就是我們接下來要說的。 innodb-log-file-size && innodb-log-files-in-group如果對InnoDB數(shù)據(jù)表有大量的寫入操作,那么選擇合適的 InnoDB使用一個后臺線程智能地刷新這些變更到數(shù)據(jù)文件。實際上,事務日志把數(shù)據(jù)文件的隨機I/O轉(zhuǎn)換為幾乎順序地日志文件和數(shù)據(jù)文件I/O,讓刷新操作在后臺可以更快的完成,并且緩存I/O壓力。 整體的日志文件大小受控于 修改日志文件的大小,需要完全關閉MySQL,然后將舊的日志文件遷移到其他地方,重新配置參數(shù),然后重啟。重啟時需要將舊的日志遷移回來,然后等待MySQL恢復數(shù)據(jù)后,再刪除舊的日志文件,請一定要查看錯誤日志,確認MySQL重啟成功后再刪除舊的日志文件。 想要確定理想的日志文件大小,需要權衡正常數(shù)據(jù)變更的開銷,以及崩潰時恢復需要的時間。如果日志太小,InnoDB將必須要做更多的檢查點,導致更多的日志寫,在極個別情況下,寫語句還會被拖累,在日志沒有空間繼續(xù)寫入前,必須等待變更被刷新到數(shù)據(jù)文件。另一方面,如果日志太大,在崩潰時恢復就得做大量的工作,這可能增大恢復時間。InnoDB會采用checkpoint機制來刷新和恢復數(shù)據(jù),這會加快恢復數(shù)據(jù)的時間,具體可以參考: innodb-flush-log-at-trx-commit前面討論了很多緩存,InnoDB日志也是有緩存的。當InnoDB變更任何數(shù)據(jù)時,會寫一條變更記錄到日志緩存區(qū)。在緩沖慢的時候、事務提交的時候,或者每一秒鐘,InnoDB都會將緩沖區(qū)的日志刷新到磁盤的日志文件。如果有大事務,增加日志緩沖區(qū)大小可以幫助減少I/O,變量 既然存在緩沖區(qū),怎樣刷新日志緩沖就是我們需要關注的問題。日志緩沖必須刷新到磁盤,以確保提交的事務完全被持久化。如果和持久化相比,更在乎性能,可以修改innodb-flush-log-at-trx-commit變量來控制日志緩沖刷新的頻率。
1是最安全的設置,保證不會丟失任何已經(jīng)提交的事務,這也是默認的設置。0和2最主要的區(qū)別是,如果MySQL掛了,2不會丟失事務,但0有可能,2在每次事務提交時,至少將日志緩沖刷新到操作系統(tǒng)的緩存,而0則不會。如果整個服務器掛了或者斷電了,則還是可能會丟失一些事務。 innodb-flush-method前面都在討論使用什么樣的策略刷新、以及何時刷新日志或者數(shù)據(jù),那InnoDB具體是怎樣刷新數(shù)據(jù)的?使用 這個選項既會影響日志文件,也會影響數(shù)據(jù)文件,而且有時候?qū)Σ煌愋偷奈募奶幚硪膊灰粯?,導致這個選項有些難以理解。如果有一個選項來配置日志文件,一個選項來配置數(shù)據(jù)文件,應該會更好,但實際上它們混合在同一個配置項中。這里只介紹類Unix操作系統(tǒng)下的選項。 fdatasyncInnoDB調(diào)用
這些優(yōu)化在特定的場景下才會起作用, 0_DIRCET這個設置不影響日志文件并且不是所有的類Unix系統(tǒng)都有效,但至少在Linux、FreeBSD以及Solaris是支持的。這個設置依然使用fsync來刷新文件到磁盤,但是它完全關閉了操作系統(tǒng)緩存,并且是所有的讀和寫都直接通過存儲設置,避免了雙重緩沖。如果存儲設備支持寫緩沖或預讀,那么這個選項并不會影響到設備的設置,比如RAID卡。 0_DSYNC這個選項使得所有的寫同步,即只有數(shù)據(jù)寫到磁盤后寫操作才返回,但它只影響日志文件,而不影響數(shù)據(jù)文件。 說完了每個配置的作用,最后是一些建議:如果使用類Unix操作系統(tǒng)并且RAID控制器帶有電池保護的寫緩存,建議使用0_DIRECT,如果不是,默認值或者0_DIRECT都可能是最好的選擇。 innodb-file-per-table最后一個配置,說說InnoDB表空間,InnoDB把數(shù)據(jù)保存在表空間內(nèi),它本質(zhì)上是一個由一個或者多個磁盤文件組成的虛擬文件系統(tǒng)。InnoDB表空間并不只是存儲表和索引,它還保存了回滾日志、插入緩沖、雙寫緩沖以及其他內(nèi)部數(shù)據(jù)結構,除此之外,表空間還實現(xiàn)了很多其它的功能??梢酝ㄟ^innodb-data-file-path配置項定制表空間文件,
這里在3個文件中創(chuàng)建了3G表空間,為了允許表空間在超過了分配的空間時還能增長,可以像這樣配置最后一個文件自動擴展
總結MySQL有太多的配置項,這里沒有辦法一一列舉,重要的是了解每個配置的工作原理,從一個基礎配置文件開始,設置符合服務器軟硬件環(huán)境與工作負載的基本選項。 參考資料[1] Baron Scbwartz 等著;寧海元 周振興等譯;高性能MySQL(第三版); 電子工業(yè)出版社, 2013
|
|