網(wǎng)站開發(fā)應(yīng)用到的技術(shù)名詞百度seoo優(yōu)化軟件
目錄
一、數(shù)據(jù)庫類型
二、數(shù)據(jù)庫引擎
三、mysql數(shù)據(jù)庫類型
四、mysql的約束添加
五、主從復(fù)制原理
六、主從方式有幾種
七、mysql主從數(shù)據(jù)不一致的原因
八、mysql的優(yōu)化
九、什么是事務(wù)的特征
十、數(shù)據(jù)庫讀寫分離的好處
十一、怎樣優(yōu)化sql語句
十二、mysql的同步方式
十三、mysql的數(shù)據(jù)備份有幾種
希望能夠幫助到大家!
引言:明人不說暗話,今天分享幾個(gè)關(guān)于運(yùn)維·關(guān)于數(shù)據(jù)庫的面試題
一、數(shù)據(jù)庫類型
Redis 是非關(guān)系型數(shù)據(jù)庫:存儲(chǔ)格式靈活,可以是key-value(一種以 鍵值 ?存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫?)的形式,也可以是文本文檔圖片等形式,讀寫速度快,可以使用磁盤或者其他儲(chǔ)存器作為載體,具有高擴(kuò)展性,但是不支持事務(wù)也不支持sql語句。
Mysql是關(guān)系型數(shù)據(jù)庫:支持事務(wù),支持sql語句,支持行鎖定,可以復(fù)雜查詢,使用固定表結(jié)構(gòu),讀寫速度慢,因?yàn)槭褂玫墓潭ū斫Y(jié)構(gòu)導(dǎo)致存儲(chǔ)方式不夠靈活,對(duì)于高并發(fā)的讀取請(qǐng)求,磁盤性能是很大的瓶頸。
二、數(shù)據(jù)庫引擎
innodb:支持事務(wù),不支持行鎖定;
myisam:有較高的查詢能力,不支持事務(wù);
memory:需要很快的讀寫速度但對(duì)安全性要求不高的情況下可以使用,對(duì)表的大小有要求,支持鎖表不支持所鎖行。
三、mysql數(shù)據(jù)庫類型
整數(shù)型;
浮點(diǎn)型;
文本文字類型;
日期時(shí)間類型;
枚舉型;
集合型。
四、mysql的約束添加
主鍵PRIMARY KEY (PK):用于唯一的標(biāo)識(shí)表行的數(shù)據(jù),定義逐漸約束后,此列不能被重復(fù)
自增(AUTO_INCREMENT):標(biāo)識(shí)該字段的值自動(dòng)增長(zhǎng)
空值null:此列不能為空
default:默認(rèn)約束,即使沒有插入數(shù)據(jù),也會(huì)有默認(rèn)值
unique:唯一約束,該列不允許被復(fù)制
五、主從復(fù)制原理
主庫開啟binlog日志,授權(quán)用戶密碼;
從庫開啟兩個(gè)線程io線程和sql線程,io線程會(huì)像主庫binlog日志文件發(fā)起讀取請(qǐng)求,讀取成功后記錄在從庫的Realy-log(中繼日志文件)當(dāng)中,sql線程讀取Realy-log(中繼日志)后如果發(fā)現(xiàn)有更新立即把更新的內(nèi)容在本機(jī)的數(shù)據(jù)庫上面執(zhí)行一遍。
六、主從方式有幾種
兩種做法:
binlog日志方式:從節(jié)點(diǎn)需要手動(dòng)指定binlog日志的名稱、位置或時(shí)間
gtid方式:從節(jié)點(diǎn)不需要手動(dòng)指定binlog日志的名稱、位置或時(shí)間;會(huì)自動(dòng)鎖定
七、mysql主從數(shù)據(jù)不一致的原因
網(wǎng)絡(luò)延遲,主從復(fù)制是基于binlog的異步復(fù)制,通過網(wǎng)絡(luò)傳送binlog文件,網(wǎng)絡(luò)延遲是大多數(shù)引起數(shù)據(jù)不一致的原因
主從機(jī)器的負(fù)載不一致:mysql主從復(fù)制是主庫開啟dump線程,從庫開啟io和sql線程。當(dāng)任何一臺(tái)服務(wù)器負(fù)載過高,導(dǎo)致其中一個(gè)線程資源不足,會(huì)出現(xiàn)主從不一致的情況
版本不一致
max_allowed_packet(一次傳送數(shù)據(jù)包的過程中最大允許的數(shù)據(jù)包大小)設(shè)置不一致:主庫設(shè)置的max_allowed_packet設(shè)置的比從庫大,一條大的sql語句在主庫能執(zhí)行完畢,但在從庫上無法執(zhí)行,導(dǎo)致主從不一致。
解決方法:
1、stop slave set global sql_slave_skip_counter=1 跳過這一步錯(cuò)誤;
2、重新做主從:先鎖表,導(dǎo)入數(shù)據(jù)數(shù)據(jù)+同步,重新做主從
八、mysql的優(yōu)化
安全方面:修改默認(rèn)端口號(hào),禁止root用戶遠(yuǎn)程登錄,對(duì)用戶降權(quán),以普通用戶運(yùn)行mysql
性能方面:升級(jí)硬件,內(nèi)存、磁盤、優(yōu)化sql語句(開啟慢查詢)、設(shè)置索引
參數(shù)優(yōu)化:innodb的buffer參數(shù)調(diào)大,連接數(shù)調(diào)大、緩存的參數(shù)優(yōu)化
架構(gòu)方面:讀寫分離,一主多從,高可用
九、什么是事務(wù)的特征
原子性:指事務(wù)是不可拆分的最小單元
隔離性:數(shù)據(jù)庫允許多個(gè)事務(wù)同時(shí)對(duì)數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行讀寫和修改的能力,隔離性為了防止多個(gè)事務(wù)并發(fā)執(zhí)行由于交叉執(zhí)行導(dǎo)致的數(shù)據(jù)不一致。隔離級(jí)別分為讀未提交、讀提交、可重復(fù)讀、串行化。隔離等級(jí)越高,數(shù)據(jù)越安全,但是消耗的資源就越多。
一致性:事務(wù)中的sql語句,要么全部成功,要么全部失敗。
持久性:事務(wù)結(jié)束后,對(duì)數(shù)據(jù)的修改是永久寫入到磁盤的,即使系統(tǒng)故障也不會(huì)丟失
十、數(shù)據(jù)庫讀寫分離的好處
分?jǐn)偡?wù)器的壓力,
提高系統(tǒng)的處理效率。
主要分擔(dān)主服務(wù)器的讀取壓力,間接提高了主庫的寫入性能,讀請(qǐng)求全部發(fā)給了從庫。
十一、怎樣優(yōu)化sql語句
1.對(duì)查詢進(jìn)行優(yōu)化,應(yīng)盡量避免全表掃描,首先應(yīng)考慮在 where 及 order by 涉及的列上建立索引。
2.應(yīng)盡量避免在 where 子句中對(duì)字段進(jìn)行 null 值判斷,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描
3. 任何地方都不要使用 select * from t ,用具體的字段列表代替“*”,不要返回用不到的任何字段。
4.避免頻繁創(chuàng)建和刪除臨時(shí)表,以減少系統(tǒng)表資源的消耗。
十二、mysql的同步方式
「異步復(fù)制」:MySQL 默認(rèn)的復(fù)制即是異步的,主庫在執(zhí)行完客戶端提交的事務(wù)后會(huì)立即將結(jié)果返給客戶端,并不關(guān)心從庫是否已經(jīng)接收并處理。這樣就會(huì)有一個(gè)問題,一旦主庫宕機(jī),此時(shí)主庫上已經(jīng)提交的事務(wù)可能因?yàn)榫W(wǎng)絡(luò)原因并沒有傳到從庫上,如果此時(shí)執(zhí)行故障轉(zhuǎn)移,強(qiáng)行將從提升為主,可能導(dǎo)致新主上的數(shù)據(jù)不完整。
「全同步復(fù)制」:指當(dāng)主庫執(zhí)行完一個(gè)事務(wù),并且所有的從庫都執(zhí)行了該事務(wù),主庫才提交事務(wù)并返回結(jié)果給客戶端。因?yàn)?span style="color:#fe2c24;">需要等待所有從庫執(zhí)行完該事務(wù)才能返回,所以全同步復(fù)制的性能必然會(huì)收到嚴(yán)重的影響。
「半同步復(fù)制」:是介于全同步復(fù)制與全異步復(fù)制之間的一種,主庫只需要等待至少一個(gè)從庫接收到并寫到 Relay Log 文件即可,主庫不需要等待所有從庫給主庫返回 ACK。主庫收到這個(gè) ACK 以后,才能給客戶端返回 “事務(wù)完成” 的確認(rèn)。
十三、mysql的數(shù)據(jù)備份有幾種
邏輯備份:mysqldump,備份sql語句,速度慢,恢復(fù)也慢,需要一條一條執(zhí)行sql語句
物理備份:xtrabackup備份,備份速度慢,文件大,恢復(fù)速度快。
物理備份又分為3種備份方式:
完全備份:備份當(dāng)前的所有數(shù)據(jù)
增量備份:備份上一次備份到當(dāng)前時(shí)間點(diǎn)的更新的所有數(shù)據(jù)(上一次備份可以是全備也可以是增量備份),數(shù)據(jù)占用磁盤空間小,但恢復(fù)過程較復(fù)雜
差異備份:備份上一次完全備份到當(dāng)前時(shí)間點(diǎn)的所有數(shù)據(jù),占用磁盤空間比較大,恢復(fù)過程簡(jiǎn)單