
**
前言
為什麼要寫本書
本書主要講述mysql dba的必備技能,包括mysql的安裝部署、開發、測試、監控和運維,此外,讀者還可從中學習到系統架構的一些知識。
我從業10多年,先是在傳統行業做開發工程師、系統管理者、oracle dba,2008年因為機緣巧合投身網際網路,開始從事mysql運維工作。相對于成熟的商業資料庫,mysql缺乏高品質的技術文檔和圖書,我在接觸mysql的過程中,也感覺市面上的相關圖書還存在一些不足,難以系統化地學習mysql。
從一名oracle dba轉型為一名mysql dba,從傳統領域轉投到網際網路公司,即便我之前有豐富的經驗,在學習mysql的過程中也仍然走了一些彎路。成為一名mysql dba并不難,但成為一名高水準的mysql dba則需要時間、知識、技能、經驗和意識的積累。
我在學習mysql的過程中,有時會去看技術論壇,或者通過msn群等聊天工具咨詢他人一些問題,也得到過一些朋友的幫助。國記憶體在一批高素質的mysql dba,但由于各種現實因素,有心寫一本關于mysql dba實戰的書的人很少,是以市面上缺乏高品質的相關圖書不足為奇。2013年年初,華章公司的策劃編輯楊繡國找到我,說希望我能寫一本關于mysql的書,我當時很猶豫,雖然我有時會在網上回答一些問題,也定期撰寫個人部落格,但是,寫一本書,對于我來說,是一個艱巨的任務。經過一些交流,我慢慢明确了自己的想法,其實我一直是想寫一本書的,既然我對市面上的相關圖書不太滿意,那麼就自己寫一本吧,當時我唯一欠缺的是寫作經驗以及時間。
我寫這本書的目的是想做一個嘗試——引領感興趣的讀者進入mysql資料庫運維領域。國内網際網路行業正在高速發展,迫切需要大量的mysql人才,希望這本書可以幫助一些讀者順利進入資料庫領域。而且,我也想将自己的一些心得分享給讀者,希望熱愛資料庫技術的同行們在工作中少走彎路。
在技術領域工作多年後,文字寫作對于我來說其實已經很陌生了,弗朗西斯·培根說過,“閱讀使人充實,談論使人機敏,寫作使人精确”。在本書的寫作的過程中,其實我自己也獲得了很多,不僅學到了更多的知識,對于自己的精神也是一種洗禮。寫作真的是一種積極而富有價值的創作,我們隻有正确地掌握所講述的内容,才能為言行思想帶來正能量。
希望在這個世界上,有越來越多的人願意分享,且能享受分享的樂趣。
讀者對象
本書的主要讀者是mysql dba,在現實中,許多公司并沒有配備專職的資料庫維護人員,資料庫的維護工作往往也是由開發工程師和系統管理者負責的,是以這本書也适用于他們。
這是一本偏向實戰的技術書籍,不會過多地涉及技術的細節和原理,我會盡量直接地給出解決方案;本書除了講mysql技能,還花了大量篇幅講述架構;本書不僅講述技術,也講述技術之外的一些運維管理規則。對資料庫的使用、維護和管理感興趣的運維工程師、架構師、運維經理、開發工程師、測試工程師都可以将本書作為參考圖書,而了解其他領域會有助于你的職業發展。
本書也适合希望轉行到資料庫運維領域的人士。許多人想從事it工作,但當下時間寶貴,要想進入一個行業或改變職業方向,往往會花費巨大的時間成本,是以這本書将盡量做到簡單、易懂,以節省大家的學習成本。
如何閱讀本書
本書将分為5個部分,分别從入門、開發、測試、運維、性能與架構這幾個方面來介紹mysql的使用。對于初次接觸mysql的讀者,建議按照章節順序逐漸學習。對于已經有一定經驗的讀者,則可以選擇自己感興趣的篇章,跳過自己已經熟悉的内容。
第一部分講述了mysql的基礎架構、權限機制、常用的存儲引擎、複制架構、安裝及常用指令等知識。如果讀者是初次接觸mysql,那麼可能還需要在這一部分上花一些時間。在掌握linux和mysql的基本使用方法之後,就可以開始第二部分的學習了。
第二部分将介紹mysql資料庫開發相關的基礎知識和技巧。基礎知識包括關系資料模型、字元集、常用的sql文法、範式、索引和事務等。由于開發的領域很廣,是以本部分僅僅選取了一些常用的技巧分享給大家。最後會結合實際生産,提供一份開發規範供大家參考。
第三部分介紹了資料庫基準測試所需要的理論知識和常用的測試工具。本部分将介紹一個mysql的基準測試模型。
第四部分介紹了mysql運維工作的各項職責:監控、複制、遷移、更新、備份和恢複,然後通過一些案例向讀者傳授一些維護技巧及處理問題的方法。讀者還将學習到規模化運維mysql的一些知識和規則。
第五部分介紹了性能調優的一些理論知識,以及從應用程式到資料庫,再到存儲等各個環節的優化。由于架構和性能優化密切相關,本部分也介紹了一些mysql dba需要熟悉的架構優化知識。初次接觸mysql的讀者對于架構優化的内容可能會感到難以了解,但随着經驗的增長,再了解這些内容将不會再有問題。
本書假設讀者已經對軟硬體有了一定的認識,掌握了一門腳本語言,并且對unix或linux有一定的使用經驗,對于資料庫有了基本的認識。閱讀本書時,讀者不需要預先準備好上述的所有知識,但需要有意識地在閱讀本書之外不斷地補充自己的基礎知識。我會對以上内容做深入的講解,但如果讀者有基礎會更好,好的基礎有利于快速吸收知識和深入思考問題。如果讀者還不會使用linux和編寫shell腳本,那麼,建議盡快搭建一個學習環境。
由于dba需要和研發、測試、産品、營運、監控等團隊進行合作,是以對于相關領域所涉及的資料庫知識,本書也會做一些介紹。但是,由于經驗側重的關系,本書将主要從dba的角度來講述這些知識和技能。
本書主要基于mysql官方5.1版本寫作,這也是目前最流行的版本,我會補充mysql最新版本的少許内容,但跟蹤mysql新版本更合适的政策是關注官方釋出的新特性說明、新版本的文檔手冊,跟蹤業内專家的技術部落格和社交媒體等。
通過閱讀本書,讀者可以學到mysql的許多知識,但是僅通過閱讀是難以獲得技能和經驗的。讀者需要有一個适合自己的mysql測試環境,并能夠不斷地思考和實踐自己的想法,這樣才能夠掌握技能,并得到屬于自己的經驗。
目錄
第一部分 入門篇
**[第1章 了解mysql
1.1.1 應用領域和适用場景
1.1.2 為什麼那麼多公司和機構選擇使用mysql
1.1.3 mysql的優勢是什麼,它解決了什麼問題
<a href="https://yq.aliyun.com/articles/89683">1.2 mysql的基礎架構和版本</a>
1.2.1 軟體架構中資料庫的定位
1.2.2 mysql的基礎架構
1.2.3 mysql的版本及特性
1.2.4 mysql的開發周期
<a href="https://yq.aliyun.com/articles/89698">1.3 查詢執行過程概述</a>
<a href="https://yq.aliyun.com/articles/89702">1.4 mysql權限</a>
1.4.1 mysql權限機制
1.4.2 賦予權限和回收權限
<a href="https://yq.aliyun.com/articles/89728">1.5 長連接配接、短連接配接、連接配接池</a>
1.5.1 短連接配接
1.5.2 長連接配接
1.5.3 連接配接池
1.5.4 持久連接配接和連接配接池的差別
<a href="https://yq.aliyun.com/articles/89734">1.6 存儲引擎簡介</a>
1.6.1 innodb引擎
1.6.2 myisam引擎
1.6.3 memory存儲引擎
1.6.4 archive存儲引擎
1.6.5 選擇合适的引擎
1.6.6 選擇何種平台
<a href="https://yq.aliyun.com/articles/89740">1.7 mysql複制架構</a>
<a href="https://yq.aliyun.com/articles/89744">1.8 一些基礎概念</a>
**[第2章 mysql安裝部署和入門
<a href="https://yq.aliyun.com/articles/89751">2.2 官方版本的安裝</a>
2.2.1 二進制包的安裝
2.2.2 源碼編譯安裝
<a href="https://yq.aliyun.com/articles/89755">2.3 其他mysql分支的安裝</a>
<a href="https://yq.aliyun.com/articles/89758">2.4 安裝innodb plugin</a>
<a href="https://yq.aliyun.com/articles/89762">2.5 常用指令</a>
2.5.1 使用mysql指令
2.5.2 使用mysqladmin指令
2.5.3 使用mysqldump指令
<a href="https://yq.aliyun.com/articles/89774">2.6 mysql的主要參數設定</a>
第二部分 開發篇
**[第3章 開發基礎
<a href="https://yq.aliyun.com/articles/89827">3.2 資料模型</a>
3.2.1 關系資料模型介紹
3.2.2 實體–關系模組化
3.2.3 其他資料模型
<a href="https://yq.aliyun.com/articles/89933">3.3 sql基礎</a>
3.3.1 變量
3.3.2 保留字
3.3.3 mysql注釋
3.3.4 資料類型
3.3.5 函數
3.3.6 操作符及優先級
3.3.7 mysql示例employees資料庫
3.3.8 sql文法
<a href="https://yq.aliyun.com/articles/89950">3.4 php開發</a>
3.4.1 概述
3.4.2 用戶端通路過程
3.4.3 開發工具
3.4.4 操作資料
3.4.5 php資料庫開發建議
<a href="https://yq.aliyun.com/articles/89974">3.5 索引</a>
3.5.1 索引介紹
3.5.2 使用索引的場景及注意事項
3.5.3 索引的錯誤用法
3.5.4 如何使用explain工具
3.5.5 優化索引的方法學
<a href="https://yq.aliyun.com/articles/89981">3.6 id主鍵</a>
<a href="https://yq.aliyun.com/articles/89987">3.7 字元集和國際化支援</a>
3.7.1 什麼是字元集
3.7.2 國際化支援
3.7.3 字元集設定