日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

18道经典MySQL面试题,祝您升职加薪

發(fā)布時(shí)間:2024/8/26 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 18道经典MySQL面试题,祝您升职加薪 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、MySQL的復(fù)制原理以及流程

保證主服務(wù)器(Master)和從服務(wù)器(Slave)的數(shù)據(jù)是一致性的,向Master插入數(shù)據(jù)后,Slave會(huì)自動(dòng)從Master把修改的數(shù)據(jù)同步過來(有一定的延遲),通過這種方式來保證數(shù)據(jù)的一致性,就是Mysql復(fù)制

延時(shí)性:延時(shí)表現(xiàn)為 延遲時(shí)間=從庫(kù)執(zhí)行SQL完成的時(shí)刻-主庫(kù)開始執(zhí)行SQL時(shí)間;

1.1、MySQL主從復(fù)制解決的問題

數(shù)據(jù)分布:隨意開始或停止復(fù)制,并在不同地理位置分布數(shù)據(jù)備份

負(fù)載均衡:降低單個(gè)服務(wù)器的壓力

高可用和故障切換:幫助應(yīng)用程序避免單點(diǎn)失敗

升級(jí)測(cè)試:可以用更高版本的MySQL作為從庫(kù)

1.2、**基本原理流程,3個(gè)線程以及之間的關(guān)聯(lián) ** :

主:binlog線程——記錄下所有改變了數(shù)據(jù)庫(kù)數(shù)據(jù)的語句,放進(jìn)master上的binlog中;

從:io線程——在使用start slave 之后,負(fù)責(zé)從master上拉取 binlog 內(nèi)容,放進(jìn)自己的relay log中;

從:sql執(zhí)行線程——執(zhí)行relay log中的語句;

復(fù)制過程

Binary log:主數(shù)據(jù)庫(kù)的二進(jìn)制日志

Relay log:從服務(wù)器的中繼日志

第一步:master在每個(gè)事務(wù)更新數(shù)據(jù)完成之前,將該操作記錄串行地寫入到binlog文件中。

第二步:salve開啟一個(gè)I/O Thread,該線程在master打開一個(gè)普通連接,主要工作是binlog dump process。如果讀取的進(jìn)度已經(jīng)跟上了master,就進(jìn)入睡眠狀態(tài)并等待master產(chǎn)生新的事件。I/O線程最終的目的是將這些事件寫入到中繼日志中。

第三步:SQL Thread會(huì)讀取中繼日志,并順序執(zhí)行該日志中的SQL事件,從而與主數(shù)據(jù)庫(kù)中的數(shù)據(jù)保持一致。

2、MySQL中myisam與innodb的區(qū)別

1>.InnoDB支持事物,而MyISAM不支持事物

2>.InnoDB支持行級(jí)鎖,而MyISAM支持表級(jí)鎖

3>.InnoDB支持MVCC, 而MyISAM不支持

4>.InnoDB支持外鍵,而MyISAM不支持

5>.InnoDB不支持全文索引,而MyISAM支持。

innodb引擎的4大特性

插入緩沖(insert buffer),二次寫(double write),自適應(yīng)哈希索引(ahi),預(yù)讀(read ahead)

兩者selectcount(*)哪個(gè)更快,為什么?

MYISAM更快,因?yàn)閙yisam內(nèi)部維護(hù)了一個(gè)計(jì)數(shù)器,可以直接調(diào)取。

引擎特性
MYISAM不支持外鍵,表鎖,插入數(shù)據(jù)時(shí),鎖定整個(gè)表,查表總行數(shù)時(shí),不需要全表掃描,快
INNODB支持外鍵,行鎖,查表總行數(shù)時(shí),全表掃描所以慢

3、MySQL中varchar與char的區(qū)別以及varchar(50)中的50代表的涵義

(1)、varchar與char的區(qū)別

CHAR與VARCHAR類型類似,但它們保存和檢索的方式不同。CHAR有固定的長(zhǎng)度,而VARCHAR屬于可變長(zhǎng)的字符類型。它們最大長(zhǎng)度和是否尾部空格被保留等方面也不同。在存儲(chǔ)和檢索過程中不進(jìn)行大小寫轉(zhuǎn)換。

建議

MyISAM存儲(chǔ)引擎 建議使用固定長(zhǎng)度,數(shù)據(jù)列代替可變長(zhǎng)度的數(shù)據(jù)列
INNODB 存儲(chǔ)引擎 建議使用VARCHAR類型

文字字段若長(zhǎng)度固定,如:身分證號(hào)碼,就不要用 varchar 或 nvarchar,應(yīng)該用 char 或 nchar。
支持多語言的站點(diǎn)應(yīng)考慮使用 Unicode nchar 或 nvarchar 數(shù)據(jù)類型以盡量減少字符轉(zhuǎn)換問題
文字字段若長(zhǎng)度不固定,如:地址,則該用 varchar 或 nvarchar。除了可節(jié)省存儲(chǔ)空間外,存取硬盤時(shí)也會(huì)較有效率

(2)、varchar(50)中50的涵義

最多存放50個(gè)字符,varchar(50)和(200)存儲(chǔ)hello所占空間一樣,但后者在排序時(shí)會(huì)消耗更多內(nèi)存,因?yàn)閛rder by col采用fixed_length計(jì)算col長(zhǎng)度(memory引擎也一樣)。在早期 MySQL 版本中, 50 代表字節(jié)數(shù),現(xiàn)在代表字符數(shù)。

(3)、int(20)中20的涵義

不一樣,前者表示最多存放20個(gè)字符,后者表示最多顯示20個(gè)字符,但是存儲(chǔ)空間還是占4字節(jié)存儲(chǔ),存儲(chǔ)范圍不變。

4、innodb的事務(wù)與日志的實(shí)現(xiàn)方式

(1)、有多少種日志:

錯(cuò)誤日志:記錄出錯(cuò)信息,也記錄一些警告信息或者正確的信息。
查詢?nèi)罩?#xff1a;記錄所有對(duì)數(shù)據(jù)庫(kù)請(qǐng)求的信息,不論這些請(qǐng)求是否得到了正確的執(zhí)行。
慢查詢?nèi)罩?#xff1a;設(shè)置一個(gè)閾值,將運(yùn)行時(shí)間超過該值的所有SQL語句都記錄到慢查詢的日志文件中。
二進(jìn)制日志:記錄對(duì)數(shù)據(jù)庫(kù)執(zhí)行更改的所有操作。
中繼日志:
事務(wù)日志:

日志的存放形式?:

redo:在頁(yè)修改的時(shí)候,先寫到 redo log buffer 里面,然后寫到redo log 的文件系統(tǒng)緩存里面(fwrite),然后再同步到磁盤文件( fsync)。
Undo:在 MySQL5.5 之前, undo 只能存放在 ibdata*文件里面, 5.6之后,可以通過設(shè)置innodb_undo_tablespaces?參數(shù)把 ?????? undo log 存放在 ibdata*之外。

(2)、事物的4種隔離級(jí)別

隔離級(jí)別
讀未提交(RU)
讀已提交(RC)
可重復(fù)讀(RR)
串行

(3)、事務(wù)是如何通過日志來實(shí)現(xiàn)的,說得越深入越好基本流程如下:

????因?yàn)槭聞?wù)在修改頁(yè)時(shí),要先記 undo,在記 undo 之前要記 undo 的 redo, 然后修改數(shù)據(jù)頁(yè),再記數(shù)據(jù)頁(yè)修改的 redo。Redo(里面包括 undo 的修改) 一定要比數(shù)據(jù)頁(yè)先持久化到磁盤。當(dāng)事務(wù)需要回滾時(shí),因?yàn)橛?undo,可以把數(shù)據(jù)頁(yè)回滾到前鏡像的狀態(tài),崩潰恢復(fù)時(shí),如果 redo log 中事務(wù)沒有對(duì)應(yīng)的 commit 記錄,那么需要用 undo把該事務(wù)的修改回滾到事務(wù)開始之前。如果有 commit 記錄,就用 redo 前滾到該事務(wù)完成時(shí)并提交掉。

?

5、問了MySQL binlog的幾種日志錄入格式以及區(qū)別

(1)、binlog的日志格式的種類和分別
(2)、適用場(chǎng)景;
(3)、結(jié)合第一個(gè)問題,每一種日志格式在復(fù)制中的優(yōu)劣。
Statement:每一條會(huì)修改數(shù)據(jù)的sql都會(huì)記錄在binlog中。
優(yōu)點(diǎn):不需要記錄每一行的變化,減少了binlog日志量,節(jié)約了IO,提高性能。(相比row能節(jié)約多少性能 與日志量,這個(gè)取決于應(yīng)用的SQL情況,正常同一條記錄修改或者插入row格式所產(chǎn)生的日志量還小于Statement產(chǎn)生的日志量,但是考慮到如果帶條 件的update操作,以及整表刪除,alter表等操作,ROW格式會(huì)產(chǎn)生大量日志,因此在考慮是否使用ROW格式日志時(shí)應(yīng)該跟據(jù)應(yīng)用的實(shí)際情況,其所 產(chǎn)生的日志量會(huì)增加多少,以及帶來的IO性能問題。)
缺點(diǎn):由于記錄的只是執(zhí)行語句,為了這些語句能在slave上正確運(yùn)行,因此還必須記錄每條語句在執(zhí)行的時(shí)候的 一些相關(guān)信息,以保證所有語句能在slave得到和在master端執(zhí)行時(shí)候相同 的結(jié)果。另外mysql 的復(fù)制,像一些特定函數(shù)功能,slave可與master上要保持一致會(huì)有很多相關(guān)問題(如sleep()函數(shù), last_insert_id(),以及user-defined functions(udf)會(huì)出現(xiàn)問題).
使用以下函數(shù)的語句也無法被復(fù)制:
* LOAD_FILE()
* UUID()
* USER()
* FOUND_ROWS()
* SYSDATE() (除非啟動(dòng)時(shí)啟用了 --sysdate-is-now 選項(xiàng))
同時(shí)在INSERT ...SELECT 會(huì)產(chǎn)生比 RBR 更多的行級(jí)鎖
2.Row:不記錄sql語句上下文相關(guān)信息,僅保存哪條記錄被修改。
優(yōu)點(diǎn): binlog中可以不記錄執(zhí)行的sql語句的上下文相關(guān)的信息,僅需要記錄那一條記錄被修改成什么了。所以rowlevel的日志內(nèi)容會(huì)非常清楚的記錄下 每一行數(shù)據(jù)修改的細(xì)節(jié)。而且不會(huì)出現(xiàn)某些特定情況下的存儲(chǔ)過程,或function,以及trigger的調(diào)用和觸發(fā)無法被正確復(fù)制的問題
缺點(diǎn):所有的執(zhí)行的語句當(dāng)記錄到日志中的時(shí)候,都將以每行記錄的修改來記錄,這樣可能會(huì)產(chǎn)生大量的日志內(nèi)容,比 如一條update語句,修改多條記錄,則binlog中每一條修改都會(huì)有記錄,這樣造成binlog日志量會(huì)很大,特別是當(dāng)執(zhí)行alter table之類的語句的時(shí)候,由于表結(jié)構(gòu)修改,每條記錄都發(fā)生改變,那么該表每一條記錄都會(huì)記錄到日志中。
3.Mixedlevel: 是以上兩種level的混合使用,一般的語句修改使用statment格式保存binlog,如一些函數(shù),statement無法完成主從復(fù)制的操作,則 采用row格式保存binlog,MySQL會(huì)根據(jù)執(zhí)行的每一條具體的sql語句來區(qū)分對(duì)待記錄的日志形式,也就是在Statement和Row之間選擇 一種.新版本的MySQL中隊(duì)row level模式也被做了優(yōu)化,并不是所有的修改都會(huì)以row level來記錄,像遇到表結(jié)構(gòu)變更的時(shí)候就會(huì)以statement模式來記錄。至于update或者delete等修改數(shù)據(jù)的語句,還是會(huì)記錄所有行的 變更。

6、問了下MySQL數(shù)據(jù)庫(kù)cpu飆升到500%的話他怎么處理?

(1)、沒有經(jīng)驗(yàn)的,可以不問;
(2)、有經(jīng)驗(yàn)的,問他們的處理思路。
列出所有進(jìn)程??show processlist??觀察所有進(jìn)程??多秒沒有狀態(tài)變化的(干掉)
查看超時(shí)日志或者錯(cuò)誤日志 (做了幾年開發(fā),一般會(huì)是查詢以及大批量的插入會(huì)導(dǎo)致cpu與i/o上漲,,,,當(dāng)然不排除網(wǎng)絡(luò)狀態(tài)突然斷了,,導(dǎo)致一個(gè)請(qǐng)求服務(wù)器只接受到一半,比如where子句或分頁(yè)子句沒有發(fā)送,,當(dāng)然的一次被坑經(jīng)歷)

7、sql優(yōu)化

(1)、explain出來的各種item的意義;
select_type?
表示查詢中每個(gè)select子句的類型
type
表示MySQL在表中找到所需行的方式,又稱“訪問類型”
possible_keys?
指出MySQL能使用哪個(gè)索引在表中找到行,查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢使用
key
顯示MySQL在查詢中實(shí)際使用的索引,若沒有使用索引,顯示為NULL
key_len
表示索引中使用的字節(jié)數(shù),可通過該列計(jì)算查詢中使用的索引的長(zhǎng)度
ref
表示上述表的連接匹配條件,即哪些列或常量被用于查找索引列上的值?
Extra
包含不適合在其他列中顯示但十分重要的額外信息

(2)、profile的意義以及使用場(chǎng)景;
查詢到 SQL 會(huì)執(zhí)行多少時(shí)間, 并看出 CPU/Memory 使用量, 執(zhí)行過程中 Systemlock, Table lock 花多少時(shí)間等等

8、備份計(jì)劃,mysqldump以及xtranbackup的實(shí)現(xiàn)原理

(1)、備份計(jì)劃;
這里每個(gè)公司都不一樣,您別說那種1小時(shí)1全備什么的就行
(2)、備份恢復(fù)時(shí)間;
這里跟機(jī)器,尤其是硬盤的速率有關(guān)系,以下列舉幾個(gè)僅供參考
20G的2分鐘(mysqldump)
80G的30分鐘(mysqldump)
111G的30分鐘(mysqldump)
288G的3小時(shí)(xtra)
3T的4小時(shí)(xtra)
邏輯導(dǎo)入時(shí)間一般是備份時(shí)間的5倍以上
(3)、xtrabackup實(shí)現(xiàn)原理
在InnoDB內(nèi)部會(huì)維護(hù)一個(gè)redo日志文件,我們也可以叫做事務(wù)日志文件。事務(wù)日志會(huì)存儲(chǔ)每一個(gè)InnoDB表數(shù)據(jù)的記錄修改。當(dāng)InnoDB啟動(dòng)時(shí),InnoDB會(huì)檢查數(shù)據(jù)文件和事務(wù)日志,并執(zhí)行兩個(gè)步驟:它應(yīng)用(前滾)已經(jīng)提交的事務(wù)日志到數(shù)據(jù)文件,并將修改過但沒有提交的數(shù)據(jù)進(jìn)行回滾操作。

9、mysqldump中備份出來的sql,如果我想sql文件中,一行只有一個(gè)insert....value()的話,怎么辦?如果備份需要帶上master的復(fù)制點(diǎn)信息怎么辦?

--skip-extended-insert
[root@helei-zhuanshu ~]# mysqldump -uroot -p helei --skip-extended-insert
Enter password:
??KEY `idx_c1` (`c1`),
??KEY `idx_c2` (`c2`)
) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `helei`
--

LOCK TABLES `helei` WRITE;
/*!40000 ALTER TABLE `helei` DISABLE KEYS */;
INSERT INTO `helei` VALUES (1,32,37,38,'2016-10-18 06:19:24','susususususususususususu');
INSERT INTO `helei` VALUES (2,37,46,21,'2016-10-18 06:19:24','susususususu');
INSERT INTO `helei` VALUES (3,21,5,14,'2016-10-18 06:19:24','susu');


10、500臺(tái)db,在最快時(shí)間之內(nèi)重啟

puppet,dsh

11、innodb的讀寫參數(shù)優(yōu)化


(1)、讀取參數(shù)

global buffer pool以及 local buffer;

(2)、寫入?yún)?shù);

innodb_flush_log_at_trx_commit
innodb_buffer_pool_size

(3)、與IO相關(guān)的參數(shù);

innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_thread_concurrency = 0


(4)、緩存參數(shù)以及緩存的適用場(chǎng)景。

query cache/query_cache_type
并不是所有表都適合使用query cache。造成query cache失效的原因主要是相應(yīng)的table發(fā)生了變更

  • 第一個(gè):讀操作多的話看看比例,簡(jiǎn)單來說,如果是用戶清單表,或者說是數(shù)據(jù)比例比較固定,比如說商品列表,是可以打開的,前提是這些庫(kù)比較集中,數(shù)據(jù)庫(kù)中的實(shí)務(wù)比較小。
  • 第二個(gè):我們“行騙”的時(shí)候,比如說我們競(jìng)標(biāo)的時(shí)候壓測(cè),把query cache打開,還是能收到qps激增的效果,當(dāng)然前提示前端的連接池什么的都配置一樣。大部分情況下如果寫入的居多,訪問量并不多,那么就不要打開,例如社交網(wǎng)站的,10%的人產(chǎn)生內(nèi)容,其余的90%都在消費(fèi),打開還是效果很好的,但是你如果是qq消息,或者聊天,那就很要命。
  • 第三個(gè):小網(wǎng)站或者沒有高并發(fā)的無所謂,高并發(fā)下,會(huì)看到 很多 qcache 鎖 等待,所以一般高并發(fā)下,不建議打開query cache

12、你是如何監(jiān)控你們的數(shù)據(jù)庫(kù)的?你們的慢日志都是怎么查詢的?

監(jiān)控的工具有很多,例如zabbix,lepus,我這里用的是lepus

13、你是否做過主從一致性校驗(yàn),如果有,怎么做的,如果沒有,你打算怎么做?

主從一致性校驗(yàn)有多種工具 例如checksum、mysqldiff、pt-table-checksum等

14、你們數(shù)據(jù)庫(kù)是否支持emoji表情,如果不支持,如何操作?

如果是utf8字符集的話,需要升級(jí)至utf8_mb4方可支持

15、你是如何維護(hù)數(shù)據(jù)庫(kù)的數(shù)據(jù)字典的?

這個(gè)大家維護(hù)的方法都不同,我一般是直接在生產(chǎn)庫(kù)進(jìn)行注釋,利用工具導(dǎo)出成excel方便流通。

16、你們是否有開發(fā)規(guī)范,如果有,如何執(zhí)行的?

有,開發(fā)規(guī)范網(wǎng)上有很多了,可以自己看看總結(jié)下

17、表中有大字段X(例如:text類型),且字段X不會(huì)經(jīng)常更新,以讀為為主,請(qǐng)問
(1)、您是選擇拆成子表,還是繼續(xù)放一起;
(2)、寫出您這樣選擇的理由。


答:拆帶來的問題:連接消耗 + 存儲(chǔ)拆分空間;不拆可能帶來的問題:查詢性能;
如果能容忍拆分帶來的空間問題,拆的話最好和經(jīng)常要查詢的表的主鍵在物理結(jié)構(gòu)上放置在一起(分區(qū)) 順序IO,減少連接消耗,最后這是一個(gè)文本列再加上一個(gè)全文索引來盡量抵消連接消耗
如果能容忍不拆分帶來的查詢性能損失的話:上面的方案在某個(gè)極致條件下肯定會(huì)出現(xiàn)問題,那么不拆就是最好的選擇

18、MySQL中InnoDB引擎的行鎖是通過加在什么上完成(或稱實(shí)現(xiàn))的?為什么是這樣子的?

答:InnoDB是基于索引來完成行鎖
例: select * from tab_with_index where id = 1 for update;
for update 可以根據(jù)條件來完成行鎖鎖定,并且 id 是有索引鍵的列,
如果 id 不是索引鍵那么InnoDB將完成表鎖,,并發(fā)將無從談起

總結(jié)

以上是生活随笔為你收集整理的18道经典MySQL面试题,祝您升职加薪的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品视频在线一区二区 | 国产伦精品一区二区三区四区视频 | 亚洲性一区 | 亚洲一区二区观看播放 | 快灬快灬一下爽69 | 久久精品国产亚洲AV无码麻豆 | 中文字幕欧美一区 | 快射视频在线观看 | 97小视频 | 精品人妻一区二区三区在线视频 | 亚洲视频在线观看免费 | 亚洲情侣av | 国产真实老熟女无套内射 | 欧美熟妇乱码在线一区 | 可以在线看黄的网站 | 99爱在线视频 | 午夜视频一区 | 中文字幕一区二区三区夫目前犯 | 亚洲色图在线播放 | 久久高清免费 | 久久99网站 | 农村少妇久久久久久久 | 99这里有精品视频 | 韩国女主播裸体摇奶 | 亚洲日本视频在线观看 | 91免费看| 永久免费av无码网站性色av | 婷婷爱爱 | 亚洲人体视频 | 中文字幕av一区二区三区谷原希美 | 麻豆三级在线观看 | 中文字幕av一区二区三区谷原希美 | 欧美综合自拍 | 久久99精品久久久久子伦 | 午夜免费看视频 | 日韩一级在线 | 日日夜夜天天操 | 亚洲成a人在线观看 | 成人福利在线免费观看 | 成年人网站免费 | 人成网站在线观看 | 国产裸体网站 | 中文视频在线 | 国产精品久久久久久99 | 国产性生活网站 | 国内精品人妻无码久久久影院蜜桃 | 激情av综合 | 亚洲精品成人区在线观看 | 黄色av大片 | 久草视频这里只有精品 | 欧美jizz欧美性大全 | 美女张开腿让男人桶爽 | 欧美一级片免费观看 | 一级在线毛片 | 伊人久久综合影院 | 欧美日韩色综合 | 天堂影视av| 无码日韩人妻精品久久蜜桃 | 欧美一区二区在线视频 | 国产精品三区在线观看 | 成年人午夜影院 | 欧美日韩国产在线 | 波多野结衣一区二区 | 91干干| 91久久一区 | 无码人妻精品一区二区三区温州 | 国家队动漫免费观看在线观看晨光 | 亚洲一级在线播放 | 亚洲精品高清视频在线观看 | 国产欧美一区二区视频 | 亚洲在线免费看 | a级片网址 | juliaann精品艳妇hd | 亚洲爆乳无码精品aaa片蜜桃 | 国产日韩欧美在线 | 台湾佬中文在线 | 在线观看黄色网 | 色干综合 | 四虎永久在线视频 | 日批大全| 波多野结衣在线一区二区 | 嫩草视频在线观看 | 国产在线aaa | 国产av自拍一区 | 在线看av网址 | 超碰在线免费 | 嫩草网站在线观看 | 影音先锋亚洲精品 | 欧美黄网站在线观看 | 欧美成人午夜77777 | 图片区小说区视频区 | 一级二级毛片 | 老女人性视频 | 女人扒开屁股让我添 | 91人妻一区二区三区 | 91色综合| 先锋影音一区二区 | 成人黄色短视频在线观看 | 黄色小说网站在线观看 |