先給出我的核心觀點:學習,無論你是學什麼,也無論你有沒有基礎。思考永遠是第一位的,有些知識你沒接觸過不要緊,用不着害怕,也沒必要害怕。重要的是一秒鐘也不要停止思考,問題要想透徹,正所謂磨刀不誤砍柴工。尤其是作爲工程師,要有打破砂鍋問到底的精神,否則你怎麼學都沒用。
首先概覽下mysql的知識體系:
基礎:
sql語句
表結構設計
調優:
索引、慢查詢優化
配置參數調優
核心原理:
InnoDb存儲引擎 (包括隔離級別、事務、鎖、緩存池、回滾日誌等等)
Mysqld (包括連接管理、進程管理、查詢緩存、查詢優化、日誌等等)
架構與運維:
用戶與權限、安全
備份與恢復
日誌
分佈式與高可用
對於零基礎的童鞋:
首先,學習基本的SQL語法。完成這個後,你就可以編寫SQL語句了。
這一步推薦:W3Schools的 SQL 教程。
其次,學習數據庫的主要功能和使用方法,比如用戶相關或者權限相關等等。
我推薦兩本書:
一、《MySQL必知必會》 這本書講的非常全,從基本概念,到查詢到插入新建表,用戶的管理,都有具體的例子,非常適合沒有任何基礎的同學來學習Mysql,總之這本書學習的方法就是:1、十分鐘瞭解下數據庫的基本概念 2、找到練手的數據庫 3、對照着上面的內容去敲。本書裏也有大量的內容是講sql的,可以結合w3c的sql教程一起,有取捨地看。
二、《數據庫系統概念》這本書是dba必看的。
看完這些並且實踐+思考之後,可以算入門了。
接下來對於希望深入學習的童鞋
我推薦幾本書(很多大神都這麼推薦),《高性能MySQL(第3版)》、 《MySQL技術內幕(第4版)》,《MySQL技術內幕 InnoDB存儲引擎》,《深入理解MySQL》還有Mysql的官網。讀完這些東西,再加些豐富的經驗,理論上來講就具備DBA的水平了。
十分推薦閱讀Planet MySQL上彙總的博客,特別是Percona's MySQL & InnoDB performance and scalability blog
但是,正如我開頭所言的。面對問題的時候一定要積極思考!
比如:
我問你,面對一個併發量比較高的場景,如何配置mysql的連接數?
你可能會回答:“哦,就是調高max_connection的數值吧。”
那,你有沒有思考過調到多少是最合適的呢?爲什麼這樣設置就最合適呢?
也許你會回答:“恩我知道,可以看系統之前的max_used_connection的數值,然後來設置。也可以調高back_log的值。”
那你有沒有思考過,max_connection連接數太高會有什麼不好的影響呢?back_log設置的太高有什麼不好的地方呢?max_connect的上限其實是取決於mysql能獲得的文件描述符的數量,也就是說你就算設置成10000,最後也是沒用的,系統會根據機器的情況自動調低。
也許你會回答:“恩我知道,設置太高,會有系統開銷...”
那你有沒有思考過,這些開銷具體是什麼呢?是什麼工作導致了需要這些內存開銷?
也許你還會回答,在連接創建的時候,會立刻爲它分配連接緩衝區以及查詢緩衝區,這些都會吃內存。
那你有沒有思考過,佔據的資源具體是多少呢?取決於哪些因素呢?
好了,我們先結束這個問題。回到知乎的問題上來,其實我說了這麼多,就是表達要如何自學mysql。
所以的所以,你必須不斷思考,才能在工作中面對具體場景的時候,非常淡定地推斷:“哦,一定是這裏出了問題。應該怎麼怎麼做。”
面對問題,拿出打破砂鍋問到底的精神,先思考一番,給出自己的假設,不要着急地去找度娘,谷歌。思考過後,帶着你的推斷或者答案,大膽地去搜索吧!去看看別人的見解,去看看官方的描述!
這纔是一個工程師應有的態度。
最後我想給出一些有價值的學習資料。可以省去一些時間。
-電子書:
我認爲多看書還是有好處的。有些書值得反覆看許多遍,有時候只看一遍無法深刻理解吸收,思考也不夠充分。
《mysql必知必會》
《高性能mysql第三版》
《數據庫系統概念》
《深入理解MySQL》
《MySQL性能調優與架構設計--全冊》《SQL Antipatterns》
《MySQL技術內幕 InnoDB存儲引擎》
-學習mysql的網站:
MySQL Tutorial - Learn MySQL Fast, Easy and Fun.
可以快速,簡單和有趣的學習MySQL。以簡單易懂的方式爲您提供完整的MySQL教程。每個教程都有SQL腳本和可用屏幕截圖的實際示例。
有很多mysql的資料可以看,還可以看網友做的學習筆記。
W3Schools SQL 教程
可以學習基礎的sql語句
-閱讀官方手冊
無論英文好不好,看英文手冊的能力是一定要有,也一定要培養的。
mysql官方手冊:14 The InnoDB Storage Engine
最後就是,要多用。