MySQL

164.數(shù)據(jù)庫的三范式是什么涮因?

第一范式:強(qiáng)調(diào)的是列的原子性,即數(shù)據(jù)庫表的每一列都是不可分割的原子數(shù)據(jù)項。
第二范式:要求實體的屬性完全依賴于主關(guān)鍵字。所謂完全依賴是指不能存在僅依賴主關(guān)鍵字一部分的屬性茎芭。
第三范式:任何非主屬性不依賴于其它非主屬性。

165. 一張自增表里面總共有 7 條數(shù)據(jù)誓沸,刪除了最后 2 條數(shù)據(jù)梅桩,重啟 mysql 數(shù)據(jù)庫,又插入了一條數(shù)據(jù)拜隧,此時 id 是幾宿百?

表類型如果是 MyISAM ,那 id 就是 8洪添。
表類型如果是 InnoDB垦页,那 id 就是 6。

InnoDB 表只會把自增主鍵的最大 id 記錄在內(nèi)存中薇组,所以重啟之后會導(dǎo)致最大 id 丟失外臂。

166. 如何獲取當(dāng)前數(shù)據(jù)庫版本?

使用 select version() 獲取當(dāng)前 MySQL 數(shù)據(jù)庫版本律胀。

167. 說一下 ACID 是什么宋光?

Atomicity(原子性):一個事務(wù)(transaction)中的所有操作,或者全部完成炭菌,或者全部不完成罪佳,不會結(jié)束在中間某個環(huán)節(jié)。事務(wù)在執(zhí)行過程中發(fā)生錯誤黑低,會被恢復(fù)(Rollback)到事務(wù)開始前的狀態(tài)赘艳,就像這個事務(wù)從來沒有執(zhí)行過一樣酌毡。即,事務(wù)不可分割蕾管、不可約簡枷踏。
Consistency(一致性):在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫的完整性沒有被破壞掰曾。這表示寫入的資料必須完全符合所有的預(yù)設(shè)約束旭蠕、觸發(fā)器、級聯(lián)回滾等旷坦。
Isolation(隔離性):數(shù)據(jù)庫允許多個并發(fā)事務(wù)同時對其數(shù)據(jù)進(jìn)行讀寫和修改的能力掏熬,隔離性可以防止多個事務(wù)并發(fā)執(zhí)行時由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離分為不同級別秒梅,包括讀未提交(Read uncommitted)旗芬、讀提交(read committed)、可重復(fù)讀(repeatable read)和串行化(Serializable)捆蜀。
Durability(持久性):事務(wù)處理結(jié)束后疮丛,對數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會丟失漱办。

168. char 和 varchar 的區(qū)別是什么这刷?

char(n) :固定長度類型,比如訂閱 char(10)娩井,當(dāng)你輸入"abc"三個字符的時候暇屋,它們占的空間還是 10 個字節(jié),其他 7 個是空字節(jié)洞辣。
chat 優(yōu)點:效率高咐刨;缺點:占用空間;適用場景:存儲密碼的 md5 值扬霜,固定長度的定鸟,使用 char 非常合適。
varchar(n) :可變長度著瓶,存儲的值是每個值占用的字節(jié)再加上一個用來記錄其長度的字節(jié)的長度联予。
所以,從空間上考慮 varcahr 比較合適材原;從效率上考慮 char 比較合適沸久,二者使用需要權(quán)衡。

169. float 和 double 的區(qū)別是什么余蟹?

float 最多可以存儲 8 位的十進(jìn)制數(shù)卷胯,并在內(nèi)存中占 4 字節(jié)。
double 最可可以存儲 16 位的十進(jìn)制數(shù)威酒,并在內(nèi)存中占 8 字節(jié)窑睁。

170. mysql 的內(nèi)連接挺峡、左連接、右連接有什么區(qū)別担钮?

內(nèi)連接關(guān)鍵字:inner join橱赠;左連接:left join;右連接:right join裳朋。

內(nèi)連接是把匹配的關(guān)聯(lián)數(shù)據(jù)顯示出來病线;左連接是左邊的表全部顯示出來,右邊的表顯示出符合條件的數(shù)據(jù)鲤嫡;右連接正好相反。

171. mysql 索引是怎么實現(xiàn)的绑莺?

索引是滿足某種特定查找算法的數(shù)據(jù)結(jié)構(gòu)暖眼,而這些數(shù)據(jù)結(jié)構(gòu)會以某種方式指向數(shù)據(jù),從而實現(xiàn)高效查找數(shù)據(jù)纺裁。

具體來說 MySQL 中的索引诫肠,不同的數(shù)據(jù)引擎實現(xiàn)有所不同,但目前主流的數(shù)據(jù)庫引擎的索引都是 B+ 樹實現(xiàn)的欺缘,B+ 樹的搜索效率栋豫,可以到達(dá)二分法的性能,找到數(shù)據(jù)區(qū)域之后就找到了完整的數(shù)據(jù)結(jié)構(gòu)了谚殊,所有索引的性能也是更好的丧鸯。

172. 怎么驗證 mysql 的索引是否滿足需求?

使用 explain 查看 SQL 是如何執(zhí)行查詢語句的嫩絮,從而分析你的索引是否滿足需求丛肢。

explain 語法:explain select * from table where type=1。

173. 說一下數(shù)據(jù)庫的事務(wù)隔離剿干?

MySQL 的事務(wù)隔離是在 MySQL. ini 配置文件里添加的蜂怎,在文件的最后添加:transaction-isolation = REPEATABLE-READ

可用的配置值:READ-UNCOMMITTED、READ-COMMITTED置尔、REPEATABLE-READ杠步、SERIALIZABLE。

READ-UNCOMMITTED:未提交讀榜轿,最低隔離級別幽歼、事務(wù)未提交前,就可被其他事務(wù)讀炔畹肌(會出現(xiàn)幻讀试躏、臟讀、不可重復(fù)讀)设褐。
READ-COMMITTED:提交讀颠蕴,一個事務(wù)提交后才能被其他事務(wù)讀取到(會造成幻讀泣刹、不可重復(fù)讀)。
REPEATABLE-READ:可重復(fù)讀犀被,默認(rèn)級別椅您,保證多次讀取同一個數(shù)據(jù)時,其值都和事務(wù)開始時候的內(nèi)容是一致寡键,禁止讀取到別的事務(wù)未提交的數(shù)據(jù)(會造成幻讀)掀泳。
SERIALIZABLE:序列化,代價最高最可靠的隔離級別西轩,該隔離級別能防止臟讀员舵、不可重復(fù)讀、幻讀藕畔。

臟讀 :表示一個事務(wù)能夠讀取另一個事務(wù)中還未提交的數(shù)據(jù)马僻。比如,某個事務(wù)嘗試插入記錄 A注服,此時該事務(wù)還未提交韭邓,然后另一個事務(wù)嘗試讀取到了記錄 A。

不可重復(fù)讀 :是指在一個事務(wù)內(nèi)溶弟,多次讀同一數(shù)據(jù)女淑。

幻讀 :指同一個事務(wù)內(nèi)多次查詢返回的結(jié)果集不一樣。比如同一個事務(wù) A 第一次查詢時候有 n 條記錄辜御,但是第二次同等條件下查詢卻有 n+1 條記錄鸭你,這就好像產(chǎn)生了幻覺。發(fā)生幻讀的原因也是另外一個事務(wù)新增或者刪除或者修改了第一個事務(wù)結(jié)果集里面的數(shù)據(jù)我抠,同一個記錄的數(shù)據(jù)內(nèi)容被修改了苇本,所有數(shù)據(jù)行的記錄就變多或者變少了。

174. 說一下 mysql 常用的引擎菜拓?

InnoDB 引擎:InnoDB 引擎提供了對數(shù)據(jù)庫 acid 事務(wù)的支持瓣窄,并且還提供了行級鎖和外鍵的約束,它的設(shè)計的目標(biāo)就是處理大數(shù)據(jù)容量的數(shù)據(jù)庫系統(tǒng)纳鼎。MySQL 運(yùn)行的時候俺夕,InnoDB 會在內(nèi)存中建立緩沖池,用于緩沖數(shù)據(jù)和索引贱鄙。但是該引擎是不支持全文搜索劝贸,同時啟動也比較的慢,它是不會保存表的行數(shù)的逗宁,所以當(dāng)進(jìn)行 select count(*) from table 指令的時候映九,需要進(jìn)行掃描全表。由于鎖的粒度小瞎颗,寫操作是不會鎖定全表的,所以在并發(fā)度較高的場景下使用會提升效率的件甥。

MyIASM 引擎:MySQL 的默認(rèn)引擎捌议,但不提供事務(wù)的支持,也不支持行級鎖和外鍵引有。因此當(dāng)執(zhí)行插入和更新語句時瓣颅,即執(zhí)行寫操作的時候需要鎖定這個表,所以會導(dǎo)致效率會降低譬正。不過和 InnoDB 不同的是宫补,MyIASM 引擎是保存了表的行數(shù),于是當(dāng)進(jìn)行 select count(*) from table 語句時曾我,可以直接的讀取已經(jīng)保存的值而不需要進(jìn)行掃描全表粉怕。所以,如果表的讀操作遠(yuǎn)遠(yuǎn)多于寫操作時抒巢,并且不需要事務(wù)的支持的斋荞,可以將 MyIASM 作為數(shù)據(jù)庫引擎的首選。

175. 說一下 mysql 的行鎖和表鎖虐秦?

MyISAM 只支持表鎖,InnoDB 支持表鎖和行鎖凤优,默認(rèn)為行鎖悦陋。

表級鎖:開銷小,加鎖快筑辨,不會出現(xiàn)死鎖俺驶。鎖定粒度大,發(fā)生鎖沖突的概率最高棍辕,并發(fā)量最低暮现。
行級鎖:開銷大,加鎖慢楚昭,會出現(xiàn)死鎖栖袋。鎖力度小,發(fā)生鎖沖突的概率小抚太,并發(fā)度最高塘幅。

176. 說一下樂觀鎖和悲觀鎖?

樂觀鎖:每次去拿數(shù)據(jù)的時候都認(rèn)為別人不會修改尿贫,所以不會上鎖电媳,但是在提交更新的時候會判斷一下在此期間別人有沒有去更新這個數(shù)據(jù)。
悲觀鎖:每次去拿數(shù)據(jù)的時候都認(rèn)為別人會修改庆亡,所以每次在拿數(shù)據(jù)的時候都會上鎖匾乓,這樣別人想拿這個數(shù)據(jù)就會阻止,直到這個鎖被釋放又谋。

數(shù)據(jù)庫的樂觀鎖需要自己實現(xiàn)拼缝,在表里面添加一個 version 字段娱局,每次修改成功值加 1,這樣每次修改的時候先對比一下珍促,自己擁有的 version 和數(shù)據(jù)庫現(xiàn)在的 version 是否一致铃辖,如果不一致就不修改,這樣就實現(xiàn)了樂觀鎖猪叙。

177. mysql 問題排查都有哪些手段娇斩?

使用 show processlist 命令查看當(dāng)前所有連接信息。
使用 explain 命令查詢 SQL 語句執(zhí)行計劃穴翩。
開啟慢查詢?nèi)罩救冢榭绰樵兊?SQL。

178. 如何做 mysql 的性能優(yōu)化芒帕?

為搜索字段創(chuàng)建索引歉嗓。
避免使用 select *,列出需要查詢的字段背蟆。
垂直分割分表鉴分。
選擇正確的存儲引擎。

178.1 分庫分表常用框架

compass
sharding

178.2 mysql主從带膀、主備

參考:
MySQL主從復(fù)制原理

178.3 binlog同步

方案調(diào)研:
  • 方案一:數(shù)據(jù)傳輸服務(wù)DTS

阿里服務(wù):https://help.aliyun.com/product/26590.html?spm=a2c4g.11186623.3.1.ToaSL1

阿里的服務(wù)數(shù)據(jù)傳輸服務(wù)DTS不支持hive志珍,只支持內(nèi)部的ODPS(數(shù)據(jù)倉庫整體解決方案)。

ODPS看起來確實很強(qiáng)大垛叨,我們不采用原因伦糯,單次查詢,計算太貴(查詢一次幾塊錢)嗽元,存儲很便宜

  • 方案二:

外部方式收集binlog日志敛纲,自行解析。https://www.cnblogs.com/yucy/p/7845105.html

自己用flume收集mysqlbinlog剂癌,然后自行解析淤翔。其實就是Maxwell的方案

原理都是偽裝成mysql的slave,發(fā)起同步dump命令珍手,binlog后接下

  1. Canal DTS開源版本办铡,獲取binlog,后續(xù)要自己根據(jù)需求琳要,寫client開發(fā)(https://github.com/alibaba/canal
  2. maxwell獲取binlog后會解析為json格式寡具,可以定期寫入kafka、文件稚补、redis等童叠。(http://maxwells-daemon.io/(選擇此方案,開發(fā)代價最小)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厦坛,一起剝皮案震驚了整個濱河市五垮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杜秸,老刑警劉巖放仗,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異撬碟,居然都是意外死亡诞挨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門呢蛤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惶傻,“玉大人,你說我怎么就攤上這事其障∫遥” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵励翼,是天一觀的道長蜈敢。 經(jīng)常有香客問我,道長汽抚,這世上最難降的妖魔是什么扶认? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮殊橙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狱从。我一直安慰自己膨蛮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布季研。 她就那樣靜靜地躺著敞葛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪与涡。 梳的紋絲不亂的頭發(fā)上惹谐,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機(jī)與錄音驼卖,去河邊找鬼氨肌。 笑死,一個胖子當(dāng)著我的面吹牛酌畜,可吹牛的內(nèi)容都是我干的怎囚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼桥胞,長吁一口氣:“原來是場噩夢啊……” “哼恳守!你這毒婦竟也來了考婴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤催烘,失蹤者是張志新(化名)和其女友劉穎沥阱,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伊群,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡考杉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了在岂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奔则。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蔽午,靈堂內(nèi)的尸體忽然破棺而出易茬,到底是詐尸還是另有隱情,我是刑警寧澤及老,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布抽莱,位于F島的核電站,受9級特大地震影響骄恶,放射性物質(zhì)發(fā)生泄漏食铐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一僧鲁、第九天 我趴在偏房一處隱蔽的房頂上張望虐呻。 院中可真熱鬧,春花似錦寞秃、人聲如沸斟叼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朗涩。三九已至,卻和暖如春绑改,著一層夾襖步出監(jiān)牢的瞬間谢床,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工厘线, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留识腿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓造壮,卻偏偏與公主長得像覆履,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 索引 數(shù)據(jù)庫中的查詢操作非常普遍,索引就是提升查找速度的一種手段 索引的類型 從數(shù)據(jù)結(jié)構(gòu)角度分 1.B+索引:傳統(tǒng)...
    一凡呀閱讀 2,920評論 0 8
  • 一伟众、概述 數(shù)據(jù)庫鎖定機(jī)制簡單來說析藕,就是數(shù)據(jù)庫為了保證數(shù)據(jù)的一致性,而使各種共享資源在被并發(fā)訪問變得有序所設(shè)計的一種...
    不變甄心閱讀 2,736評論 0 3
  • 這篇文章主要涉及到MySQL的知識點: 索引(包括分類及優(yōu)化方式凳厢,失效條件账胧,底層結(jié)構(gòu)) sql語法(join,un...
    一根薯條閱讀 2,714評論 0 8
  • 1)介紹 PerconaXtraBackup(簡稱PXB)是Percona公司開發(fā)的一個用于MySQL數(shù)據(jù)庫物理熱...
    溫東閱讀 2,506評論 0 6
  • 主要來自 《高性能MySQL(第3版)》 《MySQL管理之道:性能調(diào)優(yōu)先紫、高可用與監(jiān)控(第2版)》 《MyS...
    FengXQ閱讀 557評論 0 0