MySQL資料庫 本節目錄 一 資料庫概述 二 MySQL介紹 三 MySQL的下載安裝、簡單應用及目錄介紹 四 root用戶密碼設置及忘記密碼的解決方案 五 修改字元集編碼 六 初識sql語句 一 資料庫概述 1. 資料庫??? 什麼是資料庫呢? 先來看看百度怎麼說的 資料庫,簡而言之可視為電子化 ...
MySQL資料庫
本節目錄
一 資料庫概述
1. 資料庫???
什麼是資料庫呢?
先來看看百度怎麼說的
資料庫,簡而言之可視為電子化的文件櫃——存儲電子文件的處所,用戶可以對文件中的數據運行新增、截取、更新、刪除等操作。
所謂“資料庫”系以一定方式儲存在一起、能予多個用戶共用、具有儘可能小的冗餘度、與應用程式彼此獨立的數據集合。
百度的貌似不好理解啊,讓我說啊,資料庫是存儲數據的地方,超哥,你這不是廢話麽?這位同學,你你你你你說的對,哈哈,存數據的地方是存在哪裡呢,存在硬碟上,為什麼不是存在記憶體裡面,因為記憶體無法永久保存。之前我們存數據都是使用的文件,在一個word文檔裡面寫一些羞羞的網址,然後保存,就存儲到硬碟上了。有同學就會說了,超哥,我這通過文件不是也將數據保存上了嗎?是的,沒毛病,但是你想,通過文件來操作數據,效率是不是很低,首先打開關閉就比較慢,其次是我們操作起來也比較麻煩,對不對,如果我想記錄一條關於我個人信息的數據,我使用文檔來存,是不是很不友好,並且我們要查數據的時候,看圖1:圖1是一個word裡面記錄的信息,如果我想查詢出所有人的名字,這個操作是不是就很難搞定了,來來來,配合起來~~,你應該說是的,那我就接著說,有同學可能就會說了,老師我用excel啊,看圖2,一列就搞定了,沒毛病,但是你想打開操作excel效率低不低。並且通過你自己寫的程式來操作這些文件是不是很麻煩,就你們學的open函數。其實效率低的原因是因為我們知道文件都是保存在硬碟上的,硬碟的效率本身就低,所以沒辦法。
所以,為了方便的管理這些數據,又能提高對數據的管理效率,各個公司就開始想辦法了,喊出了口號:我們要寫一套軟體,專門管理數據!!,讓應用程式或者說項目程式不直接和硬碟打交道了,讓我們自己寫的管理數據的軟體來操作數據,並且我們寫的軟體要解決下麵幾個問題:1.直接操作硬碟上的文件效率低 。 2. 通過操作文件來讀寫數據很麻煩。 3. 我們自己的電腦上寫的程式和我們自己電腦上存儲的數據都在這一臺電腦上了,想和別人共用一個數據或者一個文檔也是比較麻煩的,並且如果和別人共用,那麼可能造成自己電腦的安全性變低了,但是公司內部的項目可能就會使用一些共同的數據啊,這樣共用起來就很麻煩。 4. 項目和數據如果都在一個電腦上,例如京東,如果有一天,京東的項目出問題了,或者部署這個項目的電腦(伺服器)崩了,你的數據是不是就麻煩了,嗯,穩定性和安全性都不夠,我們要把數據和項目分開管理,一般公司都會這麼做,看下圖:
通過上面這個圖裡面的思想,貌似解決了共用數據和數據穩定性的問題,但是專門管理數據的機器裡面還是將數據存到硬碟上啊,如果項目直接和硬碟打交道,效率還是差啊,並且雖然數據共用起來了,我們通過前面的學習知道,數據共用起來就會出現數據不安全的問題和數據混亂的問題啊,怎麼辦,加鎖!而且很多項目或者人都可能過來連接中間這個存放數據的機器啊,我們不能讓所有人都能連接這個機器啊,怎麼辦,加連接驗證!並且要做好備份,因為現在數據多重要啊,所以還要支持做數據備份的工作!多個人連接使用這個機器中的數據的時候,還要支持併發啊,每個人的感覺都是自己單獨的在操作這個機器啊,怎麼辦,支持併發!
哎,想要好好的玩數據,還真是tm的麻煩,不過各個公司都不怕艱難,都在努力的搞事情,搞一套可以高效管理數據的工具,稱之為資料庫管理軟體/系統(應用軟體)
又出來一個新詞啊,資料庫管理系統,來,先看看百度怎麼解釋的
資料庫管理系統(英語:Database Management System,簡稱DBMS)是為管理資料庫而設計的電腦軟體系統,一般具有存儲、截取、安全保障、備份等基礎功能。資料庫管理系統可以依據它所支持的資料庫模型來作分類,例如關係式、XML;或依據所支持的電腦類型來作分類,例如伺服器群集、行動電話;或依據所用查詢語言來作分類,例如SQL、XQuery;或依據性能沖量重點來作分類,例如最大規模、最高運行速度;亦或其他的分類方式。不論使用哪種分類方式,一些DBMS能夠跨類別,例如,同時支持多種查詢語言。
貌似又是不好理解,來吧,通俗解釋--> 這個工具負責來和硬碟打交道(當然中間還隔著操作系統),高效的管理數據,並且還支持對外通信,網路通信都是基於的socket,也就是說它還相當於一個socket服務端,那麼想來到這個存數據的機器上來操作數據的人或者項目都可以連接到這個工具,並通過這個工具來管理數據,那麼我們就可以通過下麵這個圖來看看這工具的工作方式:
上面這個圖是不是就一目瞭然了,這個數據管理系統我們稱之為DBMS,DB(database)就是資料庫的意義,M(manage)就是管理的意思,S(system)就是系統的意思,其實就是英文名的首字元縮寫。市場上冒出了很多優秀的資料庫管理系統,例如:mysql、oracle、db2等等,人家開發好了,你使用就行了,既然是使用別人寫好的資料庫管理系統,那麼我們在操作的時候,就要按照人家的規範來操作,這個規範叫做sql,我們通過這個系統來操作數據的語句叫做sql語句。那麼過程就是這個樣子的:首先下載安裝人家的數據管理系統,然後啟動系統,我們的項目如果想通過這個系統來操作數據,那麼就需要你的項目中位元組寫一個socket客戶端,要滿足人家這個系統的服務端的消息格式要求,然後就按照人家規定好的sql語句寫好操作數據的命令,使用你的寫好的客戶端通過網路發送給這個存放數據的機器上的數據管理系統的服務端,服務端街道這個命令之後,解析,然後產生對應的數據操作,你要是查詢數據,就將查詢數來的數據原路返回給你,如果你要是修改數據,那麼我服務端就在系統上修改對應的數據。這就是整個操作流程了,其實這個系統就是一個基於socket編寫的C/S架構的軟體。
有人稱這個數據管理系統為資料庫,有人稱這個存放數據的機器叫做資料庫,有人稱裡面的一個存放數據的庫叫做資料庫,(存放數據的庫,其實就是將數據分開管理,例如:你有兩個項目來使用這個數據管理系統,那麼我們兩個項目的數據肯定是不能摻和在一塊的對不對,那麼就需要分開管理,分開管理的是可以給每個項目單獨創建一個庫,每個庫存放自己項目對應的數據,有人稱這個庫為資料庫),但是不管怎麼稱呼,你結合他當時說話的場景,就能夠理解他指的是什麼了,反正大意也都差不多,這個知道就好了。那麼我們來看看有哪些NB的資料庫管理系統啊,看下節的分類(還是先安裝一下mysql搞一下看看在看分類吧!直接看第三大節)。
2. 資料庫分類
目前的資料庫可以分為兩個大類:關係型資料庫和非關係型資料庫
2.1 關係型資料庫(RDBMS)
解釋:關係型資料庫模型是把複雜的數據結構歸結為簡單的二元關係(即二維表格形式,不是excel,但是和excel的形式很像),結合下圖來看一下,
這個表看著好亂啊,但是你細看一下,這幾個表之間建立了某種關係,共用著雙方的數據。這就是關係。關係型資料庫裡面存數據的時候就類似這個樣子的。有個大概瞭解了嗎~~~
操作關係型資料庫的命令,我們稱之為SQL,看解釋
結構化查詢語言(Structured Query Language)簡稱SQL(發音:/ˈes kjuː ˈel/ "S-Q-L"),是一種特殊目的的編程語言,是一種資料庫查詢和程式設計語言,用於存取數據以及查詢、更新和管理關係資料庫系統;同時也是資料庫腳本文件的擴展名。 結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶瞭解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統, 可以使用相同的結構化查詢語言作為數據輸入與管理的介面。結構化查詢語言語句可以嵌套,這使它具有極大的靈活性和強大的功能。 1986年10月,美國國家標準協會對SQL進行規範後,以此作為關係式資料庫管理系統的標準語言(ANSI X3. 135-1986),1987年得到國際標準組織的支持下成為國際標準。不過各種通行的資料庫系統在其實踐過程中都對SQL規範作了某些編改和擴充。所以,實際上不同資料庫系統之間的SQL不能完全相互通用
其中最後一句挺重要的:不同資料庫系統之間的SQL不能完全相互通用
常用的關係型資料庫:
2.1.1 oracle資料庫 Oracle前身叫SDL、由Larry Ellison和兩個變成任意在1977創辦,他們開發了主機的拳頭產品,在市場上大量銷售。Oracle公司是最早開發關係型資料庫的廠商之一,其產品支持最廣泛的操作系統平臺。目前Oracle關係資料庫產品的市場占有率數一數二 。 Oracle公司是目前全球最大的資料庫軟體公司,也是近年業務增長極為迅速的軟體提供與服務商 主要應用範圍:傳統大企業、大公司、政府、金融、證券等。 版本升級:oracle8i,oracle9i,oracle10g,oracle11g,oracle12c 2.1.2 MySQL MySQL被廣泛的應用在Internet上的大中小型網站中。由於體積小、速度快、總體擁有成本低,開放源代碼 2.1.3 MariaDB資料庫 MAriaDB資料庫管理系統是MySQL資料庫的一個分支,主要由開元社區維護,採用GPL授權許可。開發這個MariaDB的原因之一是:甲骨文公司收購了MySQL後,有MySQL閉源的潛在風險,因此MySQL開元社區採用分支的方式來避開這個風險。 MariaDB基於事務的Maria存儲引擎,替換了MySQL的MyISAM的存儲引擎,它使用了Percona的XtraDB(InnoDB的變體)這個版本還包括了PrimeBase XT (PBXT)和Federated X存儲引擎。 2.1.4 SQL Server資料庫 Microsoft SQL Server是微軟公司開發的大型關係資料庫系統。SQL Server的功能比較全面,效率高,可以作為中型企業或單位的資料庫平臺。SQL Server可以與Winodws操作系統緊密集成,不論是應用程式開發速度還是系統事務處理運行速度,都得到較大的提升,對於在Windows平臺上開發的各種企業級信息管理系統來說,不論是C/S(客戶機/伺服器)架構還是B/S(瀏覽器/伺服器)架構。SQL Server都是一個很好的選擇。SQL Server的缺點是只能在Windows系統下運行 2.1.5 Access資料庫 Access是入門級小型桌面資料庫,性能安全性都很一般,可供個人管理或小型企業只用 Access不是資料庫語言,只是一個資料庫程式,目前最新版本為Office 2007,其特點主要如下: (1)完善地管理各種資料庫對象,具有強大的數據組織,用戶管理、安全檢查等功能 (2)強大的數據處理功能,在一個工作組級別的網路環境中,使用Access開發的多用戶管理系統具有傳統的XSASE(DBASE、FoxBASE的統稱)資料庫系統所無法實現的客戶伺服器(Ckient/Server)結構和響應的資料庫安全機制,Access具備了許多先進的大型數據管理管理系統所具備的特征。 (3)可以方便地生成各種數據對象,利用存儲的數據建立窗體和報表 (4)作為Office套件的一部分,可以與Office集成,實現無縫連接 (5)能夠利用Web檢索和發佈數據,實現與Internet的連接,Access主要適用於中小企業應用系統,或作為客戶機/伺服器系統中的客戶端資料庫。 2.1.6 其他不常用關係型資料庫 DB2,PostgreSQL,Informix,Sybase等。這些關係型資料庫逐步的淡化了普通運維的實現,特別是互聯網公司幾乎見不到
2.2 非關係型資料庫
非關係型資料庫也被成為NoSQL資料庫,NOSQL的本意是“Not Olnly SQL”
指的是非關係型資料庫,而不是“No SQL”的意思,因此,NoSQL的產生並不是要徹底地否定關係型資料庫,而是作為傳統關係型資料庫的一個有效補充。NOSQL資料庫在特定的場景下可以發揮出難以想象的高效率和高性能。
隨著互聯網Web2.0網站的星期,傳統的關係型資料庫在應付web2,0網站,特別是對於規模日益擴大的海量數據,超大規模和高併發的微博、微信、SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以剋服的問題。
例如:傳統的關係型資料庫IO瓶頸、性能瓶頸都難以有效突破,於是出現了大批針對特定場景,以高性能和使用便利為目的功能特異化的資料庫產品。NOSQL(非關係型)類的數據就是在這樣的情景下誕生並得到了非常迅速的發展
高性能、高併發、對數據一致性要求不高
開源的NoSQL體系,如Facebook的Cassandra,Apache的HBase,也得到了廣泛認同,Redis,mongb也逐漸越來越受到各類大中小型公司的歡迎和追捧
NOSQL非關係型資料庫小結:
1、NOSQL不是否定關係資料庫,而是作為關係資料庫的一個重要補充
2、NOSQL為了高性能、高併發而生,忽略影響高性能,高併發的功能
3、NOSQL典型產品memcached (純記憶體),redis(持久化緩存),mongodb(文檔的資料庫)
非關係型資料庫又分為以下4種:
(1)鍵值(Key-Value)存儲資料庫 鍵值資料庫就類似傳統語言中使用哈希表,可以通過key來添加、查詢或刪除數據,因為使用key主鍵訪問,所以會獲得很高的性能及擴展性 鍵值(Key-Value)資料庫主要是使用一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。Key/value模型對於IT系統來說的優勢在於簡單、易部署、高併發 k1—>數據 k2—>數據 典型產品:Memcached、Redis、MemcacheDB、BerkeleyDB (2)列存儲(Column-oriedted)資料庫 ======>瞭解即可,一般公司用不到 這部分資料庫通常用來分散式存儲的海量數據,鍵仍然存在,但是他們的特點是指向了多個列。 典型產品:Cassandra,HBase (3)面向文檔(Document-Oriented)資料庫 面向文檔資料庫會將以文檔的形式存儲。每個文檔都是自包含的數據單元,是一系列數據項的集合。每個數據項都有一個名稱與對應的值,值既可以是簡單的數據類型,如字元串、數字和日期等;也可以是複雜的類型,如有序列表和關係對象。數據存儲的最小單位是文檔,同一個表中存儲的文檔屬性可以是不同的,數據可以使用XML、JSON或者JSONB等多種形式存儲 典型產品:MorgoDB、CouchDB (4)圖形(Graph)資料庫
常見的非關係型資料庫
2.2.1 memcached(key-value) Memcaced是一個開源的、高性能的、具有分散式記憶體對象的緩存系統。通過它可以減輕資料庫負載,加速動態的web應用,最初版本由LiveJoumal 的Brad Fitzpatrick在2003年開發完成。目前全球有非常多的用戶都在使用它來架構主機的大負載網站或提升主機的高訪問網站的響應速度。註意:Memcache 是這個項目的名稱,而Memcached是服務端的主程式文件名。 緩存一般用來保存一些進程被存取的對象或數據,通過緩存來存取對象或數據要比在磁碟上存取塊很多,前者是記憶體,後者是磁碟、Memcached是一種純記憶體緩存系統,把經常存取的對象或數據緩存在memcached的記憶體中,這些被緩存的數據被程式通過API的方式被讀取,memcached裡面的數據就像一張巨大的hash表,數據以key-value對的方式存在。Memcached通過緩存經常被存取的對象或數據,從而減輕頻繁讀取資料庫的壓力,提高網站的響應速度,構建出快速更快的可擴展的Web應用。 官網:http://memcached.org/ 由於memcached為純記憶體緩存軟體,一旦重啟所有數據都會丟失,因此,新浪網基於Memcached開發了一個開源項目Memcachedb。通過為Memcached增加Berkeley DB的特久化存儲機制和非同步主複製機制,使Memcached具備了事務恢復能力、持久化數據能力和分散式複製能力,memcached非常適合需要超高性能讀寫速度、持久化保存的應用場景,但是最近幾年逐漸被其他的持久化產品替代如Redis Memcached小結: 1、key-value行資料庫 2、純記憶體資料庫 3、持久化memcachedb(sina) 2.2.2 Redis(key-value) 和Memcached類似,redis也是一個key-value型存儲系統。但redis支持的存儲value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)和zset(有序集合)等。這些數據類型都支持push/pop、add/remove及取交集、並集和差集及更豐富的操作,而且這些操作都是原子性的。為了保證效率,redis的數據都是緩存在記憶體中。區別是redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在基礎上實現了master-slave(主從)同步。 redis是一個高性能的key-value資料庫。redis的出現、很大程度補償了memcached這類key/value存儲的不足,在部分場合可以對關係資料庫起到很好的補充作用。它提供了Python、Ruby、Erlang、PHP客戶端,使用方便。 官方:http://www.redis.io/documentation redis特點: 1)支持記憶體緩存,這個功能相當於memcached 2)支持持久化存儲,這個功能相當於memcachedb,ttserver 3)資料庫類型更豐富。比其他key-value庫功能更強 4)支持主從集群、分散式 5)支持隊列等特殊功能 應用:緩存從存取memcached更改存取redis 2.2.3 MongoDB(Document-oriented) MongoDB是一個介於關係型資料庫和非關係型資料庫之間的產品,是非關係型資料庫當中功能最豐富,最像關係資料庫的。他支持的資料庫結構非常鬆散,類似json的bjson格式,因此可以存儲比較複雜的數據類型。Mongodb最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係資料庫單表查詢的絕大部分功能,而且還支持對數據建立索引。 特點: 高性能、易部署、易使用、存儲數據非常方便 主要功能特性: 1.面向集合存儲,易存儲對象類型的數據 2.“面向集合”(Collenction-Orented)意思是資料庫被分組存儲在數據集中,被稱為一個集合(Collenction)每個 集合在資料庫中都有一個唯一的標識名,並且可以包含無限數目的文檔,集合的概念類似關係型資料庫(RDBMS)里的表(table)不同的是它不需要定義任何模式(schema) 3.模式自由 模式自由(schema-free)意為著存儲在mongodb資料庫中的文件,我們不需要知道它的任何結構定義。 4.支持動態查詢 5.支持完全索引,包含內部對象 6.支持查詢 7.支持複製和故障恢復 8.使用高效的二進位數據存儲,包括大型對象 9.自動處理碎片、以支持雲計算層次的擴展性 2.2.4 Cassandra(Column-oriented) Apache Cassndra是一套開源分散式Key-Value存儲系統。它最初由Facebook開發,用於存儲特別大的數據。Facebook目前在使用此系統。 主要特點: 1.分散式 2.基於column的結構化 3.高伸展性 4.Cassandra的主要特點就是它不是一個資料庫,而是由一堆資料庫節點共同構成一個分散式網路服務,對Cassandra的一個寫操作,會被覆制到其他節點上去,對Cassandra的讀操作。也會被路由到某個節點上面去讀取。 Cassandir是一個混合型的非關係的資料庫,類似於Google的BigTable。其主要功能比Dynomie(分散式的key-value存儲系統)更豐富,Cassandra最初由Facebook開發,後轉變成了開源項目。 2.2.5 其他不常用非關係型資料庫 HBase、MemcacheDB、BerkeleyDB、Tokyo Cabinet\Tokyo Tyrant(ttserver) ttserver 持久化輸出,缺點存儲2千萬條 性能下降(由日本人發明)
看了這麼多的資料庫,我們主要講的是MySQL,這個公司裡面非常常用的又非常nb的關係型資料庫,後面還會將一些非關係型資料庫的使用,來吧,我們好好認識一下MySQL,看下一節介紹!
二 MySQL介紹
1.mysql版本
雙授權版本:社區版(完全免費,功能也夠nb了)和商業版(更好,功能更多更強大一些,但是收費,VIP,有售後服務,也會參考和吸收社區版的一些nb的功能,安全性和穩定性都是最好的,大幾十萬),一般NB的開源軟體都是雙授權的
每個版本又分四個版本依次進行發佈:
Alpha版:一般只在開發公司內部使用,不對外公開,測試、自我檢查的版本
Beta版:一般是開發完也測試完的版本,一般不會出現比較大的性能bug(一般我們不用,阿裡、去哪兒會使用這個版本,有些新功能,內部有高手能調,也能評估新功能的性能)
RC版:根據Beta版測試之後收集到一些bug等在進行完善的一個版本
GA版:軟體正式發佈的版本,沒有特別的需求一定要使用GA版,有些公司追求新功能會使用Beta版,這是個例。
2.MySQL的產品線:(mysql是C++寫的,oracle 9i版本之前是C語言寫的,之後主要是java)
最早期,mysql是按照3.x--4.x--5.x等來開發的,但是為了提高MySQL的競爭優勢,以及提高性能、降低開發維護成本等原因,同時,更方便企業用戶更精準的選擇合適的版本產品用於自己的企業生產環境中,MySQL在發展到5.1系列版本之後,重新規劃為三條產品線。
第一條:5.0.xx 到 5.1.xx產品線系列介紹
第二條:5.4.xx 到 5.7.xx產品線系列介紹(主流:5.5和5.6)
第三條:6.0.xx 到 7.1.xx產品線系列介紹
3. MySQL資料庫軟體命名介紹
以mysql-5.6.42.tar.gz的版本號來解釋:
1.第一個數字5是主版本號,描述了文件格式。所有版本5發行都有相同的文件格式。
2.第二個數字6是發行級別。主版本號和發行級別組合到一起便構成了發行序列號。
3.第三個數據42是在此發行系列的版本號,隨每個新發佈版遞增。通常你需要已經選擇發行的最新版本,每次更新後,版本字元串的最後一個數字會遞增。如果增加了一些新功能或者微小的不相容性,版本字元串的第二個數字會遞增。如果文件格式改變,第一個數字會遞增。
一般有的版本也會加上上面我們說的4個版本的尾碼,beta、alpha、rc版、ga版等等,我們舉得這個例子是不帶尾碼的,就相當於GA版
4.1 MySQL版本選擇建議
1.穩定版:選擇開源的社區版的穩定版GA版本
2.產品線:可以選擇5.1、5.5、5.6,互聯網公司主流5.5和5.6,其次是5.1.
3.選擇MySQL資料庫GA版發佈後6個月以上的GA版本。
4.要選擇前後幾個月沒有大的BUG修複的版本,而不是大量修複BUG的集中版本
5.最好向後較長時間沒有更新發佈的版本。
6.開發、測試、運維、DBA進行自己本地測試的時候,最好要和線上的版本一致,最差也要相容,所以作為開發,你要清楚公司用的哪個版本的資料庫
7.作為內部開發測試資料庫環境,跑大概3-6個月的時間。
8.優先企業非核心業務採用新版本的資料庫GA版本的軟體。
10.想DBA高手請教,或者在技術分為好的群里和大家一起交流,使用真正高手用過的好用的GA版本產品
經過上述工序後,若沒有重要的功能BUG或者性能瓶頸,則可以開始考慮作為任何業務數據服務的後端資料庫軟體。
好了,同志們,鋪墊了這麼多,我們要開始學習實戰內容啦,來看第四大節,修改密碼~~
三 MySQL的下載安裝、簡單應用及目錄介紹
1.下載安裝
這個下載安裝內容我專門整理了一個博客,專門針對的windows10的:https://www.cnblogs.com/clschao/articles/9916971.html ,大家參考其中的第二種下載安裝方法,我們後面的學習就是根據第二種方法來的。
linux系統下MySQL資料庫企業生產中常用的4中安裝方法介紹(將來如果需要你一個開發人員來安裝資料庫或者自己想研究資料庫的時候再自行去研究吧~~~這裡就簡單給大家提一下~~~)
1.yum/rpm方式安裝MySQL
2.常規方式編譯安裝MySQL
3.採用cmake方式編譯安裝MySQL
4.採用二進位方式免編譯安裝MySQL
以上的安裝方法都可以,性能上也不會有太多的差距,只是不同層次的人的安裝習慣不同,瞭解一下就可以了,多數的運維人員習慣使用cmake編譯方式安裝,如果資料庫伺服器很多,而且對定製化有要求,可以選擇通過源碼定製rpm包,搭建yum參數的方式安裝,但是需要你有一定的能力,還有好多專業的DBA選擇二進位免編譯安裝的方式進行安裝。
將來大家更多的是面對linux下的mysql安裝和使用(沒有包含上述的所有安裝方法),我也給大家整理了一篇博客(centos7.1下安裝mysql5.6):https://www.cnblogs.com/clschao/articles/6736840.html
如果我上面這篇博客安裝的時候有問題,並且自己解決不了的話,刪除你已經安裝的mysql,然後看另外一篇博客進行安裝(centos7下安裝mysql5.6),其實道理都差不多,我的那一篇詳細一些,還有一些關於防火牆的設置,話不多說。這一篇博客也挺好的,轉載過來給大家看看:https://blog.csdn.net/qq_17776287/article/details/53536761
如果你們公司用的是紅帽或者是Ubuntu,可以自行百度教程來嘗試安裝,這裡我就不給大家演示啦。
這位同學,如果你mac本,我只能說超哥一直以來都很窮。。。沒有一臺自己的mac本,所以不是很熟悉,但是給你找了兩篇博客,可以參考一下,我大致看了一下,過程是差不多的:
mac 安裝mysql5.6 :https://blog.csdn.net/mike694439716/article/details/48218239?utm_source=blogxgwz0
mac 安裝tar.gz版MySQL5.6:https://blog.csdn.net/zmx729618/article/details/72769840
如果Mac本安裝完mysql之後,登陸以後,不管運行什麼指令,總是提示這個:mac mysql error You must reset your password using ALTER USER statement before executing this statement.
你需要做的就是修改密碼就行了,預設安裝完成之後,mysql應該是安裝在了/usr/local/mysql這個目錄下,裡面的目錄結構和windows的是一樣的。
mysql安裝的簡單總結:
#1、下載:MySQL Community Server 5.7.16 http://dev.mysql.com/downloads/mysql/ #2、解壓 如果想要讓MySQL安裝在指定目錄,那麼就將解壓後的文件夾移動到指定目錄,如:C:\mysql-5.7.16-winx64 #3、添加環境變數 【右鍵電腦】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變數】--》【在第二個內容框中找到 變數名為Path 的一行,雙擊】 --> 【將MySQL的bin目錄路徑追加到變值值中,用 ; 分割】 #4、初始化 mysqld --initialize-insecure #5、啟動MySQL服務 mysqld # 啟動MySQL服務 #6、啟動MySQL客戶端並連接MySQL服務 mysql -u root -p # 連接MySQL伺服器 #7、將mysql添加系統服務 註意:--install前,必須用mysql啟動命令的絕對路徑 # 製作MySQL的Windows服務,在終端執行此命令: "c:\mysql-5.7.16-winx64\bin\mysqld" --install # 移除MySQL的Windows服務,在終端執行此命令: "c:\mysql-5.7.16-winx64\bin\mysqld" --remove 註冊成服務之後,以後再啟動和關閉MySQL服務時,僅需執行如下命令: # 啟動MySQL服務 net start mysql # 關閉MySQL服務 net stop mysqlwin10下安裝mysql
1.解壓tar包 cd /software #cd到一個自己創建的文件夾中 tar -xzvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz #解壓下載下來的mysql文件,如果沒在這個文件夾中,記得把文件移動到這個文件夾中,通過mv指令 mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql-5.6.21 #通過mv指令給這個解壓出來的文件改了個名字 2.添加用戶與組 groupadd mysql #添加用戶組 useradd -r -g mysql mysql #創建mysql用戶,並添加到mysql用戶組 chown -R mysql:mysql mysql-5.6.21 #這是mysql用戶和mysql用戶組的歸屬 chmod +x -Rf /usr/local/mysql #賜予可執行許可權 3.安裝資料庫 su mysql cd mysql-5.6.21/scripts ./mysql_install_db --user=mysql --basedir=/software/mysql-5.6.21 --datadir=/software/mysql-5.6.21/data #使用mysql用戶來將我們下載並解壓的那個mysql文件,安裝到/software/mysql-5.6.21/data這個目錄裡面 4.配置文件 cd /software/mysql-5.6.21/support-files #配置文件在這個目錄下 cp my-default.cnf /etc/my.cnf #copy一份my-default.cnf文件到etc目錄下,並起名為my.cnf文件 cp mysql.server /etc/init.d/mysql #copy一份mysql.server文件,到etc的init.d的mysql文件夾中,啟動載入的初始配置文件會有一部分在這個目錄裡面讀取 vim /etc/init.d/mysql #若mysql的安裝目錄是/usr/local/mysql,則可省略此步 修改文件中的兩個變更值 basedir=/software/mysql-5.6.21 #基礎目錄 datadir=/software/mysql-5.6.21/data #數據目錄 5.配置環境變數 vim /etc/profile #環境變數的配置文件 ,添加下麵兩行 export MYSQL_HOME="/software/mysql-5.6.21" export PATH="$PATH:$MYSQL_HOME/bin" #使配置生效,通過source指令 source /etc/profile 6.添加自啟動服務 chkconfig --add mysql chkconfig mysql on 7.啟動mysql service mysql start 8.登錄mysql及改密碼與配置遠程訪問 mysqladmin -u root password 'your_password' #修改root用戶密碼 mysql -u root -p #登錄mysql,需要輸入密碼 mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION; #允許root用戶遠程訪問(預設遠程連接是不能使用root用戶來連接的) mysql>FLUSH PRIVILEGES; #刷新許可權 9. 一些必要的初始配置(除了下麵這些,將來玩mysql的時候還有很多很多的配置) 1)修改字元集為UTF8 vi /etc/my.cnf 在[client]下麵添加 default-character-set = utf8 在[mysqld]下麵添加 character_set_server = utf8 2)增加錯誤日誌 vi /etc/my.cnf 在[mysqld]下麵添加: log-error = /usr/local/mysql/log/error.log general-log-file = /usr/local/mysql/log/mysql.log 3) 設置為不區分大小寫,linux下預設會區分大小寫。 vi /etc/my.cnf 在[mysqld]下麵添加: lower_case_table_name=1 修改完重啟:#service mysql restart
在linux上使用mysql的時候,一定要註意的就是許可權問題,linux噁心的地方就是許可權問題。
2.mysql的簡單使用演示
這裡只是給大家演示一下mysql是個什麼樣子,具體怎麼管理數據,後面我們會學,這裡只做演示用,因為演示一下之後,你對這個東西就有了一些簡單的認識和瞭解,再進行後面的學的時候,你就不會摸著黑聽理論了,所謂的瞎聽了,哈哈。註意,我們下麵會輸入一些指令進行操作資料庫,資料庫裡面的指令必須要用;分號結尾,然後才能執行,切記。
1.開啟服務端,mysqld\ net start mysql
2.使用mysql自帶的客戶端進行連接,cmd下輸入mysql -u root -p,然後回車,會提示你輸入密碼,此時初始的root用戶還沒有密碼,所以還是直接回車就可以連接上了
3.show databases;先不講裡面的內容,說一下這是幾個庫,每個項目可以有自己單獨的一個庫,裡面放這個項目的所有數據表
4.創建一個庫:create database CRM;然後show databases;查看一下就有了這個crm庫,不分大小寫,統一會變成小寫,對照著我們mysql安裝目錄下的data文件夾裡面的內容看一下,庫就是對應的文件夾。
5.我們目前在所有資料庫之上,想在我們自己項目的庫裡面操作數據,就需要切換到我們自己這個crm項目的庫裡面進行數據的操作,切換資料庫使用use + 庫名,例如:use crm;就提示你切換成功了。
6.我們說過,庫裡面維護的數據就像一張一張的數據表,類似excel,對不對,那我們創建一張表看一下,命令:
create table student(
id int,
name char(10),
age int
);
7.再執行show tables;就可以看到有了一個student表
8.查看一下這個表裡的數據select * from student;發現什麼數據也沒有
9.插入幾條數據,寫幾條數據:insert into student values(1,'d',18),(2,'x',11),(3,'d',10),(4,'k',9);然後回車,就執行了這條指令,然後我們再查看一下這個表裡面有沒有數據了,執行上一條指令,select * from student;發現裡面就有數據了:
結果:
mysql> select * from student;
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | d | 18 |
| 2 | x | 11 |
| 3 | d | 10 |
| 4 | k | 9 |
+------+------+------+
4 rows in set (0.00 sec)
分析一下:上面這些就是mysql數據幫我們保存的數據,以表格的外貌展示,第一行為表頭,從第二行開始都是對應的數據,每列都是自己這一列規定的內容,比如id這一列是你插入的這幾條數據的id,我們這個insert就是插入數據,select就是查看數據,這就是我們通過MySQL自帶的客戶端來操作的MySQL服務端來進行數據的操作。MySQL服務端和操作系統及硬碟打交道,快速的幫你實現數據的操作,其他的語言開發的客戶端就是通過這種形式來操作資料庫裡面的數據的,將來我們使用python操作資料庫的時候,會使用一個叫做pymysql的工具來搞,到時候會給你們講,他就是一個咱們MySQL伺服器的客戶端,連接上服務端就可以操作服務端的保存的你的項目的數據了。例如用戶要查看自己的信息,就通過你寫的程式接受到客戶的請求,通過自己的mysql客戶端去MySQL服務端查看對應的信息,然後mysql服務端將這些信息發送給你的py程式客戶端,你通過程式再將數據返回給你的用戶,你的用戶就看到了自己的信息,就是這麼個過程,大家理解了嗎。
真正的資料庫維護優化等高級資料庫的技術一般都是由公司的DBA來做,或者由比較懂資料庫的運維來做,一般不會讓開發來搞,除非你開發人員的資料庫能力很強,這些NB的技術包括:資料庫優化,資料庫BUG解決,資料庫備份(冷備、熱備),保證數據不丟失,集群,高可用等等保證項目的穩定性和可用性及高併發用(很多的用戶都來操作數據,你要併發),資料庫各項配置參數的調優,慢sql語句的提煉和調優,資料庫開發、資料庫更新,數據遷移,數據恢復,分庫分表等等,這些是資料庫的高端技術,而針對開發人員,一般你需要學習這些:基本的開發環境使用的資料庫搭建,然後增刪改查就差不多了。當然如果想提升自己的能力和水平(還有薪資水平),資料庫是你必須要學好的內容,但是那是你做開發之後的事情了,而且有好多同學目前已經在資料庫或者運維方面很NB了,但是開發還不行啊,對不對,哈哈,好好學python,資料庫不是你學習python的重點,但是必須要會一些基本的內容,懂得越多越好,ok嗎,同志們~~~
3.MySQL安裝目錄介紹
看圖:
其中,我們重點看一下data文件夾:如果你找不到自己建立的庫或者表的文件,可能不在這個data文件夾下麵,連接上mysql之後,輸入show global variables like
"%datadir%"
;來查看數據文件存儲路徑,找到路徑之後,到對應路徑下如果找不到這個文件夾,那麼可能是隱藏的,把隱藏的文件顯示一下就行了。
關於資料庫中的這4個初始的庫的詳細介紹,有興趣的同學可以來看看我的這篇文章(目前作為瞭解用):https://www.cnblogs.com/clschao/articles/9928223.html
其中mysql這個庫我需要提一下:
mysql:這個是mysql整個服務的核心資料庫,類似於sql server中的master表,主要負責存儲資料庫的用戶、許可權設置、關鍵字等mysql自己需要使用的控制和管理信息。不可以刪除,如果對mysql不是很瞭解,也不要輕易修改這個資料庫裡面的表信息。
總結:其實這些庫就是我們電腦上對應的文件夾,在mysql中顯示為對應的庫,來方便我們管理數據,而文件或者文件夾這種與硬碟打交道的事情就交給mysql了,我們只需要對mysql庫中的數據進行操作就可以了,你可以看到,我們剛纔簡單使用的時候創建的一個crm庫,也就是在data目錄下的生成了一個crm文件夾。
說到這裡,大家對資料庫有個基本的瞭解了呢。那麼我們返回去看一下mysql的一些其他知識(提高逼格的內容~~),回到資料庫分類及mysql介紹~~~~~
四 root用戶密碼設置及忘記密碼的解決方法
再怎麼說我們的root用戶密碼也不能為空啊對不對,所以需要設置一個密碼,看下麵設置密碼的方法,我給了三種方法:
方法1: 用SET PASSWORD命令
首先登錄MySQL,使用mysql自帶的那個客戶端連接上mysql。
格式:mysql> set password for 用戶名@localhost = password('新密碼');
例子:mysql> set password for root@localhost = password('123');
方法2:用mysqladmin (因為我們將bin已經添加到環境變數了,這個mysqladmin也在bin目錄下,所以可以直接使用這個mysqladmin功能,使用它來修改密碼)
關於mysqladmin的介紹:是一個執行管理操作的客戶端程式。它可以用來檢查伺服器的配置和當前狀態、創建和刪除資料庫、修改用戶密碼等等的功能,雖然mysqladmin的很多功能通過使用MySQL自帶的mysql客戶端可以搞定,但是有時候使用mysqladmin操作會比較簡單。
格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼
例子:mysqladmin -uroot -p123456 password 123
只用mysqladmin的時候,會出現一個warning警告信息:Warning: Using a password on the command line interface can be insecure.,這個沒關係,是提示你,你直接在cmd下使用明文設置密碼的時候,是不安全的,因為別人可以通過翻看你輸入指令的歷史記錄來查看到你設置的密碼,所以提示你一下,不信你按上下鍵,可以看到自己之前輸入的命令,或者輸入下麵這個指令也可以看到:
所以我們最好連接進入到mysql裡面之後,在進行密碼的修改和設置。
方法3:用UPDATE直接編輯那個自動的mysql庫中的user表
首先登錄MySQL,連接上mysql服務端。
mysql> use mysql; use mysql的意思是切換到mysql這個庫,這個庫是所有的用戶表和許可權相關的表都在這個庫裡面,我們進入到這個庫才能修改這個庫裡面的表。
mysql> update user set password=password('123') where user='root' and host='localhost'; 其中password=password('123') 前面的password是變數,後面的password是mysql提供的給密碼加密用的,我們最好不要明文的存密碼,對吧,其中user是一個表,存著所有的mysql用戶的信息。
mysql> flush privileges; 刷新許可權,讓其生效,否則不生效,修改不成功。
在忘記root密碼的時候,可以這樣(註意:root密碼最好不要忘記,找地方記錄下來,不然如果是工作中你們使用的資料庫(不管是測試的還是線上的,都是比較麻煩的事情,資料庫輕易不會讓你重啟的,不過作為一個開發來講,你應該是無法用root用戶的~~~))
以windows為例:
1. 關閉正在運行的MySQL服務,net stop mysql(這個mysql是你添加的mysqld到系統服務時的服務名)。
2. 打開DOS視窗,轉到mysql\bin目錄。
3. 輸入mysqld --skip-grant-tables 回車。--skip-grant-tables 的意思是啟動MySQL服務的時候跳過許可權