天天看點

《MySQL DBA修煉之道》——第1章 了解MySQL 1.1MySQL 介紹

本節書摘來自華章出版社《mysql dba修煉之道》一書中的第1章,第1.1節,作者:陳曉勇,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

本章将介紹mysql的一些常識,以及目前mysql的發展現狀。然後簡要說明mysql的基礎架構、存儲引擎、運作機制,以及工作中應該如何使用mysql,為後面章節的學習做個鋪墊。

1.1.1 應用領域和适用場景

mysql是目前世界上最流行的開源關系資料庫。在國内,mysql大量應用于網際網路行業,比如,大家所熟知的百度、騰訊、阿裡、京東、網易、新浪等都在使用mysql。搜尋、社交、電商、遊戲後端的核心存儲往往都是mysql,有的具有上千台甚至幾千台mysql資料庫主機。可以說,支撐網際網路公司日常運轉的主要資料庫就是mysql。近年來,随着業務的發展,網際網路公司産生了許多成熟的架構和技術,這也促使mysql不斷變得更加成熟和穩健。但mysql的應用并未局限于網際網路應用,許多軟體開發商也把mysql內建到了自己的産品中,這樣一來,傳統行業的大公司也都可以在企業内部大量使用mysql存儲企業資料了,包括政府資訊系統,同樣也在大量使用mysql資料庫。

mysql的定位是通用的資料庫,各種類型的應用一般都能利用到mysql存取資料的優勢。業内生産實踐也證明,mysql更适合中小型資料庫、oltp業務,以目前的軟硬體産品水準來看,如果單機資料超過幾個tb将難以高效利用mysql。

mysql可以作為傳統的關系型資料庫産品使用,也可以當作一個key-value産品來使用,由于它具有優秀的災難恢複功能,是以相對于目前市場上的一些key-value産品會更有優勢。

我們所說的mysql更适合oltp業務、中小型資料庫,并不是說mysql僅限于此,資料的存儲往往是一個架構問題,如果配合架構,mysql也是可以存儲海量資料的。海量資料沒有一個明确的标準,對于mysql來說,我們可以簡單地認為海量資料是指單個執行個體難以處理的幾十億以上的資料。不過,mysql對于海量資料的分析就不擅長了,你可能還需要其他産品來協助解決這方面的問題。一般而言,中小型公司最佳的選擇仍然是mysql,畢竟在這類公司裡,海量資料并不常見。下面讓我們來看看部分知名網際網路公司的mysql主機規模,一些公開資料顯示如下。

facebook 2008年有10 000台伺服器,其中包括1800台mysql伺服器,到2013年已經突破了20萬台伺服器,按40?∶?1計算,mysql伺服器至少也有五千台了。

twitter 早在2011年就有2000~4000台伺服器,絕大部分資料後端的持久化存儲都是mysql伺服器。

對于國内的幾大網際網路公司,如阿裡、百度、騰訊,依據公開的資訊,它們均有千台以上mysql伺服器的規模。

這些大型網際網路公司都注重使用mysql,而且往往也在内部維護了一個mysql的分支,同時它們也積極參與到mysql社群,促使mysql不斷改進。

1.1.2 為什麼那麼多公司和機構選擇使用mysql

它們選擇使用mysql的主要原因有以下兩點。

低成本、高效能。

處于起步階段的團隊、小公司需要一個開放的系統來适應發展的需要。

網際網路公司,特别是處于起步階段的公司,需要一個低成本的系統來建構服務,進而可以把更多的資金用于業務的擴張。lamp(其中的“m”指的就是mysql)的組合已被廣泛應用——目前世界上的大部分網站使用的都是lamp(或者lnmp)組合。由于它是免費的,lamp自然就成了第一選擇,一般而言,選擇成熟可靠、使用人數廣泛的産品,公司的技術風險也會大大降低。同時mysql是一個開放的系統,源代碼開放,社群成熟活躍,在公司發展壯大的過程中,可以不斷從外部擷取成熟的思想和解決方案。可以說mysql已經建構了成熟的生态圈,使用它的人往往能得到許多益處,而且相對于目前市場上的其他産品,mysql也具備許多優勢。

一些公司出于節省成本和擴充性的考慮,嘗試把某些業務從商業資料庫遷移到mysql上,比如阿裡,由于資料庫叢集的規模巨大,傳統的基于小型機和高端的存儲架構難以擴充,且支出成本龐大,是以把大部分業務逐漸遷移到pc伺服器的mysql叢集上,成功地降低了成本。

1.1.3 mysql的優勢是什麼,它解決了什麼問題

mysql是一個輕量級的通用關系型資料庫,具有穩定、易安裝、易使用、高性能等特點,可配合架構進行擴充。它的安裝包不大,百mb級别,安裝簡單友善,入門也很簡單,而一些商業化的關系型資料庫産品往往安裝包龐大,且配置使用複雜,需要開發人員或dba花費幾倍的時間去掌握産品的使用。

mysql起初也有很多bug,而且不太穩定,但經過十多年的發展,目前的mysql(5.0/5.1)已經很穩定了。新的5.5/5.6/5.7也釋出了ga版本,正在持續完善中,截至2015年年底,我們可以看到mysql 5.1/5.5已經大量應用于生産環境了。

此外,mysql也是一個高性能的産品,它不僅适用于中小型公司,還能穩定高效地處理大資料。業記憶體在一種誤解,認為mysql的擴充性不好,若超過一定的資料量時,性能就會下降。其實這更多的是一個架構問題,配合成熟的架構,比如在應用層切分資料,mysql的擴充性就不再是什麼問題了,而且很多資料是能夠分片到各個mysql節點的。facebook、twitter、google等都在大量使用mysql存儲海量資料。

一些人傾向于用nosql産品來存儲資料,其實,nosql産品,特别是一些key-value單機産品,相對于mysql來說并沒有什麼優勢。mysql同樣可以把資料存儲為key-value的形式,并且,nosql的産品還不是很穩定,一旦資料丢失就可能會導緻很嚴重的損失,又往往因為資料模型簡單,是以應用範圍狹小。mysql成熟穩定且擁有豐富的資料類型,它的關系模型可以滿足項目不斷增加的商業需求。