2020重新出發(fā)蜈出,MySql前瞻,mysql是什么

@[toc]

MySQL是什么涛酗?

隨著時間的推移铡原,開源數(shù)據(jù)庫在中低端應(yīng)用中逐漸流行起來偷厦,占據(jù)了很大的市場份額。開源數(shù)據(jù)庫具有免費使用燕刻、配置簡單只泼、穩(wěn)定性好、性能優(yōu)良等特點卵洗,而 MySQL 數(shù)據(jù)庫正是開源數(shù)據(jù)庫中的杰出代表请唱。

  • 開源全稱為“開放源代碼”。很多人認(rèn)為開源軟件最明顯的特點是免費忌怎,但實際上并不是這樣的籍滴,開源軟件最大的特點應(yīng)該是開放酪夷,也就是任何人都可以得到軟件的源代碼榴啸。可以在源代碼的基礎(chǔ)上加以修改學(xué)習(xí)晚岭,甚至重新發(fā)放鸥印,當(dāng)然是在版權(quán)限制范圍之內(nèi)。

MySQL 是最流行的數(shù)據(jù)庫之一坦报,是一個免費開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)库说,但也不意味著該數(shù)據(jù)庫是完全免費的。MySQL 由瑞典 MySQL AB 公司開發(fā)片择,目前屬于 Oracle 公司潜的。MySQL 適合中小型軟件,被個人用戶以及中小企業(yè)青睞字管。

MySQL的版本以及版本號

針對不同的用戶啰挪,MySQL 分為兩個版本:

  • MySQL Community Server(社區(qū)版):該版本完全免費,但是官方不提供技術(shù)支持嘲叔。
  • MySQL Enterprise Server(企業(yè)版):該版本能夠以很高的性價比為企業(yè)提供數(shù)據(jù)倉庫應(yīng)用亡呵,支持 ACID 事物處理,提供完整的提交硫戈、回滾锰什、崩潰恢復(fù)和行級鎖定功能,但是該版本需要付費使用丁逝,官方提供電話技術(shù)支持汁胆。

注意:MySQL Cluster 主要用于架設(shè)群服務(wù)器,需要在社區(qū)服務(wù)或企業(yè)版的基礎(chǔ)上使用霜幼。

MySQL的版本命名機(jī)制

MySQL 的命名機(jī)制由 3 個數(shù)字和 1 個后綴組成嫩码,例如 mysql-5.7.20:

  • 第 1 個數(shù)字“5”是主版本號,用于描述文件的格式辛掠,所有版本 5 的發(fā)行版都有相同的文件夾格式谢谦。
  • 第 2 個數(shù)字“7”是發(fā)行級別释牺,主版本號和發(fā)行級別組合在一起便構(gòu)成了發(fā)行序列號。
  • 第 3 個數(shù)字“20”是在此發(fā)行系列的版本號回挽,隨每次新發(fā)行的版本遞增没咙。通常選擇已經(jīng)發(fā)行的最新版本。

在 MySQL 開發(fā)過程中千劈,同時存在多個發(fā)布系列祭刚,每個發(fā)布系列的成熟度處在不同階段。

  • MySQL 5.7 是最新開發(fā)的穩(wěn)定(GA)發(fā)布系列墙牌,是將執(zhí)行新功能的系列涡驮,目前已經(jīng)可以正常使用。
  • MySQL 5.6 是比較穩(wěn)定的(GA)發(fā)布系列喜滨,只針對漏洞修復(fù)重新發(fā)布捉捅,不增加會影響穩(wěn)定性的新功能。
  • MySQL 5.1 是一個穩(wěn)定的(產(chǎn)品質(zhì)量)發(fā)布系列虽风,只針對嚴(yán)重漏洞修復(fù)和安全修復(fù)重新發(fā)布棒口,不增加影響該系列穩(wěn)定性的重要功能。

mysql 的優(yōu)勢

由于 MySQL 數(shù)據(jù)庫體積小辜膝、速度快无牵、總體擁有成本低、開放源代碼厂抖,其有著廣泛的應(yīng)用茎毁,一般中小型網(wǎng)站的開發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫。由于其社區(qū)版的性能卓越忱辅,因此搭配 PHP 和 Apache 服務(wù)器可組成良好的開發(fā)環(huán)境七蜘。

主要的優(yōu)勢有以下幾點

  1. MySQL 是開放源代碼的數(shù)據(jù)庫,任何人都可以獲取該數(shù)據(jù)庫的源代碼耕蝉。這就使得任何人都可以修正 MySQL 的缺陷崔梗,并且任何人都能以任何目的來使用該數(shù)據(jù)庫。MySQL 是一款可以自由使用的數(shù)據(jù)庫垒在。
  2. MySQL 的跨平臺性:MySQL 不僅可以在 Windows 系列的操作系統(tǒng)上運行蒜魄,還可以在 UNIX、Linux 和 Mac OS 等操作系統(tǒng)上運行场躯。因為很多網(wǎng)站都選擇 UNIX谈为、Linux 作為網(wǎng)站的服務(wù)器,所以 MySQL 的跨平臺性保證了其在 Web 應(yīng)用方面的優(yōu)勢踢关。伞鲫。
  3. 價格優(yōu)勢:MySQL 數(shù)據(jù)庫是一個自由軟件,任何人都可以從 MySQL 的官方網(wǎng)站上下載該軟件签舞,這些社區(qū)版本的 MySQL 都是免費試用的秕脓,即使是需要付費的附加功能柒瓣,其價格也是很便宜的。相對于 Oracle吠架、DB2 和 SQL Server 這些價格昂貴的商業(yè)軟件芙贫,MySQL 具有絕對的價格優(yōu)勢。
  4. 功能強(qiáng)大且使用方便:MySQL 是一個真正的多用戶傍药、 多線程 SQL 數(shù)據(jù)庫服務(wù)器磺平。它能夠快速、有效和安全的處理大量的數(shù)據(jù)拐辽。相對于 Oracle 等數(shù)據(jù)庫來說拣挪,MySQL 的使用是非常簡單的。MySQL 主要目標(biāo)是快速俱诸、健壯和易用菠劝。

MySQL 與常用的主流數(shù)據(jù)庫 Oracle、SQL Server 相比乙埃,主要特點就是免費闸英,并且在任何平臺上都能使用,占用的空間相對較小介袜。但是,MySQL 也有一些不足出吹,比如對于大型項目來說遇伞,MySQL 的容量和安全性就略遜于 Oracle 數(shù)據(jù)庫

mysql 的特性

MySQL 數(shù)據(jù)庫管理系統(tǒng)具有以下系統(tǒng)特性:

  • 使用 C 和 C++ 編寫,并使用多種編譯器進(jìn)行測試捶牢,保證源代碼的可移植性鸠珠。
  • 支持 AIX、FreeBSD秋麸、HP-UX渐排、Linux、Mac OS灸蟆、NovellNetware驯耻、OpenBSD、OS/2 Wrap炒考、Solaris可缚、Windows 等多種操作系統(tǒng)
  • 為多種編程語言提供了 API斋枢。這些編程語言包括 C帘靡、C++、Python瓤帚、Java描姚、Perl涩赢、PHP、Eiffel轩勘、Ruby 和 Tcl 等谒主。
  • 支持多線程,充分利用 CPU 資源赃阀。
  • 優(yōu)化的 SQL 查詢算法澎媒,有效地提高查詢速度。
  • 既能夠作為一個單獨的應(yīng)用程序應(yīng)用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中酌予,也能夠作為一個庫而嵌入其他的軟件中永票。
  • 提供多語言支持,常見的編碼如中文的 GB 2312驮俗、BIG 5懂缕,日文的 Shift_JIS 等都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名。
  • 提供 TCP/IP王凑、ODBC 和 JDBC 等多種數(shù)據(jù)庫連接途徑搪柑。
  • 提供用于管理、檢查索烹、優(yōu)化數(shù)據(jù)庫操作的管理工具工碾。
  • 支持大型的數(shù)據(jù)庫“傩眨可以處理擁有上千萬條記錄的大型數(shù)據(jù)庫渊额。
  • 支持多種存儲引擎

mysql 的適用場景

MySQL 是目前世界上最流行的開源關(guān)系數(shù)據(jù)庫垒拢,大多應(yīng)用于互聯(lián)網(wǎng)行業(yè)旬迹。比如,在國內(nèi)求类,大家所熟知的百度奔垦、騰訊、淘寶尸疆、京東椿猎、網(wǎng)易、新浪等仓技,國外的 Google鸵贬、Facebook、Twitter脖捻、GitHub 等都在使用 MySQL阔逼。社交、電商地沮、游戲的核心存儲往往也是 MySQL嗜浮。

  1. Web 網(wǎng)站系統(tǒng):Web 網(wǎng)站開發(fā)者是 MySQL 最大的客戶群羡亩,也是 MySQL 發(fā)展史上最為重要的支撐力量。
    • MySQL 之所以能成為 Web 網(wǎng)站開發(fā)者們最青睞的數(shù)據(jù)庫管理系統(tǒng)危融,是因為 MySQL 數(shù)據(jù)庫的安裝配置都非常簡單畏铆,使用過程中的維護(hù)也不像很多大型商業(yè)數(shù)據(jù)庫管理系統(tǒng)那么復(fù)雜,而且性能出色吉殃。還有一個非常重要的原因就是 MySQL 是開放源代碼的辞居,完全可以免費使用。
  2. 日志記錄系統(tǒng):MySQL 數(shù)據(jù)庫的插入和查詢性能都非常的高效蛋勺,設(shè)計的好瓦灶,在使用 MyISAM 存儲引擎的時候,兩者可以做到互不鎖定抱完,達(dá)到很高的并發(fā)性能贼陶。所以,對需要大量的插入和查詢?nèi)罩居涗浀南到y(tǒng)來說巧娱,MySQL 是非常不錯的選擇碉怔。比如處理用戶的登錄日志,操作日志等禁添,都是非常適合的應(yīng)用場景撮胧。
  3. 數(shù)據(jù)倉庫系統(tǒng):隨著現(xiàn)在數(shù)據(jù)倉庫數(shù)據(jù)量的飛速增長,我們需要的存儲空間越來越大上荡。數(shù)據(jù)量的不斷增長趴樱,使數(shù)據(jù)的統(tǒng)計分析變得越來越低效,越來越困難酪捡。
    • 下面是幾個主要的解決思路。
      1. 采用昂貴的高性能主機(jī)以提高計算性能纳账,用高端存儲設(shè)備提高 I/O 性能逛薇,效果理想,但是成本非常高疏虫;
      2. 通過將數(shù)據(jù)復(fù)制到多臺使用大容量硬盤的廉價 PC Server 上永罚,以提高整體計算性能和 I/O 能力,效果尚可卧秘,存儲空間有一定限制呢袱,成本低廉;
      3. 通過將數(shù)據(jù)水平拆分翅敌,使用多臺廉價的 PC Server 和本地磁盤來存放數(shù)據(jù)羞福,每臺機(jī)器上面都只有所有數(shù)據(jù)的一部分,解決了數(shù)據(jù)量的問題蚯涮,所有 PC Server 一起并行計算治专,也解決了計算能力問題卖陵,通過中間代理程序調(diào)配各臺機(jī)器的運算任務(wù),既可以解決計算性能問題又可以解決 I/O 性能問題张峰,成本也很低廉泪蔫。
    • 在上面的三個方案中,第二和第三個的實現(xiàn)喘批,MySQL 都有較大的優(yōu)勢撩荣。通過 MySQL 的簡單復(fù)制功能,可以很好的將數(shù)據(jù)從一臺主機(jī)復(fù)制到另外一臺 饶深,不僅僅在局域網(wǎng)內(nèi)可以復(fù)制餐曹,在廣域網(wǎng)同樣可以。
    • 當(dāng)然粥喜,很多人可能會說凸主,其他的數(shù)據(jù)庫同樣也可以做到,不是只有 MySQL 有這樣的功能额湘。確實卿吐,很多數(shù)據(jù)庫同樣能做到,但是 MySQL 是免費的锋华,其他數(shù)據(jù)庫大多都是按照主機(jī)數(shù)量或者 cpu 數(shù)量來收費嗡官,當(dāng)我們使用大量的 PC Server 的時候,License 費用相當(dāng)驚人毯焕。所以第一個方案衍腥,基本上所有數(shù)據(jù)庫系統(tǒng)都能夠?qū)崿F(xiàn),但是其高昂的成本不是每一個公司都能夠承擔(dān)的纳猫。
  4. 嵌入式系統(tǒng):嵌入式環(huán)境對軟件系統(tǒng)最大的限制是硬件資源非常有限婆咸,在嵌入式環(huán)境下運行的軟件系統(tǒng),必須是輕量級低消耗的軟件芜辕。
    1. MySQL 在資源的使用方面的伸縮性非常大尚骄,可以在資源非常充裕的環(huán)境下運行,也可以在資源非常少的環(huán)境下正常運行侵续。它對于嵌入式環(huán)境來說倔丈,是一種非常合適的數(shù)據(jù)庫系統(tǒng),而且 MySQL 有專門針對于嵌入式環(huán)境的版本状蜗。
    2. 并且需五,MySQL 的定位是通用數(shù)據(jù)庫,各種類型的應(yīng)用一般都能利用到 MySQL 存取數(shù)據(jù)的優(yōu)勢轧坎。業(yè)內(nèi)生產(chǎn)實踐證明宏邮,MySQL 更適合中小型企業(yè)。以目前的軟硬件產(chǎn)品水平來看,如果數(shù)據(jù)超過幾個 TB 將難以高效利用 MySQL蜀铲。
    3. MySQL 可以作為傳統(tǒng)的關(guān)系型數(shù)據(jù)庫產(chǎn)品使用边琉,也可以當(dāng)作一個 key-value 產(chǎn)品來使用。由于它具有優(yōu)秀的災(zāi)難恢復(fù)功能记劝,因此相對于目前市場上的一些 key-value 產(chǎn)品會更有優(yōu)勢变姨。

MySQL客戶端和服務(wù)器架構(gòu)(C/S架構(gòu))

客戶端-服務(wù)器(Client/Server)結(jié)構(gòu)簡稱 C/S 結(jié)構(gòu),是一種網(wǎng)絡(luò)架構(gòu)厌丑,通常在該網(wǎng)絡(luò)架構(gòu)下的軟件分為客戶端和服務(wù)器定欧。

服務(wù)器是整個應(yīng)用系統(tǒng)資源的存儲和管理中心,多個客戶端分別各自處理相應(yīng)的功能怒竿,共同實現(xiàn)完整的應(yīng)用砍鸠。在客戶/服務(wù)器結(jié)構(gòu)中,客戶端用戶的請求被傳送到數(shù)據(jù)庫服務(wù)器耕驰,數(shù)據(jù)庫服務(wù)器進(jìn)行處理后爷辱,將結(jié)果返回給用戶,從而減少網(wǎng)絡(luò)數(shù)據(jù)的傳輸量朦肘。

用戶在使用應(yīng)用程序時饭弓,首先啟動客戶端,然后通過相關(guān)命令告知服務(wù)器進(jìn)行連接以完成各種操作媒抠,而服務(wù)器則按照此請示提供相應(yīng)的服務(wù)弟断。每一個客戶端軟件的實例都可以向一個服務(wù)器或應(yīng)用程序服務(wù)器發(fā)出請求。

客戶端和服務(wù)器程序通常不在同一臺計算機(jī)上運行趴生,比如阀趴,我們平時在當(dāng)當(dāng)網(wǎng)上買書的時候,所使用的電腦和網(wǎng)頁瀏覽器就被當(dāng)做了一個客戶端苍匆,同時刘急,組成當(dāng)當(dāng)網(wǎng)的電腦、數(shù)據(jù)庫和應(yīng)用程序就被當(dāng)做服務(wù)器浸踩。

數(shù)據(jù)庫管理系統(tǒng)可分為兩類:一類是基于共享文件系統(tǒng)的數(shù)據(jù)庫管理系統(tǒng)排霉,例如 Microsoft Access 和 FileMaker,主要用于桌面用途民轴,不適合用于高端或更關(guān)鍵的應(yīng)用;另一類是基于客戶端-服務(wù)器的數(shù)據(jù)庫管理系統(tǒng)球订,例如 MySQL后裸、Oracle 和 SQL Server 等數(shù)據(jù)庫。

服務(wù)器軟件負(fù)責(zé)訪問和處理所有數(shù)據(jù)的一個軟件冒滩,這個軟件運行在稱為數(shù)據(jù)庫服務(wù)器的計算機(jī)上微驶,并且與數(shù)據(jù)文件打交道的只有服務(wù)器軟件。

關(guān)于數(shù)據(jù)的添加因苹、刪除和更新等所有的請求都由服務(wù)器完成苟耻。這些請求來自于運行客戶端的計算機(jī)》鲩埽客戶端用來和用戶打交道凶杖。例如,如果你請求一個按字母順序列出的產(chǎn)品表款筑,則客戶端會通過網(wǎng)絡(luò)提交該請求給服務(wù)器智蝠,服務(wù)器處理這個請求,然后根據(jù)需要對數(shù)據(jù)進(jìn)行過濾奈梳、丟棄和排序杈湾,最后把結(jié)果返回到客戶端。

注意:客戶端和服務(wù)器可以安裝在兩臺計算機(jī)或一臺計算機(jī)上攘须,不管它們在不在相同的計算機(jī)上漆撞,客戶端都要與服務(wù)器進(jìn)行通信。

以上這些過程對用戶都是透明的于宙,你不需要直接訪問數(shù)據(jù)文件浮驳。為了使用MySQL,需要訪問運行 MySQL 服務(wù)器的計算機(jī)和發(fā)布命令到 MySQL 客戶端的計算機(jī)限煞。

對于 MySQL 數(shù)據(jù)庫管理系統(tǒng)抹恳,服務(wù)器為MySQL DBMS。你可以在本地安裝的副本上運行署驻,也可以連接到運行在你具有訪問權(quán)的遠(yuǎn)程服務(wù)器上的一個副本奋献。

客戶端可以是 MySQL 提供的工具(如 MySQL Workbench、SQLyog)旺上、腳本語言(如Perl)瓶蚂、Web 應(yīng)用開發(fā)語言和程序設(shè)計語言等。

MySQL體系結(jié)構(gòu)詳解

麻雀雖小宣吱,五臟俱全窃这。MySQL 雖然以簡單著稱,但其內(nèi)部結(jié)構(gòu)并不簡單征候。

mysql的體系結(jié)構(gòu)

MySQL 就好比蓋房子杭攻,如果想把房子蓋的特別高,地基一定要穩(wěn)疤坝,基礎(chǔ)一定要牢固兆解。

MySQL 由連接池、SQL 接口跑揉、解析器锅睛、優(yōu)化器埠巨、緩存、存儲引擎等組成现拒,可以分為三層辣垒,即 MySQL Server 層存儲引擎層文件系統(tǒng)層印蔬。MySQL Server 層又包括連接層和 SQL 層勋桶。如下是官方文檔中 MySQL 的基礎(chǔ)架構(gòu)圖:

MySQL體系結(jié)構(gòu)圖

上圖中,Connection pool 為連接層扛点,Management Services & Utilities ...Caches & Buffers 為 SQL 層哥遮,Pluggable Storage Engines 為存儲引擎層,F(xiàn)ile system陵究、Files & Logs 為文件系統(tǒng)層眠饮。

Connectors 不屬于以上任何一層,可以將 Connectors 理解為各種客戶端铜邮、應(yīng)用服務(wù)仪召,主要指的是不同語言與 SQL 的交互。

連接層

應(yīng)用程序通過接口(如 ODBC松蒜、JDBC)來連接 MySQL扔茅,最先連接處理的是連接層。連接層包括通信協(xié)議秸苗、線程處理召娜、用戶名密碼認(rèn)證 3 部分。

  • 通信協(xié)議負(fù)責(zé)檢測客戶端版本是否兼容 MySQL 服務(wù)端惊楼。
  • 線程處理是指每一個連接請求都會分配一個對應(yīng)的線程玖瘸,相當(dāng)于一條 SQL 對應(yīng)一個線程,一個線程對應(yīng)一個邏輯 CPU檀咙,在多個邏輯 CPU 之間進(jìn)行切換雅倒。
  • 密碼認(rèn)證用來驗證用戶創(chuàng)建的賬號、密碼弧可,以及 host 主機(jī)授權(quán)是否可以連接到 MySQL 服務(wù)器蔑匣。

Connection Pool(連接池)屬于連接層。由于每次建立連接都需要消耗很多時間棕诵,連接池的作用就是將用戶連接裁良、用戶名、密碼校套、權(quán)限校驗趴久、線程處理等需要緩存的需求緩存下來,下次可以直接用已經(jīng)建立好的連接搔确,提升服務(wù)器性能。

SQL層

SQL 層是 MySQL 的核心,MySQL 的核心服務(wù)都是在這層實現(xiàn)的膳算。主要包含權(quán)限判斷座硕、查詢緩存、解析器涕蜂、預(yù)處理华匾、查詢優(yōu)化器、緩存和執(zhí)行計劃机隙。

  • 權(quán)限判斷可以審核用戶有沒有訪問某個庫蜘拉、某個表,或者表里某行數(shù)據(jù)的權(quán)限有鹿。
  • 查詢緩存通過 Query Cache 進(jìn)行操作旭旭,如果數(shù)據(jù)在 Query Cache 中,則直接返回結(jié)果給客戶端葱跋,不必再進(jìn)行查詢解析持寄、優(yōu)化和執(zhí)行等過程。
  • 查詢解析器針對 SQL 語句進(jìn)行解析娱俺,判斷語法是否正確稍味。
  • 預(yù)處理器對解析器無法解析的語義進(jìn)行處理。
  • 查詢優(yōu)化器對 SQL 進(jìn)行改寫和相應(yīng)的優(yōu)化荠卷,并生成最優(yōu)的執(zhí)行計劃模庐,就可以調(diào)用程序的 API 接口,通過存儲引擎層訪問數(shù)據(jù)油宜。

Management Services & Utilities掂碱、SQL Interface、Parser验庙、Optimizer 和 Caches & Buffers 屬于 SQL 層顶吮,詳細(xì)說明如下表所示。

  • Management Services & Utilities: MySQL 的系統(tǒng)管理和控制工具粪薛,包括備份恢復(fù)悴了、MySQL 復(fù)制、集群等违寿。
  • SQL Interface(SQL 接口):用來接收用戶的 SQL 命令湃交,返回用戶需要查詢的結(jié)果。例如 SELECT FROM 就是調(diào)用 SQL Interface藤巢。
  • Parser(查詢解析器):在 SQL 命令傳遞到解析器的時候會被解析器驗證和解析搞莺,以便 MySQL 優(yōu)化器可以識別的數(shù)據(jù)結(jié)構(gòu)或返回 SQL 語句的錯誤。
  • Optimizer(查詢優(yōu)化器):SQL 語句在查詢之前會使用查詢優(yōu)化器對查詢進(jìn)行優(yōu)化掂咒,同時驗證用戶是否有權(quán)限進(jìn)行查詢才沧,緩存中是否有可用的最新數(shù)據(jù)迈喉。它使用“選取-投影-連接”策略進(jìn)行查詢。
    • 例如 SELECT id, name FROM student WHERE gender = "女";語句中温圆,SELECT 查詢先根據(jù) WHERE 語句進(jìn)行選取挨摸,不是將表全部查詢出來以后再進(jìn)行 gender 過濾。SELECT 查詢先根據(jù) id 和 name 進(jìn)行屬性投影岁歉,不是將屬性全部取出以后再進(jìn)行過濾得运,將這兩個查詢條件連接起來生成最終查詢結(jié)果。
  • Caches & Buffers(查詢緩存):如果查詢緩存有命中的查詢結(jié)果锅移,查詢語句就可以直接去查詢緩存中取數(shù)據(jù)熔掺。這個緩存機(jī)制是由一系列小緩存組成的,比如表緩存非剃、記錄緩存置逻、key 緩存、權(quán)限緩存等努潘。

存儲引擎層

Pluggable Storage Engines 屬于存儲引擎層诽偷。存儲引擎層是 MySQL 數(shù)據(jù)庫區(qū)別于其他數(shù)據(jù)庫最核心的一點,也是 MySQL 最具特色的一個地方疯坤。主要負(fù)責(zé) MySQL 中數(shù)據(jù)的存儲和提取报慕。因為在關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)的存儲是以表的形式存儲的压怠,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)眠冈。

文件系統(tǒng)層

文件系統(tǒng)層主要是將數(shù)據(jù)庫的數(shù)據(jù)存儲在操作系統(tǒng)的文件系統(tǒng)之上,并完成與存儲引擎的交互菌瘫。

MySQL 5.7的新特性(新功能)

與 MySQL 5.6 相比蜗顽,MySQL 5.7 具有以下幾個方面的新功能。

  1. 隨機(jī) root 密碼:MySQL 5.7 數(shù)據(jù)庫初始化完成后雨让,會自動生成一個 root@localhost 用戶堕担,root 用戶的密碼不為空搓谆,而是隨機(jī)產(chǎn)生一個密碼。
  2. 自定義 test 數(shù)據(jù)庫:MySQL 5.7 默認(rèn)安裝完成后沒有 test 數(shù)據(jù)庫。用戶可以自行創(chuàng)建 test 數(shù)據(jù)庫并對其進(jìn)行權(quán)限控制赌厅。
  3. 默認(rèn) SSL 加密:MySQL 5.7 采用了更加簡單的 SSL 安全訪問機(jī)制继准,默認(rèn)連接使用 SSL 的加密方式北苟。
  4. 密碼過期策略:MySQL 5.7 支持用戶設(shè)置密碼過期策略闪朱,要求用戶在一定時間過后必須修改密碼。
  5. 用戶鎖:MySQL 5.7 為管理員提供了暫時禁用某個用戶的功能捐川,使被鎖定的用戶無法訪問和使用數(shù)據(jù)庫脓鹃。
  6. 全面支持JSON:MySQL 5.7 也提供了對 JSON 的支持,在服務(wù)器端提供了一組便于操作 JSON 的函數(shù)古沥。存儲的方法是將 JSON 編碼成 BLOB 后再由存儲引擎進(jìn)行處理瘸右。這樣娇跟,MySQL 就同時擁有了關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫的優(yōu)點,并且可以提供完整的事務(wù)支持尊浓。
  7. 支持兩類生成列(generated column):生成列是通過數(shù)據(jù)庫中的其他列計算得到的一列逞频。當(dāng)為生成列創(chuàng)建索引時,可以便捷地加快查詢速度栋齿。MySQL 5.7 支持虛擬生成列和存儲生成列。虛擬生成列僅將數(shù)據(jù)保存在表的元數(shù)據(jù)中襟诸,作為缺省的生成列類型瓦堵;存儲生成列則是將數(shù)據(jù)永久保存在磁盤上,需要更多的磁盤空間歌亲。
  8. 引入系統(tǒng)庫(sys schema):系統(tǒng)庫中包含一系列視圖菇用、函數(shù)和存儲過程,通過多線程陷揪、多進(jìn)程惋鸥、組合事務(wù)提交和基于行的優(yōu)化方式將復(fù)制功能提高 5 倍以上,用戶向外擴(kuò)充其跨商品系統(tǒng)的工作負(fù)載時悍缠,得以大幅提升復(fù)制的效能和效率卦绣。

MySQL安裝后的目錄結(jié)構(gòu)介紹

MySQL 的安裝目錄包含一些子目錄以及一些后綴名為.ini的配置文件。MySQL 5.7 版本的安裝配置后飞蚓,目錄結(jié)構(gòu)可能如下圖所示:

MySQL目錄結(jié)構(gòu)
MySQL目錄結(jié)構(gòu)

注意:MySQL 5.7 的 Data 目錄和 my.ini 文件有時并不放在 MySQL 的安裝目錄下滤港,而是在 C:\ProgramData\MySQL\MySQL Server 5.7 下(如上圖所示)。一般情況下趴拧,C 盤下的 ProgramData 目錄是隱藏的溅漾,需要取消隱藏。

MySQL 安裝目錄的作用著榴。

  1. bin 目錄:用于放置一些可執(zhí)行文件添履,如 mysql.exe、mysqld.exe脑又、mysqlshow.exe 等暮胧。
  2. docs 目錄:存放一些文檔
  3. Data 目錄:登錄數(shù)據(jù)庫后,可使用 SHOW GLOBAL VARIABLES LIKE "%Datadir%"; 命令查看 Data 目錄位置挂谍。Data 目錄中用于放置一些日志文件以及數(shù)據(jù)庫叔壤。我們創(chuàng)建和保存的數(shù)據(jù)都存在這個目錄里。打開 Data 目錄口叙,以上數(shù)據(jù)庫都是安裝 MySQL 時炼绘,系統(tǒng)自動創(chuàng)建的
  4. include 目錄:用于放置一些頭文件,如:mysql.h妄田、mysql_ername.h 等俺亮。
  5. lib 目錄:用于放置一系列庫文件
  6. share 目錄:用于存放字符集驮捍、語言等信息
  7. my.ini 文件:my.ini 是 MySQL 默認(rèn)使用的配置文件,一般情況下脚曾,只要修改 my.ini 配置文件中的內(nèi)容就可以對 MySQL 進(jìn)行配置东且。
  8. 除了上述介紹的目錄,MySQL 安裝目錄下可能還有幾個后綴名為.ini的配置文件本讥,不同的配置文件代表不同的含義珊泳。my.ini 是 MySQL 默認(rèn)使用的配置文件,其它的配置文件都是適合不同數(shù)據(jù)庫的配置文件的模板拷沸,在文件名中就說明了適合的數(shù)據(jù)庫類型
    • my-huge.ini:適合超大型數(shù)據(jù)庫的配置文件色查。
    • my-large.ini:適合大型數(shù)據(jù)庫的配置文件。
    • my-medium.ini:適合中型數(shù)據(jù)庫的配置文件撞芍。
    • my-small.ini:適合小型數(shù)據(jù)庫的配置文件秧了。
    • my-template.ini:是配置文件的模板,MySQL 配置向?qū)⒃撆渲梦募羞x擇項寫入到 my.ini 文件序无。
    • my-innodb-heavy-4G.ini:表示該配置文件只對于 InnoDB 存儲引擎有效验毡,而且服務(wù)器的內(nèi)存不能小于 4GB。

MySQL數(shù)據(jù)目錄

在 MySQL 中帝嗡,物理文件存放在數(shù)據(jù)目錄中晶通。

數(shù)據(jù)目錄與安裝目錄不同,安裝目錄用來存儲控制服務(wù)器和客戶端程序的命令丈探,數(shù)據(jù)目錄用來存儲 MySQL 服務(wù)器在運行過程中產(chǎn)生的數(shù)據(jù)录择。

MySQL 中任何一項邏輯性或者物理性文件都具有可配置性,另外由于開源的原因碗降,每個版本都有一些改進(jìn)隘竭,所以不要死記硬背。

可以通過SHOW VARIABLES LIKE 'datadir';命令查看MySQL 的數(shù)據(jù)目錄路徑

下面分別講解 MySQL 數(shù)據(jù)目錄里存放的目錄和文件讼渊。

數(shù)據(jù)目錄

下圖是 MySQL(5.7.29)在 Windows 系統(tǒng)下安裝的數(shù)據(jù)文件目錄动看,可以看到有如下幾類文件。

img
  • Data 目錄用來存放數(shù)據(jù)庫相關(guān)的數(shù)據(jù)信息爪幻,包括數(shù)據(jù)庫信息菱皆,表信息等。
  • MySQL 5.7 及之后的版本開始支持集群模式挨稿,installer_config.xml 配置文件主要用于配置單節(jié)點或集群模式仇轻。
  • my.ini 文件是 MySQL 服務(wù)端和客戶端主要的配置文件,包括編碼集奶甘、默認(rèn)引擎篷店、最大連接數(shù)等設(shè)置。MySQL 服務(wù)器啟動時會默認(rèn)加載此文件。

Data目錄

Data 目錄中存放的文件如下圖所示:

img

由圖中可以看出疲陕,系統(tǒng)數(shù)據(jù)庫和用戶自定義數(shù)據(jù)庫的存放路徑相同方淤。數(shù)據(jù)庫目錄中主要存放相應(yīng)的數(shù)據(jù)庫對象

對 Data 目錄中的文件說明如下:

  • mysql、performance_schema蹄殃、sakila携茂、sys 和 world 是系統(tǒng)數(shù)據(jù)庫,information_schema 數(shù)據(jù)庫比較特殊诅岩,這里沒有相應(yīng)的數(shù)據(jù)庫目錄讳苦。
  • test 是用戶自定義的數(shù)據(jù)庫,也就是用戶自己創(chuàng)建的數(shù)據(jù)庫吩谦。
  • auto.cnf:MySQL 服務(wù)器的選項文件医吊,用于存儲 server-uuid 的值。server-uuid 與 server-id 一樣逮京,用于標(biāo)識 MySQL 實例在集群中的唯一性。
  • ib_logfile0束莫、ib_logfile1 是支持事務(wù)性引擎的 redo 日志文件
  • ibdata1 為共享表空間(系統(tǒng)表空間)懒棉。如果采用 InnoDB 引擎,默認(rèn)大小為 10M 览绿。
  • ibtmp1 為存儲臨時對象的空間策严,比如臨時表對象等。

數(shù)據(jù)目錄里可能還有:

  • MySQL 服務(wù)器的進(jìn)程 ID(PID)文件饿敲。
  • MySQL 服務(wù)器所生成的狀態(tài)和日志文件妻导。
  • DES 密鑰文件或服務(wù)器的 SSL 證書。

數(shù)據(jù)庫目錄

數(shù)據(jù)庫實際是一個目錄怀各,每個目錄都保存著相應(yīng)數(shù)據(jù)庫中的表以及表數(shù)據(jù)倔韭。對數(shù)據(jù)庫目錄中的文件說明如下:

  1. db.opt:用來保存數(shù)據(jù)庫的配置信息,比如該庫的默認(rèn)字符集編碼和字符集排序規(guī)則瓢对。如果你創(chuàng)建數(shù)據(jù)庫時指定了字符集和排序規(guī)則寿酌,后續(xù)創(chuàng)建的表沒有指定字符集和排序規(guī)則,那么該表將采用 db.opt 文件中指定的屬性硕蛹。
    • 對于 InnoDB 表醇疼,如果是獨立的表空間,數(shù)據(jù)庫中的表結(jié)構(gòu)以及數(shù)據(jù)都存儲在數(shù)據(jù)庫的路徑下(而不是在共享表空間 ibdata1 文件中)法焰。但是數(shù)據(jù)中的其他對象秧荆,包括數(shù)據(jù)被修改之后,事務(wù)提交之間的版本信息埃仪,仍然存儲在共享表空間的 ibdata1 文件中乙濒。
  2. .frm:在 MySQL 中建立任何一張數(shù)據(jù)表,其對應(yīng)的數(shù)據(jù)庫目錄下都會有該表的 .frm 文件贵试。.frm文件用來保存每個數(shù)據(jù)表的元數(shù)據(jù)(meta)和表結(jié)構(gòu)等信息琉兜。數(shù)據(jù)庫崩潰時凯正,可以用 .frm 文件恢復(fù)表結(jié)構(gòu)。.frm 文件跟存儲引擎無關(guān)豌蟋,任何存儲引擎的數(shù)據(jù)表都有 .frm 文件廊散,命名方式為表名.frm,如 users.frm梧疲。
    • MySQL 8.0 版本開始允睹,frm 文件被取消,MySQL 把文件中的數(shù)據(jù)都寫到了系統(tǒng)表空間幌氮。通過利用 InnoDB 存儲引擎來實現(xiàn)表 DDL 語句操作的原子性(在之前版本中是無法實現(xiàn)表 DDL 語句操作的原子性的缭受,如 TRUNCATE 無法回滾)。
  3. .MYD和.MYI
    • .MYD 理解為 My Data该互,用于存放 MyISAM 表的數(shù)據(jù)
    • .MYI 理解為 My Index米者,主要存放 MyISAM 表的索引及相關(guān)信息。
  4. .ibd:對于 InnoDB 存儲引擎的數(shù)據(jù)表宇智,一個表對應(yīng)兩個文件蔓搞,一個是 *.frm,存儲表結(jié)構(gòu)信息随橘;一個是*.ibd喂分,存儲表中數(shù)據(jù)。
  5. .ibd和.ibdata:都是專屬于 InnoDB 存儲引擎的數(shù)據(jù)庫文件机蔗。當(dāng)采用共享表空間時蒲祈,所有 InnoDB 表的數(shù)據(jù)均存放在 .ibdata 中。所以當(dāng)表越來越多時萝嘁,這個文件會變得很大梆掸。相對應(yīng)的 .ibd 就是采用獨享表空間時 InnoDB 表的數(shù)據(jù)文件。
    • 當(dāng)然酿愧,就算開啟了獨享表空間沥潭,ibdata 文件也會越來越大,因為這個文件里還存儲了:
      • 變更緩沖區(qū)
      • 雙寫緩沖區(qū)
      • 撤銷日志

MySQL配置文件(my.ini)詳解

my.ini 是 MySQL 數(shù)據(jù)庫中使用的配置文件嬉挡,MySQL 服務(wù)器啟動時會讀取這個配置文件钝鸽,我們可以通過修改這個文件,達(dá)到更新配置的目的庞钢。

  • 一般情況下拔恰,my.ini 在 MySql 安裝的根目錄下,也有可能在隱藏文件夾“ProgramData”下面基括。

文件內(nèi)容如下:

[client]
port=3306
[mysql]
default-character-set=gbk

上面顯示的是客戶端的參數(shù)颜懊,[client] 和 [mysql] 都是客戶端,參數(shù)說明如下:

  • port:表示 MySQL 客戶端連接服務(wù)器端時使用的端口號,默認(rèn)的端口號為 3306河爹。如果需要更改端口號的話匠璧,可以直接在這里修改。
  • default-character-set:表示 MySQL 客戶端默認(rèn)的字符集咸这。

服務(wù)器的參數(shù)夷恍,參數(shù)說明如下:

  • port=3306 :表示 MySQL 服務(wù)器的端口號

  • basedir=C:/Program Files/MySQL/MySQL Server 5.7/ :表示 MySQL 的安裝路徑

  • datadir=C:/ProgramData/MySQL/MySQL Server 5.7/Data :表示 MySQL 數(shù)據(jù)文件的存儲位置,也是數(shù)據(jù)表的存放位置

  • character-set-server=gb2312 :表示服務(wù)器端默認(rèn)的字符集

  • default-storage-engine=INNODB:創(chuàng)建數(shù)據(jù)表時媳维,默認(rèn)使用的存儲引擎

  • sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION":表示 SQL 模式的參數(shù)酿雪,通過這個參數(shù)可以設(shè)置檢驗 SQL 語句的嚴(yán)格程度

  • max_connections=100:表示允許同時訪問 MySQL 服務(wù)器的最大連接數(shù)。其中一個連接是保留的侄刽,留給管理員專用的

  • query_cache_size=0:查詢時的緩存大小指黎,緩存中可以存儲以前通過 SELECT 語句查詢過的信息,再次查詢時就可以直接從緩存中拿出信息州丹,可以改善查詢效率

  • table_cache=256:表示所有進(jìn)程打開表的總數(shù)

  • tmp_table_size=35M:表示內(nèi)存中每個臨時表允許的最大大小

  • thread_cache_size=8:表示緩存的最大線程數(shù)

  • myisam_max_sort_file_size=100G:表示 MySQL 重建索引時所允許的最大臨時文件的大小

  • myisam_sort_buffer_size=69M;表示重建索引時的緩存大小

  • key_buffer_size=55M:表示關(guān)鍵詞的緩存大小

  • read_buffer_size=64K:表示 MyISAM 表全表掃描的緩存大小

  • read_rnd_buffer_size=256K:表示將排序好的數(shù)據(jù)存入該緩存中

  • sort_buffer_size=256K:表示用于排序的緩存大小

InnoDB 存儲引擎使用的參數(shù)醋安,參數(shù)說明如下:

  • innodb_additional_mem_pool_size=3M:表示附加的內(nèi)存池,用來存儲 InnoDB 表的內(nèi)容墓毒。
  • innodb_flush_log_at_trx_commit=1:是設(shè)置提交日志的時機(jī)茬故,若設(shè)置為 1,InnoDB 會在每次提交后將事務(wù)日志寫到磁盤上蚁鳖。
  • innodb_log_buffer_size=2M:表示用來存儲日志數(shù)據(jù)的緩存區(qū)的大小。
  • innodb_buffer_pool_size=107M:表示緩存的大小赁炎,InnoDB 使用一個緩沖池類保存索引和原始數(shù)據(jù)醉箕。
  • innodb_log_file_size=54M:表示日志文件的大小。
  • innodb_thread_concurrency=18:表示在 InnoDB 存儲引擎允許的線程最大數(shù)徙垫。

注意:每次修改 my.ini 文件中的參數(shù)后讥裤,必須重新啟動 MySQL 服務(wù)才會有效。

MySQL服務(wù)器的SQL模式(sql_mode變量)

MySQL 服務(wù)器可以在不同的 SQL 模式下運行姻报,并且可以針對不同的客戶端以不同的方式應(yīng)用這些模式己英,具體取決于 sql_mode 系統(tǒng)變量的值。

SQL 模式定義了 MySQL 數(shù)據(jù)庫所支持的 SQL 語法和數(shù)據(jù)校驗(數(shù)據(jù)驗證檢查)吴旋,這樣可以更容易的在不同環(huán)境下使用 MySQL损肛。

在 MySQL 中,SQL 模式常用來解決下面幾類問題:

  • 通過設(shè)置 SQL Mode荣瑟,可以完成不同嚴(yán)格程度的數(shù)據(jù)校驗治拿,有效地保障了數(shù)據(jù)的準(zhǔn)確性。
  • 通過設(shè)置 SQL Mode 為 ANSI 模式笆焰,可以保證大多數(shù) SQL 符合標(biāo)準(zhǔn)的 SQL 語法劫谅,使不同數(shù)據(jù)庫之間進(jìn)行遷移時,不需要進(jìn)行較大的修改。
  • 在不同數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)遷移之前捏检,設(shè)置 SQL Mode 可以使 MySQL 中的數(shù)據(jù)更方便地遷移到目標(biāo)數(shù)據(jù)庫中荞驴。

sql_mode 系統(tǒng)變量的常用值

下面列出了幾種 SQL 模式常用的值。

  1. TRICT_ ALL_TABLES 和 STRICT_ TRANS_TABLES:如果將 sql_mode 的值設(shè)置為 TRICT_ALL_TABLES 和 STRICT_TRANS_TABLES贯城,那么 MySQL將啟用“嚴(yán)格”模式熊楼。在嚴(yán)格模式下,MySQL 服務(wù)器會更加嚴(yán)格地對待接收到的不合格數(shù)據(jù)冤狡,它不會把這些不合格的數(shù)據(jù)轉(zhuǎn)換為最為接近的有效值孙蒙,而是會拒絕接收它們。簡單來說 MySQL 的嚴(yán)格模式就是 MySQL 自身對數(shù)據(jù)進(jìn)行的嚴(yán)格校驗悲雳,例如格式挎峦、長度和類型等。
  2. TRADITIONAL:類似于嚴(yán)格模式合瓢,但是對于插入的不合格值會給出錯誤而不是警告坦胶。可以應(yīng)用在事務(wù)表和非事務(wù)表
    • 用于事務(wù)表只要出現(xiàn)錯誤就會立即回滾晴楔。
    • 如果是非事務(wù)存儲引擎顿苇,建議不要把 SQL Mode 值設(shè)置為 TRADITIONAL,因為出現(xiàn)錯誤前進(jìn)行的操作不會回滾税弃,這樣會導(dǎo)致操作只進(jìn)行了一部分纪岁。
  3. ANSI_QUOTES:MySQL 服務(wù)器會把雙引號識別為一個標(biāo)識符引用字符,不是字符串的引號字符则果。在啟用 ANSI_QUOTES 時幔翰,不能用雙引號來引用字符串
  4. PIPES_ AS_ CONCAT:會讓 MySQL 服務(wù)器把||當(dāng)成一個標(biāo)準(zhǔn)的 SQL 字符串連接運算符西壮,而不會把它當(dāng)成是 OR 運算符的同義詞遗增。
    • 在 Oracle 等數(shù)據(jù)庫中,||被視為字符串的連接操作符款青,所以在其它數(shù)據(jù)庫中含有||操作符的 SQL 在 MySQL 中將無法執(zhí)行做修,為了解決這個問題,MySQL 提供了這個值抡草。
  5. ANSI:會同時啟用 ANSI_QUOTES饰及、PIPES_ AS_CONCAT 和其它的幾個模式值,使 MySQL 服務(wù)器的行為比它的默認(rèn)運行狀態(tài)更接近于標(biāo)準(zhǔn) SQL康震。

如何設(shè)置 sql_mode

在設(shè)置 SQL 模式時旋炒,需要指定一個由單個模式值或多個模式值(多個模式值用逗號分隔)構(gòu)成的值,或者指定一個空字符串签杈,用以清除該值瘫镇。值不區(qū)分大小寫鼎兽。

如果想在啟動服務(wù)器時設(shè)置 SQL 模式,那么可以在 mysqld 命令行铣除,或者在某個選項文件里設(shè)置系統(tǒng)變量 sql_mode谚咬。可以使用下面語句:

sql_mode= "TRADITIONAL "
sql_mode= "ANSI_ QUOTES, PIPES_ AS_ CONCAT"

如果只是想在運行時更改 SQL 模式尚粘,那么可以使用 SET 語句來設(shè)置 sql_mode 系統(tǒng)變量择卦。

SET sql_mode = ' TRADITIONAL' ;

如果想設(shè)置全局性的 SQL 模式,則需要加上 GLOBAL 關(guān)鍵字:

SET GLOBAL sql_mode = ' TRADITIONAL';

設(shè)置全局變量需要具備 SUPER 管理權(quán)限郎嫁。新設(shè)置的全局變量值將成為此后連入客戶端的默認(rèn) SQL 模式秉继。

如果想獲取當(dāng)前會話或全局的 SQL 模式值,則可以使用如下語句:

SELECT @@SESSION.sql_mode;
SELECT @@GLOBAL. sql_mode;

其返回值由當(dāng)前啟用的所有模式構(gòu)成泽铛,兩個模式之間以逗號隔開尚辑。如果當(dāng)前沒有啟用任何模式,則返回一個空值盔腔。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杠茬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弛随,更是在濱河造成了極大的恐慌瓢喉,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舀透,死亡現(xiàn)場離奇詭異栓票,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)愕够,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門逗载,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人链烈,你說我怎么就攤上這事≈壳” “怎么了强衡?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長码荔。 經(jīng)常有香客問我漩勤,道長,這世上最難降的妖魔是什么缩搅? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任越败,我火速辦了婚禮,結(jié)果婚禮上硼瓣,老公的妹妹穿的比我還像新娘究飞。我一直安慰自己置谦,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布亿傅。 她就那樣靜靜地躺著媒峡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪葵擎。 梳的紋絲不亂的頭發(fā)上谅阿,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機(jī)與錄音酬滤,去河邊找鬼签餐。 笑死,一個胖子當(dāng)著我的面吹牛盯串,可吹牛的內(nèi)容都是我干的氯檐。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼嘴脾,長吁一口氣:“原來是場噩夢啊……” “哼男摧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起译打,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤耗拓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后奏司,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乔询,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年韵洋,在試婚紗的時候發(fā)現(xiàn)自己被綠了竿刁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡搪缨,死狀恐怖食拜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情副编,我是刑警寧澤负甸,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站痹届,受9級特大地震影響呻待,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜队腐,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一蚕捉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柴淘,春花似錦迫淹、人聲如沸秘通。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽充易。三九已至,卻和暖如春荸型,著一層夾襖步出監(jiān)牢的瞬間盹靴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工瑞妇, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留稿静,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓辕狰,卻偏偏與公主長得像改备,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蔓倍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,724評論 2 351