mysql与redis面试题
目錄
1.主流的RDBMS軟件?主流的Nosql軟件?
2.MySQL的基本操作、服務(wù)部署:
3.主從同步的工作流程
4.列舉Mysql常用的數(shù)據(jù)類型
5.mysql事物的4個(gè)特性是什么?
6.數(shù)據(jù)庫(kù)的3種范式
7.什么是視圖,視圖的優(yōu)點(diǎn)是什么?
8.數(shù)據(jù)庫(kù)的優(yōu)化思路
9.mysql服務(wù)有哪些日志文件?
10.Mysql主從同步延時(shí)問(wèn)題
11.MYSQL 一主多從,主庫(kù)宕機(jī),如何合理切換到從庫(kù),其它從庫(kù)如何處理?
12.mysql主從復(fù)制的優(yōu)點(diǎn):
13.mysql主從同步的條件
14.mysql如果從庫(kù)的io線程沒有收到主庫(kù)的信息原因
15.下列選項(xiàng)在配置mysql多實(shí)例的作用?
16.數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)備份
17.innodb和myisam存儲(chǔ)引擎區(qū)別
18.mysql的innodb如何定位鎖問(wèn)題,mysql如何減少主從復(fù)制延遲?
19.企業(yè)選用 MySQL 作為數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)
20.如何重置mysql root密碼?
21.mysql數(shù)據(jù)備份工具
22.使用binlog日志恢復(fù)數(shù)據(jù)的語(yǔ)法格式?
23.簡(jiǎn)述primary key的特點(diǎn)?
24.drop,delete,truncate的區(qū)別?
25.binlog的三種日志格式?
26.請(qǐng)說(shuō)出maxadmin命令常用選項(xiàng)的作用?
27.下列慢查詢?nèi)罩具x項(xiàng)的作用?
28.存儲(chǔ)過(guò)程與觸發(fā)器的區(qū)別
29.存儲(chǔ)過(guò)程與函數(shù)的區(qū)別
30.誤操作drop語(yǔ)句導(dǎo)致數(shù)據(jù)庫(kù)數(shù)據(jù)破壞,請(qǐng)給出恢復(fù)的實(shí)際大體步驟
31.mysql的普通索引和復(fù)合索引
32.數(shù)據(jù)的完全,差異,增量備份概述
33.冷備份和熱備份的優(yōu)缺點(diǎn)
34.索引是個(gè)什么樣的數(shù)據(jù)結(jié)構(gòu)呢?
35.常用的SQL命令分類
36.數(shù)據(jù)庫(kù)讀寫分離的路由用戶和監(jiān)控用戶的作用
37.物理備份邏輯備份區(qū)別
38.完全備份,增量備份和差異備份的區(qū)別
39.恢復(fù)數(shù)據(jù)時(shí),差異備份和增量備份哪個(gè)更快
40.讀寫分離的好處
41.Mysql讀寫分離:
42.mysql數(shù)據(jù)庫(kù)如果發(fā)現(xiàn)CPU很高如何排查處理
43.mysql內(nèi)連接、左連接、右連接以及全連接查詢
44.冷遷移和熱遷移是什么?
45.mysqldump備份不鎖表的參數(shù)
46.Mysql數(shù)據(jù)庫(kù)常見的3種存儲(chǔ)引擎的區(qū)別
47.Mysql版本升級(jí)
48.Mysql數(shù)據(jù)遷移
49.FTP的主動(dòng)模式和被動(dòng)模式
50.CMDB是什么?
51.Nosql---Redis的相關(guān)內(nèi)容
66.redis哨兵服務(wù)的原理
67.redis了解相關(guān)故障:
69.mycat的分片規(guī)則:
70.MySQL數(shù)據(jù)分片:
74.備份與容災(zāi):
1.主流的RDBMS軟件?主流的Nosql軟件?
RDBMS: - Mysql - MariaDB - Oracle - DB2 - SQL Server Nosql: - Memcached - Redis - MongoDB - Neo4j - FlockDB2.MySQL的基本操作、服務(wù)部署:
數(shù)據(jù)庫(kù)是“按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù)”。
MySQL數(shù)據(jù)庫(kù)訪問(wèn)的執(zhí)行過(guò)程
1)客戶端發(fā)出請(qǐng)求。
2)服務(wù)器端開辟線程響應(yīng)客戶端請(qǐng)求。
3)客戶端發(fā)起sql語(yǔ)句查詢數(shù)據(jù)庫(kù)。
4)服務(wù)器查詢緩存:記錄用戶的sql查詢語(yǔ)句,如果查詢內(nèi)容相同,直接從查詢緩存回復(fù)。
5)如果緩存沒有則進(jìn)入分析器。
6)分析器:分析用戶命令語(yǔ)法是否正確,將用戶的命令進(jìn)行切片,獲得用戶要查詢的表、內(nèi)容、用戶的權(quán)限等。
7)優(yōu)化器:執(zhí)行路徑的選擇,生成執(zhí)行樹。(每個(gè)SQL語(yǔ)句都有很多執(zhí)行路徑,優(yōu)化的目的就是在這些執(zhí)行路徑里選擇最優(yōu)的執(zhí)行路徑)。
8)存儲(chǔ)引擎:用于管理存儲(chǔ)的文件系統(tǒng),不同的存儲(chǔ)引擎有不同的功能和存儲(chǔ)方式。
3.主從同步的工作流程
客戶端寫入數(shù)據(jù)時(shí),slave主機(jī)的IO線程讀取master主機(jī)的binlog日志,并寫入本機(jī)的relaylog中繼 日志,SQL線程執(zhí)行relaylog日志線程的SQL命令4.列舉Mysql常用的數(shù)據(jù)類型
數(shù)值類型(整型):int 、tinyint 、smallint、bigint 、mediumint 字符類型:char 、varchar 日期時(shí)間類型:datetime 、timestamp 浮點(diǎn)型:float 、double5.mysql事物的4個(gè)特性是什么?
原子性、一致性、隔離性、持久性 原子性:事物的整個(gè)操作是一個(gè)整體,不可分割,要么全部成功,要么全部失敗 一致性:事務(wù)操作的前后,表中的記錄沒有變化 隔離性:事務(wù)操作是相互隔離不受影響 持久性:數(shù)據(jù)一旦提交,不可改變,永久改變表數(shù)據(jù)6.數(shù)據(jù)庫(kù)的3種范式
(1NF)中表的每一行只包含一個(gè)實(shí)例的信息,簡(jiǎn)而言之,第一范式就是無(wú)重復(fù)的列 (2NF)是在第一范式(1NF)的基礎(chǔ)上建立起來(lái)的,機(jī)滿足第二范式(2NF)必須先滿足第一范式(1NF),要求實(shí)體的屬性完全依賴于主關(guān)鍵字.簡(jiǎn)而言之,第二范式就是非主屬性非部分依賴于主關(guān)鍵字 (3NF)必須先滿足第二范式(2NF),要求一個(gè)數(shù)據(jù)庫(kù)表中不包含已在其他表中已包含的非主關(guān)鍵字信息.簡(jiǎn)而言之,第三范式就是屬性不依賴于其他非主屬性7.什么是視圖,視圖的優(yōu)點(diǎn)是什么?
視圖是虛擬的表,與包含數(shù)據(jù)的表不通,視圖里只包含會(huì)使用時(shí)的動(dòng)態(tài)檢索數(shù)據(jù)的查詢;不包含任何列或數(shù)據(jù) 優(yōu)點(diǎn): 使用視圖可以簡(jiǎn)化復(fù)雜的sql操作,隱藏具體的細(xì)節(jié),保護(hù)數(shù)據(jù);視圖創(chuàng)建后,可以使用與表相同的方式利用他們8.數(shù)據(jù)庫(kù)的優(yōu)化思路
數(shù)據(jù)庫(kù)優(yōu)化通常從三方面考慮: \1. 替換有問(wèn)題的硬件 主要原因是數(shù)據(jù)庫(kù)會(huì)占用大量資源,不過(guò)解決方案也僅限于此 \2. 對(duì)MySQL進(jìn)程的設(shè)置進(jìn)行優(yōu)化 適當(dāng)分配內(nèi)存,并讓mysqld了解將會(huì)承受何種類型的負(fù)載 \3. 對(duì)查詢進(jìn)行優(yōu)化 對(duì)表應(yīng)用了適當(dāng)?shù)乃饕?/span>.還可以記錄慢查詢 優(yōu)化MySQL查詢緩存 用EXPLAIN使你的SELECT查詢更加清晰:了解MySQL正在進(jìn)行什么樣的查詢操作,這 可以幫助你發(fā)現(xiàn)瓶頸的所在,并顯示出查詢或表結(jié)構(gòu)在哪里出了問(wèn)題 EXPLAIN查詢的結(jié)果,可以告訴你那些索引正在被引用,表是如何被掃描和排序的等等 盡量避免SELECT *命令 1)sql語(yǔ)句優(yōu)化 2)索引優(yōu)化 3)數(shù)據(jù)結(jié)構(gòu)優(yōu)化 4)服務(wù)運(yùn)行參數(shù)優(yōu)化 5)服務(wù)器硬件優(yōu)化9.mysql服務(wù)有哪些日志文件?
錯(cuò)誤日志、binlog日志、查詢?nèi)罩尽⒙樵內(nèi)罩尽⑹聞?wù)日志、中繼日志10.Mysql主從同步延時(shí)問(wèn)題
常見原因: 1)Master負(fù)載過(guò)高 2)Slave負(fù)載過(guò)高 3)網(wǎng)絡(luò)延遲 4)機(jī)器性能太低 5)Mysql配置不合理 優(yōu)化方法: 1)優(yōu)化網(wǎng)絡(luò) 2)升級(jí)Slave硬件配置 3)分庫(kù),將一個(gè)主庫(kù)拆分為多個(gè)主庫(kù),每個(gè)主庫(kù)的寫并發(fā)就減少了幾倍,此時(shí)主從延遲可以忽略不計(jì) 4)打開Mysql支持的并行復(fù)制,多個(gè)庫(kù)并行復(fù)制11.MYSQL 一主多從,主庫(kù)宕機(jī),如何合理切換到從庫(kù),其它從庫(kù)如何處理?
1)登陸所有從庫(kù)查看post信息,使用POST最大的做為新的主庫(kù),然后將從為提升為新的主庫(kù), 登陸從庫(kù)(新的主庫(kù))執(zhí)行stop slave, 2)修改my.cnf配置文件,開啟log-bin并重新啟動(dòng)數(shù)據(jù)庫(kù)服務(wù),登陸數(shù)據(jù)庫(kù)執(zhí)行restet master ,show master status\G;查看主庫(kù)信息,最后創(chuàng)建授權(quán)同步用戶與權(quán)限和網(wǎng)站使用數(shù)據(jù)庫(kù)的用戶與權(quán)限,同步所有機(jī)器的/etc/hosts文件(這時(shí)就體現(xiàn)了之前全網(wǎng)用域名則不是用IP的作用了,不然還得修改網(wǎng)站程序切換到新主庫(kù)服務(wù)器IP上,否則無(wú)法連接到數(shù)據(jù)庫(kù)); 3)登陸其它從庫(kù),執(zhí)行change master操作,查看同步狀態(tài)。12.mysql主從復(fù)制的優(yōu)點(diǎn):
(1)如果主服務(wù)器出現(xiàn)問(wèn)題,可以快速切換到從服務(wù)器提供的服務(wù); (2)可以在從服務(wù)器上執(zhí)行查詢操作,降低主服務(wù)器的訪問(wèn)壓力; (3)可以在從服務(wù)器上執(zhí)行備份,以避免備份期間影響主服務(wù)器的服務(wù)。13.mysql主從同步的條件
主庫(kù) 啟用binlog日志、設(shè)置server_id、授權(quán)用戶、查看binlog日志的信息 從庫(kù) 設(shè)置server_id、確保與主庫(kù)的數(shù)據(jù)一致、指定主庫(kù)信息、啟動(dòng)slave服務(wù)、查看狀態(tài)信息14.mysql如果從庫(kù)的io線程沒有收到主庫(kù)的信息原因
主庫(kù)負(fù)載較大、配置出錯(cuò)15.下列選項(xiàng)在配置mysql多實(shí)例的作用?
port,datadir,socket,pid_fifile,log_error port 端口號(hào)datadir 數(shù)據(jù)庫(kù)目錄 socket 鎖定socket文件的路徑和名稱 pid_fifile 進(jìn)程pid號(hào)文件位置 log_error 錯(cuò)誤日志位置16.數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)備份
熱備: innobackupex 完全備份: innobackupex --user 用戶名 --password 密碼 備份目錄名 --no-timestamp 完全恢復(fù): innobackupex --apply-log 目錄名 #準(zhǔn)備恢復(fù)數(shù)據(jù) innobackupex --copy-back 目錄名 #恢復(fù)數(shù)據(jù) 增量備份: innobackupex --user 用戶名 --password 密碼 --incremental-basedir=目錄名 --no timestamp增量恢復(fù): innobackupex --apply-log --redo-only 目錄名 --incremental-dir=目錄名 #準(zhǔn)備恢復(fù)數(shù)據(jù) innobackupex --copy-back 目錄名 #恢復(fù)數(shù)據(jù) 一款強(qiáng)大的在線熱備工具 備份過(guò)程性在線不鎖表,適合生產(chǎn)環(huán)境 冷備: cp tar(物理備份) mysqldump(邏輯備份) 備份: cp -r /var/lib/mysql tar -zcvf /root/mysql.tar.gz 恢復(fù): cp -r 備份目錄/mysql.bak /var/lib/mysql tar -zxf /root/mysql.tar.gz -C /var/lib/mysql vhown -R mysql.mysql /var/lib/mysql 物理備份的缺點(diǎn): 跨平臺(tái)性差 備份時(shí)間長(zhǎng)、冗余備份、浪費(fèi)存儲(chǔ)空間 mysqldump(邏輯備份) 完全備份:備份所有數(shù)據(jù) 增量備份:備份上次備份后,所有新產(chǎn)生的數(shù)據(jù) 差異備份:本分完全備份后,所有新產(chǎn)生的數(shù)據(jù) 完全備份:mysqldump -uroot -p密碼 庫(kù)名 > 目錄/xxx.sql 完全恢復(fù): mysql -uroot -p密碼 [庫(kù)名] < 目錄/xxx.sql 效率低、備份和還原速度比較慢、鎖表 備份過(guò)程中,數(shù)據(jù)插入和更新操作被阻塞 ps:mysqldump在執(zhí)行備份的時(shí)候會(huì)鎖表,如果想讓其備份時(shí)不鎖表要加--skip-opt選項(xiàng)17.innodb和myisam存儲(chǔ)引擎區(qū)別
myisam存儲(chǔ)引擎 支持表級(jí)鎖 不支持事務(wù)、事務(wù)回滾、外鍵 表文件: 表名.frm > desc 表名; 表名.MYI 索引index > show index from 表名;(查找索引文件) 表名.MYD 數(shù)據(jù) > select * from 表名; innodb存儲(chǔ)引擎 默認(rèn)的存儲(chǔ)引擎 支持行級(jí)鎖 支持事務(wù)、事務(wù)回滾、外鍵 表文件: 表名.frm 表結(jié)構(gòu) > desc 表名; 表名.ibd 索引index+數(shù)據(jù) > show index from 表名;select * from 表名; 事務(wù)日志文件 /var/lib/mysql/ib_logfifile0 /var/lib/mysql/ib_logfifile118.mysql的innodb如何定位鎖問(wèn)題,mysql如何減少主從復(fù)制延遲?
mysql的innodb如何定位鎖問(wèn)題:在使用 show engine innodb status檢查引擎狀態(tài)時(shí),發(fā)現(xiàn)了死 鎖問(wèn)題在5.5中,information_schema 庫(kù)中增加了三個(gè)關(guān)于鎖的表(MEMORY引擎)innodb_trx ## 當(dāng)前運(yùn)行的所有事務(wù)innodb_locks ## 當(dāng)前出現(xiàn)的鎖innodb_lock_waits ## 鎖等待的對(duì)應(yīng)關(guān)系 mysql如何減少主從復(fù)制延遲: 如果延遲比較大,就先確認(rèn)以下幾個(gè)因素: 從庫(kù)硬件比主庫(kù)差,導(dǎo)致復(fù)制延遲主從復(fù)制單線程,如果主庫(kù)寫并發(fā)太大,來(lái)不及傳送到從庫(kù)就會(huì)導(dǎo)致延遲。 更高版本的mysql可以支持多線程復(fù)制 慢SQL語(yǔ)句過(guò)多 網(wǎng)絡(luò)延遲 master負(fù)載,主庫(kù)讀寫壓力大,導(dǎo)致復(fù)制延遲,架構(gòu)的前端要加buffffer及緩存層 slave負(fù)載,一般的做法是,使用多臺(tái)slave來(lái)分?jǐn)傋x請(qǐng)求,再?gòu)倪@些slave中取一臺(tái)專用的服務(wù) 器,只作為備份用,不進(jìn)行其他任何操作.另外, 2個(gè)可以減少延遲的參數(shù):–slave-net timeout=seconds 單位為秒 默認(rèn)設(shè)置為 3600秒 參數(shù)含義:當(dāng)slave從主數(shù)據(jù)庫(kù)讀取log數(shù)據(jù)失敗后,等待多久重新建立連接并獲取數(shù)據(jù) –master-connect-retry=seconds 單位為秒 默認(rèn)設(shè)置為 60秒 參數(shù)含義:當(dāng)重新建立主從連接時(shí),如果連接建立失敗,間隔多久后重試 通常配置以上2個(gè)參數(shù)可以減少網(wǎng)絡(luò)問(wèn)題導(dǎo)致的主從數(shù)據(jù)同步延遲 MySQL數(shù)據(jù)庫(kù)主從同步延遲解決方案 最簡(jiǎn)單的減少slave同步延時(shí)的方案就是在架構(gòu)上做優(yōu)化,盡量讓主庫(kù)的DDL快速執(zhí)行,還有就是主庫(kù)是寫,對(duì)數(shù)據(jù)安全性較高,比如sync_binlog=1,innodb_flflush_log_at_trx_commit= 1 之類 的設(shè)置,而slave則不需要這么高的數(shù)據(jù)安全,完全可以講sync_binlog設(shè)置為0或者關(guān)閉binlog,innodb_flflushlog也可以設(shè)置為0來(lái)提高sql的執(zhí)行效率。另外就是使用比主庫(kù)更好的硬件設(shè)備作為 slave19.企業(yè)選用 MySQL 作為數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)
1.性能卓越,服務(wù)8穩(wěn)定,很少出現(xiàn)異常宕機(jī)。
2.開放源代碼并且沒有版權(quán)的限制,自主傳播,使用成本低。
3.歷史悠久,社區(qū)及用戶非常活躍,遇到問(wèn)題很快可以獲取幫助。
4.軟件體積小安裝簡(jiǎn)單,并且易于維護(hù),安裝及維護(hù)的成本低。
5.支持多種操作系統(tǒng),提供 API接口。
6.品牌效應(yīng),使得企業(yè)無(wú)需考慮就直接使用
20.如何重置mysql root密碼?
一、 在已知MYSQL數(shù)據(jù)庫(kù)的ROOT用戶密碼的情況下,修改密碼的方法: 1、 在SHELL環(huán)境下,使用mysqladmin命令設(shè)置: mysqladmin –u root –p password “新密碼”回車后要求輸入舊密碼 2、 在mysql>環(huán)境中,使用update命令,直接更新mysql庫(kù)user表的數(shù)據(jù): Update mysql.user set password=password(‘新密碼’) where user=’root’; flflush privileges; 注 意:mysql語(yǔ)句要以分號(hào)”;”結(jié)束 3、 在mysql>環(huán)境中,使用grant命令,修改root用戶的授權(quán)權(quán)限。 grant all on . to root@’localhost’ identifified by ‘新密碼’; 二、 如查忘記了mysql數(shù)據(jù)庫(kù)的ROOT用戶的密碼,又如何做呢?方法如下: 1、 關(guān)閉當(dāng)前運(yùn)行的mysqld服務(wù)程序:service mysqld stop(要先將mysqld添加為系統(tǒng)服務(wù)) 2、 使用mysqld_safe腳本以安全模式(不加載授權(quán)表)啟動(dòng)mysqld 服務(wù) /usr/local/mysql/bin/mysqld_safe –skip-grant-table & 3、 使用空密碼的root用戶登錄數(shù)據(jù)庫(kù),重新設(shè)置ROOT用戶的密碼 #mysql -u root Mysql> Update mysql.user set password=password(‘新密碼’) where user=’root’; Mysql> flflush privileges;21.mysql數(shù)據(jù)備份工具
mysqldump工具 mysqldump是mysql自帶的備份工具,目錄在bin目錄下 面:/usr/local/mysql/bin/mysqldump,支持基于innodb的熱備份,但是由于是邏輯備份,所以 速度不是很快,適合備份數(shù)據(jù)比較小的場(chǎng)景,Mysqldump完全備份+二進(jìn)制日志可以實(shí)現(xiàn)基于時(shí)間點(diǎn)的恢復(fù)。 基于LVM快照備份 在物理備份中,有基于文件系統(tǒng)的物理備份(LVM的快照),也可以直接用tar之類的命令對(duì)整個(gè)數(shù)據(jù)庫(kù)目錄進(jìn)行打包備份,但是這些只能進(jìn)行泠備份,不同的存儲(chǔ)引擎?zhèn)浞莸囊膊灰粯?#xff0c;myisam自動(dòng)備份到表級(jí)別而innodb不開啟獨(dú)立表空間的話只能備份整個(gè)數(shù)據(jù)庫(kù)。 tar包備份 percona提供的xtrabackup工具,支持innodb的物理熱備份,支持完全備份,增量備份,而且速 度非常快,支持innodb存儲(chǔ)引起的數(shù)據(jù)在不同,數(shù)據(jù)庫(kù)之間遷移,支持復(fù)制模式下的從機(jī)備份恢復(fù)備份恢復(fù),為了讓xtrabackup支持更多的功能擴(kuò)展,可以設(shè)立獨(dú)立表空間,打開 innodb_fifile_per_table功能,啟用之后可以支持單獨(dú)的表備份22.使用binlog日志恢復(fù)數(shù)據(jù)的語(yǔ)法格式?
mysqlbinlog [選項(xiàng)] binlog日志文件名 | mysql -u用戶名 -p密碼23.簡(jiǎn)述primary key的特點(diǎn)?
一個(gè)表只能有一個(gè)主鍵 字段的值不允許重復(fù)且不允許賦null值 多個(gè)字段做主鍵稱為復(fù)合主鍵24.drop,delete,truncate的區(qū)別?
TRUNCA和DELETE只能刪除數(shù)據(jù),而DROP則刪除整個(gè)表(結(jié)構(gòu)和數(shù)據(jù)) 1)DELETE刪除操作作為事務(wù)記錄在日志中保存一遍進(jìn)行回滾操作 2)TRUNCATE TABLE則一次性從表中刪除所有的數(shù)據(jù)并不把單獨(dú)的刪除記錄計(jì)入日志保存,刪除行是不能恢復(fù)的,并且在刪除的過(guò)程中不會(huì)激活與表有關(guān)的刪除觸發(fā)器,執(zhí)行速度快 3)表和索引所占空間,檔表被TRUNCATE后,這個(gè)表和索引所占的空間會(huì)恢復(fù)到出事大小,而DELETE操作不會(huì)減少表或索引所占用的空間,drop語(yǔ)句將表所占用的空間完全釋放25.binlog的三種日志格式?
Statement:每一條會(huì)修改數(shù)據(jù)的sql都會(huì)記錄在binlog中 Row:不記錄sql語(yǔ)句上下文相關(guān)信息,僅保存哪條記錄被修改 Mixdlever:是以上兩種的混合使用26.請(qǐng)說(shuō)出maxadmin命令常用選項(xiàng)的作用?
-u -p -P -u 指定用戶名 -p (小寫p)指定密碼 -P (大寫P)指定端口號(hào)27.下列慢查詢?nèi)罩具x項(xiàng)的作用?
slow-query-log 、 slow-query-log-fifile 、 long-query-time slow-query-log: 啟用慢查詢?nèi)罩? slow-query-log-fifile: 定義慢查詢?nèi)罩久Q long-query-time: 指定超時(shí)時(shí)間28.存儲(chǔ)過(guò)程與觸發(fā)器的區(qū)別
兩者唯一的區(qū)別是觸發(fā)器不能使用EXECUTE語(yǔ)句使用,而是在用戶執(zhí)行Transact-SQL語(yǔ)句時(shí)自動(dòng)觸發(fā)(激活)執(zhí)行,觸發(fā)器是在一個(gè)修改了指定表中的數(shù)據(jù)時(shí)執(zhí)行的存儲(chǔ)過(guò)程,觸發(fā)器主要是通過(guò)事件執(zhí)行觸發(fā)而被執(zhí)行的,而存儲(chǔ)過(guò)程可以通過(guò)存儲(chǔ)過(guò)程名稱名字而直接調(diào)用29.存儲(chǔ)過(guò)程與函數(shù)的區(qū)別
函數(shù):只能返回一個(gè)變量的限制存儲(chǔ)過(guò)程:可以返回多個(gè)變量的限制 函數(shù)是可以嵌入在sql中使用的,可以在select中調(diào)用,而存儲(chǔ)過(guò)程不行 存儲(chǔ)過(guò)程可以返回參數(shù),函數(shù)只能返回值或者表對(duì)象 存儲(chǔ)過(guò)程一般是作為一個(gè)獨(dú)立的部分來(lái)執(zhí)行,二函數(shù)可以作為查詢語(yǔ)句的一個(gè)部分來(lái)調(diào)用30.誤操作drop語(yǔ)句導(dǎo)致數(shù)據(jù)庫(kù)數(shù)據(jù)破壞,請(qǐng)給出恢復(fù)的實(shí)際大體步驟
所有數(shù)據(jù)恢復(fù)的基礎(chǔ)都在于備份,必須要有完整的備份,否則恢復(fù)無(wú)從談起,誤操作導(dǎo)致的數(shù)據(jù)庫(kù)破壞需要使用增量恢復(fù)的方法進(jìn)行恢復(fù)數(shù)據(jù)庫(kù),具體步驟如下: 1)查看備份與binlog文件 2)刷新并備份binlog文件 mysqladmin -uroot -pmysql123 -S /data/mysql.sockflflush-logs 3)將binlog文件恢復(fù)成sql語(yǔ)句 mysqlbinlog –no-defaults mysql-bin.000061 mysql-bin.000062 >bin.sql 4)將其中誤操作的語(yǔ)句刪除(就是drop的動(dòng)作) 5)解壓全備文件,恢復(fù)全備文件 gzip -d mysql_backup_2016-10-12.sql.gz mysql -uroot -pmysql123 -S/data/3306/mysql.sock < mysql_backup_2016-10-12.sql 如果有對(duì)表的操作,恢復(fù)數(shù)據(jù)時(shí)需要接表名 6)恢復(fù)誤操作前的binlog文件記錄的sql語(yǔ)句 mysql -uroot -pmysql123 -S/data/3306/mysql.sock < bin.sql 最后登陸數(shù)據(jù)庫(kù),查看數(shù)據(jù)是否恢復(fù)成功,如果有確定的誤操作時(shí)間,就直接恢復(fù)這段時(shí)間的數(shù)據(jù)即可。31.mysql的普通索引和復(fù)合索引
普通索引:就是單個(gè)列作為索引。如 indexname(a) 復(fù)合索引:就是由多個(gè)列組成的索引,如 indexname(a,b,c),復(fù)合索引遵循最左匹配原則。32.數(shù)據(jù)的完全,差異,增量備份概述
1)完全備份 每次對(duì)數(shù)據(jù)進(jìn)行完整的備份,完全備份是增量備份的基礎(chǔ),完全備份保存的是備份完成時(shí)刻的數(shù)據(jù)庫(kù) 優(yōu)點(diǎn): 安全性高 缺點(diǎn): 冗余數(shù)據(jù)太多,空間利用率低 2)差異備份 備份那些自從上次完全備份之后被修改過(guò)的文件 優(yōu)點(diǎn): 相比完全備份,降低了冗余數(shù)據(jù),提高了空間利用率,安全性差于完全備份 缺點(diǎn): 仍舊存在冗余數(shù)據(jù)存在 3)增量備份 只有那些在上次完全備份或者增量備份后被修改的文件才會(huì)被備份 增量備份就是備份自上一次備份之后增加或變化的文件或者內(nèi)容 優(yōu)點(diǎn): 沒有冗余數(shù)據(jù),效率最高,空間利用率最大化 缺點(diǎn): 安全性降低了33.冷備份和熱備份的優(yōu)缺點(diǎn)
熱備份的優(yōu)點(diǎn):
可在表空間或數(shù)據(jù)文件級(jí)備份,備份時(shí)間短。
備份時(shí)數(shù)據(jù)庫(kù)仍可使用。
可達(dá)到秒級(jí)恢復(fù)(恢復(fù)到某一時(shí)間點(diǎn)上)。
可對(duì)幾乎所有數(shù)據(jù)庫(kù)實(shí)體作恢復(fù)。
恢復(fù)是快速的,在大多數(shù)情況下在數(shù)據(jù)庫(kù)仍工作時(shí)恢復(fù)。
熱備份的不足
不能出錯(cuò),否則后果嚴(yán)重。
若熱備份不成功,所得結(jié)果不可用于時(shí)間點(diǎn)的恢復(fù)。
因難于維護(hù),所以要特別仔細(xì)小心,不允許“以失敗而告終”。
什么是冷備份?
我們將在線的備份稱為熱備份,而相對(duì)的,將脫機(jī)數(shù)據(jù)備份稱為冷備份。冷備份是定時(shí)將數(shù)據(jù)備份至備份服務(wù)器或目標(biāo)硬件,在服務(wù)器動(dòng)作完成后,保持相同狀態(tài),在一臺(tái)服務(wù)器出現(xiàn)問(wèn)題時(shí)可由另一臺(tái)直接提供服務(wù),出現(xiàn)故障時(shí)不會(huì)自動(dòng)接管,需手動(dòng)開啟硬件和服務(wù),保證工作的連續(xù)性和數(shù)據(jù)完整性。
冷備份的優(yōu)點(diǎn)
1、 是非常快速的備份方法(只需拷文件)
2、 容易歸檔(簡(jiǎn)單拷貝即可)
3、 容易恢復(fù)到某個(gè)時(shí)間點(diǎn)上(只需將文件再拷貝回去)
4、 能與歸檔方法相結(jié)合,做數(shù)據(jù)庫(kù)“最佳狀態(tài)”的恢復(fù)。
5、 低度維護(hù),高度安全。
冷備份的不足
1、 單獨(dú)使用時(shí),只能提供到“某一時(shí)間點(diǎn)上”的恢復(fù)。
2、 再實(shí)施備份的全過(guò)程中,數(shù)據(jù)庫(kù)必須要作備份而不能作其他工作。也就是說(shuō),在冷備份過(guò)程中,數(shù)據(jù)庫(kù)必須是關(guān)閉狀態(tài)。
3、 若磁盤空間有限,只能拷貝到磁帶等其他外部存儲(chǔ)設(shè)備上,速度會(huì)很慢。
4、 不能按表或按用戶恢復(fù)。
34.索引是個(gè)什么樣的數(shù)據(jù)結(jié)構(gòu)呢?
索引的數(shù)據(jù)結(jié)構(gòu)和具體存儲(chǔ)引擎的實(shí)現(xiàn)有關(guān), 在MySQL中使用較多的索引有Hash索引,B+樹索引等,而我們經(jīng)常使用的InnoDB存儲(chǔ)引擎的默認(rèn)索引實(shí)現(xiàn)為:B+樹索引35.常用的SQL命令分類
1)DDL 數(shù)據(jù)定義語(yǔ)言 如:create、alter、drop 2)DML 數(shù)據(jù)操作語(yǔ)言 如:insert、update、delete 3)DCL 數(shù)據(jù)控制語(yǔ)言 如:grant、revoke 4)DTL 數(shù)據(jù)事物語(yǔ)言 如:commit、rollback、savepoint36.數(shù)據(jù)庫(kù)讀寫分離的路由用戶和監(jiān)控用戶的作用
路由用戶:監(jiān)控讀寫分離 監(jiān)控用戶:監(jiān)控?cái)?shù)據(jù)庫(kù)服務(wù)器37.物理備份邏輯備份區(qū)別
物理備份: 物理備份是磁盤塊為基本單位將數(shù)據(jù)從主機(jī)復(fù)制到備機(jī)。物理備份就是備份數(shù)據(jù)文件 了,比較形象點(diǎn)就是cp下數(shù)據(jù)文件,但真正備份的時(shí)候自然不是的cp這么簡(jiǎn)單。(物理備份又分 兩種 一種冷備份一種熱備份),物理備份恢復(fù)速度比較快,占用空間比較大。 邏輯備份: 邏輯備份是以文件為基本單位將數(shù)據(jù)從主機(jī)復(fù)制到備機(jī)。將數(shù)據(jù)導(dǎo)出至文本文件中; mysqldump是采用SQL級(jí)別的備份機(jī)制,他將數(shù)據(jù)表導(dǎo)成SQL腳本文件,是最常用的邏輯備份方 法。邏輯備份速度比較慢,占用空間比較小。邏輯備份的恢復(fù)成本高。38.完全備份,增量備份和差異備份的區(qū)別
差異備份的定義: 備份自上一次完全備份之后有變化的數(shù)據(jù)。 增量備份的定義: 備份自上一次備份(包含完全備份、差異備份、增量備份)之后有變化的數(shù) 據(jù)。 增量備份和差異備份的區(qū)別: 完全備份: 備份全部選中的文件夾,并不依賴文件的存檔屬性來(lái)確定備份那些文件。(在備份過(guò) 程中,任何現(xiàn)有的標(biāo)記都被清除,每個(gè)文件都被標(biāo)記為已備份,換言之,清除存檔屬性)。 差異備份: 差異備份是針對(duì)完全備份:備份上一次的完全備份后發(fā)生變化的所有文件。(差異備 份過(guò)程中,只備份有標(biāo)記的那些選中的文件和文件夾。它不清除標(biāo)記,既:備份后不標(biāo)記為已備 份文件,換言之,不清除存檔屬性)。 增量備份: 增量備份是針對(duì)于上一次備份(無(wú)論是哪種備份):備份上一次備份后,所有發(fā)生變 化的文件。(增量備份過(guò)程中,只備份有標(biāo)記的選中的文件和文件夾,它清除標(biāo)記,既:備份后 標(biāo)記文件,換言之,清除存檔屬性。) 不同備份類型可以存在一定組合, 參考示例如下: 完全備份和差異備份: 在星期一進(jìn)行完全備份,在星期二至星期五進(jìn)行差異備份。如果在星期五 數(shù)據(jù)被破壞了,則你只需要還原星期一完全的備份和星期四的差異備份。這種策略備份數(shù)據(jù)需要 較少的時(shí)間,但還原數(shù)據(jù)使用較少的時(shí)間。 完全備份和增量備份: 在星期一進(jìn)行完全備份,在星期二至星期五進(jìn)行增量備份。如果在星期五 數(shù)據(jù)被破壞了,則你需要還原星期一正常的備份和從星期二至星期五的所有增量備份。這種策略 備份數(shù)據(jù)需要較少的時(shí)間,但還原數(shù)據(jù)使用較多的時(shí)間。39.恢復(fù)數(shù)據(jù)時(shí),差異備份和增量備份哪個(gè)更快
完全備份是指對(duì)整個(gè)系統(tǒng)或用戶指定的所有文件數(shù)據(jù)進(jìn)行一次全面的備份。增量備份只是備份相對(duì)于上一次備份操作以來(lái)新創(chuàng)建或者更新過(guò)的數(shù)據(jù)。差異備份即備份上一次完全備份后產(chǎn)生和更新的所有新的數(shù)據(jù)。恢復(fù)速度完全備份最快,增量備份最慢,差異備份介于兩者之間。因此由慢到快依次為增量備份、差異備份和完全備份。40.讀寫分離的好處
MYSQL讀寫分離,基本的原理是讓主數(shù)據(jù)庫(kù)(master)處理事務(wù)性增、改、刪操作(INSERT、UPDATE、DELETE),而從數(shù)據(jù)庫(kù)(slave)處理SELECT查詢操作。數(shù)據(jù)庫(kù)復(fù)制被用來(lái)把事務(wù)性 操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫(kù)。從介紹可以看出MYSQL的讀寫分離可以減少數(shù)據(jù)庫(kù)壓力,提高性能。 1.增加冗余 2.增加了機(jī)器的處理能力 3.對(duì)于讀操作為主的應(yīng)用,使用讀寫分離是最好的場(chǎng)景,因?yàn)榭梢源_保寫的服務(wù)器壓力更小,而讀又可以接受點(diǎn)時(shí)間上的延遲41.Mysql讀寫分離:
maxscale是mariadb公司開發(fā)的一套數(shù)據(jù)庫(kù)中間件,可以很方便的實(shí)現(xiàn)讀寫分離方案;并且提供了讀寫分離的負(fù)載均衡和高可用性保障。
mycat:也具有數(shù)據(jù)讀寫分離的功能
過(guò)程概述:
(1)配置好集群環(huán)境
(2)下載安裝 MaxScale
(3)配置 MaxScale,添加各數(shù)據(jù)庫(kù)信息
(4)啟動(dòng) MaxScale,查看是否正確連接數(shù)據(jù)庫(kù)
(5)客戶端連接 MaxScale,進(jìn)行測(cè)試
42.mysql數(shù)據(jù)庫(kù)如果發(fā)現(xiàn)CPU很高如何排查處理
首先使用top命令查看是不是mysql的CPU占用過(guò)高 查詢?cè)?#xff0c;可能的原因: 1)一般情況下,mysql占用過(guò)高多是有慢查詢 2)執(zhí)行查詢 show processlist;顯示當(dāng)前運(yùn)行的線程,找到那個(gè)經(jīng)常出現(xiàn)的SQL語(yǔ)句 解決: 1)打開慢查詢?nèi)罩?#xff0c;這里可以加上慢查詢?nèi)罩?#xff0c;然后重啟mysql,等待日志。slow-query-log=1 # 慢查詢:確認(rèn)開啟 slow-query-log-fifile='/var/www/htmllog/slowlog.log' # 慢查詢:日志文件及路徑 long_query_time = 3 # 慢查詢:指定超過(guò)3s仍未完成的語(yǔ)句,為執(zhí)行過(guò)慢的語(yǔ)句 2)將這條語(yǔ)句建立索引 例如此語(yǔ)句為 select conut(*) from xxx where a=1 and b != 2 and objuid=? 那么我們將要根據(jù) objuid建立前綴索引:alter table xxx add index objuid(objuid)43.mysql內(nèi)連接、左連接、右連接以及全連接查詢
1)內(nèi)連接查詢 inner join 關(guān)鍵字:inner join on 語(yǔ)句:select * from a_table a inner join b_table b on a.a_id = b.b_id; 說(shuō)明:組合兩個(gè)表中的記錄,返回關(guān)聯(lián)字段相符的記錄,也就是返回兩個(gè)表的交集(陰影)部分 2)左連接查詢 left join關(guān)鍵字:left join on / left outer join on 語(yǔ)句:SELECT * FROM a_table a left join b_table b ON a.a_id = b.b_id; 說(shuō)明: left join 是left outer join的簡(jiǎn)寫,它的全稱是左外連接,是外連接中的一種。 左(外)連 接,左表(a_table)的記錄將會(huì)全部表示出來(lái),而右表(b_table)只會(huì)顯示符合搜索條件的記錄。右表記錄不足的地方均為NULL。 3)右連接 right join 關(guān)鍵字:right join on / right outer join on 語(yǔ)句:SELECT * FROM a_table a right outer join b_table b on a.a_id = b.b_id; 說(shuō)明:right join是right outer join的簡(jiǎn)寫,它的全稱是右外連接,是外連接中的一種。與左(外) 連接相反,右(外)連接,左表(a_table)只會(huì)顯示符合搜索條件的記錄,而右表(b_table)的記錄將會(huì)全部表示出來(lái)。左表記錄不足的地方均為NULL。 4)全連接 union 關(guān)鍵字:union /union all 語(yǔ)句:(select colum1,colum2...columN from tableA ) union (select colum1,colum2...columN from tableB ) 或 (select colum1,colum2...columN from tableA ) union all (select colum1,colum2...columN from tableB ); union語(yǔ)句注意事項(xiàng): ????????1.通過(guò)union連接的SQL它們分別單獨(dú)取出的列數(shù)必須相同; ????????2.不要求合并的表列名稱相同時(shí),以第一個(gè)sql 表列名為準(zhǔn); ????????3.使用union 時(shí),完全相等的行,將會(huì)被合并,由于合并比較耗時(shí),一般不直接使用 union 進(jìn)行合并,而是通常采用union all 進(jìn)行合并; 4.被union 連接的sql 子句,單個(gè)子句中不用寫order by ,因?yàn)椴粫?huì)有排序的效果。但可以對(duì) 最終的結(jié)果集進(jìn)行排序; (select id,name from A order by id) union all (select id,name from B order by id); //沒有排序 效果 (select id,name from A ) union all (select id,name from B ) order by id; //有排序效果44.冷遷移和熱遷移是什么?
1)冷遷移,實(shí)際是關(guān)機(jī)遷移 冷遷移的應(yīng)用場(chǎng)景主要是當(dāng)虛擬機(jī)之下的物理機(jī)故障時(shí),通過(guò)共享存儲(chǔ)中的客戶操作系統(tǒng)及數(shù)據(jù)在另一臺(tái)物理機(jī)主機(jī)中將業(yè)務(wù)進(jìn)行重新加載。另一種場(chǎng)景是需要進(jìn)行定期的可高性要求不高的運(yùn)維,關(guān)閉虛擬機(jī),并將不同物理主機(jī)上存儲(chǔ)的虛擬機(jī)文件copy到另一個(gè)物理主機(jī)中進(jìn)行虛機(jī)重新加載。該場(chǎng)景的好處是操作簡(jiǎn)單,一般是自動(dòng)化操作。在公有云中,大量采用該模式實(shí)現(xiàn)主機(jī)業(yè)務(wù)的可靠性。但缺點(diǎn)也很明顯,該遷移方式不支持內(nèi)存數(shù)據(jù)的保存,會(huì)導(dǎo)致內(nèi)存數(shù)據(jù)的丟失 2)熱遷移,實(shí)際是將內(nèi)存數(shù)據(jù)與硬盤數(shù)據(jù)同步遷移 熱遷移的應(yīng)用場(chǎng)景主要是:1、硬件或系統(tǒng)的主動(dòng)升級(jí)但又不希望中斷虛機(jī)上的重要業(yè)務(wù) 2、某臺(tái)物理機(jī)的負(fù)載太重,進(jìn)行主動(dòng)的虛擬機(jī)遷移熱遷移的好處是對(duì)用戶業(yè)務(wù)的非常小,中斷時(shí)間可到ms級(jí),ping一般中斷在2-6個(gè)包中斷;用戶內(nèi)存數(shù)據(jù)進(jìn)行了遷移,對(duì)業(yè)務(wù)應(yīng)用無(wú)感知。壞處是遷移過(guò)程不可中斷,操作復(fù)雜。因熱遷移主要場(chǎng)景是服務(wù)商后端運(yùn)維使用,因此在公有云中一般不提供熱遷移功能45.mysqldump備份不鎖表的參數(shù)
使用 mysqldump 備份數(shù)據(jù)庫(kù)時(shí)會(huì)默認(rèn)鎖表,加上--skip-opt選項(xiàng)會(huì)默認(rèn)不鎖表,再加上--single transaction會(huì)加上事務(wù),不會(huì)鎖表 在用mysqldump備份使用那些參數(shù)選項(xiàng)是最完美的組合呢? --skip-opt --create-options ----添加create相關(guān)的選項(xiàng) --single-transaction ----一致性備份 -q ----采用快速的dump方式(提高導(dǎo)出性能) -e ----采用多重insert語(yǔ)句形式(提高還原性能),當(dāng)一個(gè)表的數(shù)據(jù)量很大情況 下不知道會(huì)不會(huì)導(dǎo)致死鎖? --no-autocommit ----采用批量提交方式(提高還原性能) -R ----導(dǎo)出存儲(chǔ)過(guò)程,函數(shù),和觸發(fā)器 --master-data=2 ----如果有寫log-bin且版本為5.0以上的版本,則再加上 --master-data=2 --events ----如果是5.1以上的版本使用,包含事件46.Mysql數(shù)據(jù)庫(kù)常見的3種存儲(chǔ)引擎的區(qū)別
MySQL常見的三種存儲(chǔ)引擎為InnoDB、MyISAM和MEMORY。 其區(qū)別體現(xiàn)在事務(wù)安全、存儲(chǔ)限制、空間使用、內(nèi)存使用、插入數(shù)據(jù)的速度和對(duì)外鍵的支持 1、事務(wù)安全 InnoDB支持事務(wù)安全,MyISAM和MEMORY兩個(gè)不支持。 2、儲(chǔ)存限制 InnoDB有64TB的存儲(chǔ)限制,MyISAM和MEMORY要是具體情況而 3、空間使用 InnoDB對(duì)空間使用程度較高,MyISAM和MEMORY對(duì)空間使用程度較低。 4、內(nèi)存使用 InnoDB和MEMORY對(duì)內(nèi)存使用程度較高,MyISAM對(duì)內(nèi)存使用程度較低。 5、插入數(shù)據(jù)的速度: InnoDB插入數(shù)據(jù)的速度較低,MyISAM和MEMORY插入數(shù)據(jù)的速度較高。 6、對(duì)外鍵的支持: InnoDB對(duì)外鍵支持情況較好,MyISAM和MEMORY兩個(gè)不支持外鍵47.Mysql版本升級(jí)
使用in-place upgrade方式,將MySQL5.6升級(jí)到MySQL5.7:
升級(jí)前的準(zhǔn)備:備份+留意新版本的變更內(nèi)容
1、對(duì)5.7的軟件包,下載,解壓
2、關(guān)閉當(dāng)前MySQL(5.6)
3、替換二進(jìn)制文件(5.7 替換 5.6)
??????????\# cd /usr/local
??????????\# mv mysql ?mysql5.6
??????????\# mv mysql5.7 mysql
4、使用現(xiàn)有的數(shù)據(jù)目錄啟動(dòng)MySQL
5、檢查所有表是否與當(dāng)前版本兼容,并更新系統(tǒng)庫(kù)
6、重啟,確保對(duì)系統(tǒng)表所做的變更得以生效
48.Mysql數(shù)據(jù)遷移
需要兩個(gè)服務(wù)器數(shù)據(jù)庫(kù)版本相同才可遷移
1:單個(gè)或多個(gè)數(shù)據(jù)庫(kù)
mysqldump -h遠(yuǎn)程ip -u用戶 -p密碼 -P3306 --default-character-set=utf8 ?--databases 單個(gè)或多個(gè)數(shù)據(jù)庫(kù)名稱空格分開 | mysql -h127.0.0.1 -uroot -p -P3306
?執(zhí)行后輸入本地?cái)?shù)據(jù)庫(kù)密碼即可
2:所有數(shù)據(jù)庫(kù)
mysqldump -h遠(yuǎn)程ip -u用戶 -p密碼 -P3306 --default-character-set=utf8 --all-databases | mysql -h127.0.0.1 -uroot -p -P3306
3:某庫(kù)某表
mysqldump -h遠(yuǎn)程ip -u用戶 -p密碼 -P3306 --default-character-set=utf8 ?dbname table1 table2…… | mysql -h127.0.0.1 -uroot -p -P3306
49.FTP的主動(dòng)模式和被動(dòng)模式
FTP協(xié)議有兩種工作方式:PORT方式和PASV方式,中文意思為主動(dòng)式和被動(dòng)式。 PORT(主動(dòng))方式的連接過(guò)程是:客戶端向服務(wù)器的FTP端口(默認(rèn)是21)發(fā)送連接請(qǐng)求,服務(wù)器接受連接,建立一條命令鏈路。當(dāng)需要傳送數(shù)據(jù)時(shí),客戶端在命令鏈路上用 PORT 命令告訴服務(wù)器: “我打開了XX端口,你過(guò)來(lái)連接我”。于是服務(wù)器從20端口向客戶端的 XX 端口發(fā)送連接請(qǐng) 求,建立一條數(shù)據(jù)鏈路來(lái)傳送數(shù)據(jù)。 PASV(被動(dòng))方式的連接過(guò)程是:客戶端向服務(wù)器的FTP端口(默認(rèn)是21)發(fā)送連接請(qǐng)求,服務(wù)器接受連接,建立一條命令鏈路。當(dāng)需要傳送數(shù)據(jù)時(shí),服務(wù)器在命令鏈路上用PASV 命令告訴客戶端: “我打開了XX端口,你過(guò)來(lái)連接我”。于是客戶端向服務(wù)器的 XX 端口發(fā)送連接請(qǐng)求,建立一條數(shù)據(jù)鏈路來(lái)傳送數(shù)據(jù)。 從上面可以看出,兩種方式的命令鏈路連接方法是一樣的,而數(shù)據(jù)鏈路的建立方法就完 全不同。50.CMDB是什么?
CMDB:CMDB是所有運(yùn)維工具的數(shù)據(jù)基礎(chǔ),CMDB全稱Confifiguration Management Database 1,CMDB包含的功能: 1:用戶管理,記錄測(cè)試,開發(fā),運(yùn)維人員的用戶表 2:業(yè)務(wù)線管理,需要記錄業(yè)務(wù)的詳情 3:項(xiàng)目管理,指定此項(xiàng)目需屬于那條業(yè)務(wù)線,以及項(xiàng)目詳情 4:應(yīng)用管理,指定此應(yīng)用的開發(fā)人員,屬于哪個(gè)項(xiàng)目,和代碼地址,部署目錄,部署集群, 依賴的應(yīng)用,軟件等信息。 5:主機(jī)管理,包括云主機(jī),物理機(jī),主機(jī)屬于哪個(gè)集群,運(yùn)行著哪些軟件,主機(jī)管理員,連 接著哪些網(wǎng)絡(luò)設(shè)備,云主機(jī)的資源地,存儲(chǔ)等相關(guān)信息。 6:主機(jī)變更管理,主機(jī)的一些信息變更,例如管理員,所屬集群等信息更改,連接的網(wǎng)絡(luò)變 更等。 7:網(wǎng)絡(luò)設(shè)備管理,主要記錄網(wǎng)絡(luò)設(shè)備的詳細(xì)信息,及網(wǎng)絡(luò)設(shè)備連接的上級(jí)設(shè)備 8:IP管理,IP屬于哪個(gè)主機(jī),哪個(gè)網(wǎng)段,是否被占用等 2,CMDB實(shí)現(xiàn)的四種方式: 方式一:Agent方式 可以將服務(wù)器上面的Agent程序作定時(shí)任務(wù),定時(shí)將資產(chǎn)信息提交到指定API錄入數(shù)據(jù)庫(kù),本質(zhì)就是在各個(gè)服務(wù)器上執(zhí)行subprocess.getoutput("命令"),然后將每臺(tái)機(jī)器上執(zhí)行的結(jié)果返回給主句API,然后主機(jī)API收到這些數(shù)據(jù)之后,放到數(shù)據(jù)庫(kù)中,最終通過(guò)web界面展現(xiàn)給用戶。 優(yōu)點(diǎn):速度快 缺點(diǎn):需要為每臺(tái)服務(wù)器部署有關(guān)Agent程序 使用場(chǎng)景:服務(wù)器比較多的時(shí)候 方式二:ssh類實(shí)現(xiàn)方式(基于paramiko模塊)中控機(jī)通過(guò)Paramiko(py模塊)登錄到各個(gè)服務(wù)器上,然后執(zhí)行命令的方式去獲取各個(gè)服務(wù)器上 的信息。 優(yōu)點(diǎn):沒有Agent 缺點(diǎn):有一個(gè)中控機(jī),速度慢 使用場(chǎng)景:服務(wù)器比較少的時(shí)候 方式三:salt-stack方式 此方案本質(zhì)上和第二種方案是差不多的流程,中控機(jī)發(fā)送命令給服務(wù)器執(zhí)行。服務(wù)器將結(jié)果放入另一個(gè)隊(duì)列中,中控機(jī)獲取將服務(wù)信息發(fā)送到API進(jìn)而錄入到數(shù)據(jù)庫(kù)。 優(yōu)點(diǎn):速度快,開發(fā)成本低 缺點(diǎn):依賴于第三方工具 使用場(chǎng)景:已經(jīng)使用salt-stack軟件51.Nosql---Redis的相關(guān)內(nèi)容
Redis:遠(yuǎn)程字典服務(wù)器,分布式內(nèi)存數(shù)據(jù)庫(kù).支持?jǐn)?shù)據(jù)持久化.
Redis:后端緩存數(shù)據(jù)庫(kù),其特點(diǎn)是接收數(shù)據(jù),返回?cái)?shù)據(jù)快,因?yàn)槠涫菃尉€程,而且是純內(nèi)存結(jié)構(gòu),存儲(chǔ)的是數(shù)據(jù)快照
工作原理:當(dāng)客戶端發(fā)送一個(gè)訪問(wèn)請(qǐng)求的時(shí)候,先經(jīng)過(guò)redis服務(wù)器,redis服務(wù)器會(huì)查詢本機(jī)的數(shù)據(jù)緩存中看是否有客戶端請(qǐng)求的數(shù)據(jù),如果有就直接本機(jī)將結(jié)果返回給客戶端,沒有的話就將請(qǐng)求轉(zhuǎn)發(fā)給后端的數(shù)據(jù)庫(kù)服務(wù)器或者是外網(wǎng)的服務(wù)器,然后將收集的數(shù)據(jù)結(jié)果返還給客戶端,自己也保存一份數(shù)據(jù)快照作為緩存.
52.簡(jiǎn)述redis支持的數(shù)據(jù)類型
字符類型:string
列表類型:list
Hash表類型:hash
集合類型:set
有序集合類型:zset
53.如何優(yōu)化redis服務(wù)?
1)Master最好不要做任何持久化工作
2)如果數(shù)據(jù)比較重要,某個(gè)slave開啟AOF備份數(shù)據(jù),策略設(shè)置為每秒同步一次
3)為了主從復(fù)制的速度和連接的穩(wěn)定性,Master和slave最好在同一局域網(wǎng)內(nèi)
4)盡量避免在壓力很大的主庫(kù)上增加從庫(kù)
54.redis有哪些好處?
1)速度快,因?yàn)閿?shù)據(jù)存在內(nèi)存中
2)支持豐富的數(shù)據(jù)類型,支持string、list、set、sorted、set、hash
3)支持事務(wù),操作都是原子性,所謂的原子性就是對(duì)數(shù)據(jù)的更改要么全部執(zhí)行,要么全部不執(zhí)行
4)豐富的特性:可用于緩存消息,按key設(shè)置過(guò)期時(shí)間,過(guò)期后會(huì)自動(dòng)刪除
55.redis數(shù)據(jù)持久化的2種方式是什么?
RDB:全部Redis DataBase 按照指定的時(shí)間間隔,將內(nèi)存中的數(shù)據(jù)集快照寫入硬盤
AOF:全部Append Only File 記錄redis服務(wù)所有寫操作不斷的將新的寫操作追加到文件的末尾
56.redis和memcache的區(qū)別
1)redis和memcache都是將數(shù)據(jù)存放在內(nèi)存數(shù)據(jù)庫(kù),但memcache還可以用于緩存其他圖片視頻等
2)redis不僅支持簡(jiǎn)單的key:value類型數(shù)據(jù),還提供list,set,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)
3)虛擬內(nèi)存,redis當(dāng)物理內(nèi)存用完時(shí),可以將一些很久沒用到的value交換到磁盤
4)過(guò)期策略,memcache在set時(shí)就指定,例如set key 1 0 0 8,即永不過(guò)期,redis可以通過(guò)expire設(shè)定,例如expire name 10;
5)分布式,設(shè)定memcache集群,可以利用magent做一主多從,redis可以修改配置文件,以及slave on 設(shè)置一主多從
6)存儲(chǔ)數(shù)據(jù)安全,memcache掛掉后,數(shù)據(jù)就沒了.redis有數(shù)據(jù)的持久化RBD和AOF
7)災(zāi)難恢復(fù),memcache掛掉后,數(shù)據(jù)不可恢復(fù).redis數(shù)據(jù)丟失后可以通過(guò)AOF來(lái)進(jìn)行恢復(fù)
8)redis支持master-slave模式數(shù)據(jù)的備份
9)應(yīng)用場(chǎng)景,redis除了作為Nosql數(shù)據(jù)庫(kù)外,還可以做消息隊(duì)列,數(shù)據(jù)緩存等.memcache適合于緩存 sql語(yǔ)句,數(shù)據(jù)集,用戶的臨時(shí)性數(shù)據(jù),延遲查詢數(shù)據(jù)和Session等
57.redis服務(wù)數(shù)據(jù)清除策略
Noeviction 不刪除
allkeys-lru 從所有key中情緒使用頻率最少的key
volatile-lru 最近最少使用(針對(duì)設(shè)置了TTL的key)
allkeys-random 隨機(jī)移除key
volatile-random 在設(shè)置了TTL的key里隨機(jī)移除
volatile-ttl 移除最近過(guò)期的key
allkeys-lfu 從所有的key中清除使用頻率最少的keyvolatile-lfu 從所有key中清除使用頻率最少的key
58.為什么redis需要把所有數(shù)據(jù)放到內(nèi)存中?
Redis為了達(dá)到最快的讀寫速度將數(shù)據(jù)都讀到內(nèi)存中,并通過(guò)異步的方式將數(shù)據(jù)寫入磁盤。所以redis具有快速和數(shù)據(jù)持久化的特征。如果不將數(shù)據(jù)放在內(nèi)存中,磁盤I/O速度為嚴(yán)重影響redis的性能。在內(nèi)存越來(lái)越便宜的今天,redis將會(huì)越來(lái)越受歡迎。如果設(shè)置了最大使用的內(nèi)存,則數(shù)據(jù)已有記錄數(shù)達(dá)到內(nèi)存限值后不能繼續(xù)插入新值。
59.Redis 的同步機(jī)制
Redis 可以使用主從同步,從從同步。
第一次同步時(shí),主節(jié)點(diǎn)做一次 bgsave,并同時(shí)將后續(xù)修改操作記錄到內(nèi)存 buffffffffer,待完成后將rdb 文件全量同步到復(fù)制節(jié)點(diǎn),復(fù)制節(jié)點(diǎn)接受完成后將 rdb 鏡像加載到內(nèi)存。
加載完成后,再通知主節(jié)點(diǎn)將期間修改的操作記錄同步到復(fù)制節(jié)點(diǎn)進(jìn)行重放就完成了同步過(guò)程。
60.Redis 常見性能問(wèn)題和解決方案
1. Master 最好不要寫內(nèi)存快照,如果 Master 寫內(nèi)存快照,save 命令調(diào)度 rdbSave函數(shù),會(huì)
阻塞主線程的工作,當(dāng)快照比較大時(shí)對(duì)性能影響是非常大的,會(huì)間斷性暫停服務(wù)
2. 如果數(shù)據(jù)比較重要,某個(gè) Slave 開啟 AOF 備份數(shù)據(jù),策略設(shè)置為每秒同步
3. 為了主從復(fù)制的速度和連接的穩(wěn)定性,Master 和 Slave 最好在同一個(gè)局域網(wǎng)
4. 盡量避免在壓力很大的主庫(kù)上增加從
5. 主從復(fù)制不要用圖狀結(jié)構(gòu),用單向鏈表結(jié)構(gòu)更為穩(wěn)定,即:Master <- Slave1<- Slave2 <-
Slave3…
這樣的結(jié)構(gòu)方便解決單點(diǎn)故障問(wèn)題,實(shí)現(xiàn) Slave 對(duì) Master的替換。如果 Master 掛了,可以
立刻啟用 Slave1 做 Master,其他不變。
61.redis主從復(fù)制的作用
數(shù)據(jù)冗余:主從復(fù)制實(shí)現(xiàn)了數(shù)據(jù)的熱備份,是持久化之外的一種數(shù)據(jù)冗余方式。
故障恢復(fù):當(dāng)主節(jié)點(diǎn)出現(xiàn)問(wèn)題時(shí),可以由從節(jié)點(diǎn)提供服務(wù),實(shí)現(xiàn)快速的故障恢復(fù);實(shí)際上是一種服務(wù)的冗余。
負(fù)載均衡:在主從復(fù)制的基礎(chǔ)上,配合讀寫分離,可以由主節(jié)點(diǎn)提供寫服務(wù),由從節(jié)點(diǎn)提供讀服務(wù),分擔(dān)服務(wù)器負(fù)載;尤其是在寫少讀多的場(chǎng)景下,通過(guò)多個(gè)從節(jié)點(diǎn)分擔(dān)讀負(fù)載,可以大大提高Redis服務(wù)器的并發(fā)量
讀寫分離:可以用于實(shí)現(xiàn)讀寫分離,主庫(kù)寫、從庫(kù)讀,讀寫分離不僅可以提高服務(wù)器的負(fù)載能力,同時(shí)可根據(jù)需求的變化,改變從庫(kù)的數(shù)量;
高可用基石:除了上述作用以外,主從復(fù)制還是哨兵和集群能夠?qū)嵤┑幕A(chǔ),因此說(shuō)主從復(fù)制是Redis高可用的基礎(chǔ)
62.hash槽的概念
Redis 集群中內(nèi)置了 16384 個(gè)哈希槽,當(dāng)需要在 Redis 集群中放置一個(gè) key-value時(shí),redis 先對(duì)key 使用 crc16 算法算出一個(gè)結(jié)果,然后把結(jié)果對(duì) 16384 求余數(shù),這樣每個(gè) key 都會(huì)對(duì)應(yīng)一個(gè)編號(hào)在 0-16383 之間的哈希槽,redis 會(huì)根據(jù)節(jié)點(diǎn)數(shù)量大致均等的將哈希槽映射到不同的節(jié)點(diǎn)
63.redis在什么情況下不能存儲(chǔ)數(shù)據(jù)
找不到hash槽、集群沒有做從服務(wù)器
64.redis的save和bgsave的區(qū)別
SAVE和BGSAVE兩個(gè)命令都會(huì)調(diào)用rdbSave函數(shù),但它們調(diào)用的方式各有不同:
SAVE直接調(diào)用rdbSave,阻塞Redis主進(jìn)程,直到保存完成為止。在主進(jìn)程阻塞期間,服務(wù)器不能處理客戶端的任何請(qǐng)求。
BGSAVE則fork出一個(gè)子進(jìn)程,子進(jìn)程負(fù)責(zé)調(diào)用rdbSave,并在保存完成之后向主進(jìn)程發(fā)送信號(hào),通知保存已完成。Redis服務(wù)器在BGSAVE執(zhí)行期間仍然可以繼續(xù)處理客戶端的請(qǐng)求。
65.Redis哈希槽的概念?
Redis 集群沒有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384 個(gè)哈希槽,每個(gè)
key通過(guò)CRC16校驗(yàn)后對(duì)16384取模來(lái)決定放置哪個(gè)槽,集群的每個(gè)節(jié)點(diǎn)負(fù)責(zé)一部分hash槽。
66.redis哨兵服務(wù)的原理
監(jiān)視master服務(wù)器,當(dāng)master服務(wù)器宕機(jī)會(huì)自動(dòng)將slave服務(wù)器升級(jí)為master服務(wù)器
哨兵功能還有監(jiān)視、事件通知、配置功能。以下是哨兵的功能列表:
監(jiān)控:不間斷的檢查主從服務(wù)是否如預(yù)期一樣正常工作
事件通知:對(duì)被監(jiān)視的redis實(shí)例的異常,能通知系統(tǒng)管理員,或者以API接口通知其他應(yīng)用程序。
67.redis了解相關(guān)故障:
緩存雪崩,緩存擊穿:緩存在同一時(shí)間內(nèi)大量key過(guò)期的同時(shí),又有大量數(shù)據(jù)訪問(wèn)后端服務(wù)器,造成數(shù)據(jù)庫(kù)服務(wù)器負(fù)載過(guò)高,這里用互斥鎖解決;緩存擊穿,用戶自己模擬請(qǐng)求很多緩存中不存在的數(shù)據(jù),大量請(qǐng)求直接落在數(shù)據(jù)庫(kù)上,導(dǎo)致數(shù)據(jù)庫(kù)異常,也是用互斥鎖解決
68.mycat的工作原理
MyCat是一個(gè)開源的分布式數(shù)據(jù)庫(kù)系統(tǒng),是一個(gè)實(shí)現(xiàn)了MySQL協(xié)議的服務(wù)器
Mycat的原理中最重要的一個(gè)動(dòng)詞是“攔截”,它攔截了用戶發(fā)送過(guò)來(lái)的SQL語(yǔ)句,首先對(duì)SQL語(yǔ)句做了一些特定的分析:如分片分析、路由分析、讀寫分離分析、緩存分析等,然后將此SQL發(fā)往后端的真實(shí)數(shù)據(jù)庫(kù),并將返回的結(jié)果做適當(dāng)?shù)奶幚?#xff0c;最終再返回給用戶。
69.mycat的分片規(guī)則:
枚舉法,求模法,固定分片等
分片的工作過(guò)程:解析SQL命令涉及的表,對(duì)比表的分片規(guī)則,然后將SQL命令發(fā)往對(duì)應(yīng)的數(shù)據(jù)庫(kù)的表中去執(zhí)行,最后收集和處理所有分片結(jié)果數(shù)據(jù),返回給客戶端
70.MySQL數(shù)據(jù)分片:
概念:將存放在一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器中的數(shù)據(jù),按特定的方式拆分,分散存儲(chǔ)到多臺(tái)數(shù)據(jù)庫(kù)服務(wù)器中,達(dá)到緩解單臺(tái)服務(wù)器負(fù)載的效果。
mtcat軟件:基于Java開發(fā)的分布式數(shù)據(jù)系統(tǒng)中間件,為高并發(fā)環(huán)境的分布式存儲(chǔ)提供解決方案,適合數(shù)據(jù)大量寫入存儲(chǔ)
71.pxc數(shù)據(jù)庫(kù)集群服務(wù)軟件特點(diǎn):
1)數(shù)據(jù)強(qiáng)一致性,無(wú)同步延遲
2)沒有主從切換操作,無(wú)需使用虛擬IP
3)支持InnoDBc存儲(chǔ)引擎
4)多線程復(fù)制
5)部署簡(jiǎn)單
6)支持節(jié)點(diǎn)自動(dòng)加入,無(wú)需手動(dòng)拷貝數(shù)據(jù)
72.MHA和PXC的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):1.數(shù)據(jù)強(qiáng)一致性,無(wú)同步延遲
2.沒有主從切換操作,無(wú)虛擬IP
3.多線程復(fù)制,不熟使用簡(jiǎn)單
4.支持節(jié)點(diǎn)自動(dòng)加入,無(wú)需手動(dòng)復(fù)制數(shù)據(jù)
缺點(diǎn):性能損耗較大,大事務(wù)可能卡住整個(gè)集群,因?yàn)镻XC的數(shù)據(jù)強(qiáng)一致性,同一事務(wù)會(huì)在整個(gè)集群每一臺(tái)機(jī)器上執(zhí)行,數(shù)據(jù)全冗余
MHA優(yōu)點(diǎn):同一管理節(jié)點(diǎn),可以管理多個(gè)集群,能夠?qū)崿F(xiàn)故障自動(dòng)切換(通常20~30秒),實(shí)現(xiàn)數(shù)據(jù)庫(kù)高可用
缺點(diǎn):1.搭建比較麻煩
2.需要編寫腳本或第三方工具來(lái)實(shí)現(xiàn)Vip的配置
3.MHA只會(huì)對(duì)主數(shù)據(jù)庫(kù)進(jìn)行監(jiān)控
73.請(qǐng)描述下列命令在配置MHA集群時(shí)的作用?
masterha_check_status 、 masterha_check_ssh 、 masterha_check_repl 、
masterha_manager
masterha_check_status 檢查mha服務(wù)狀態(tài)
masterha_check_ssh 檢查ssh配置
masterha_check_repl 檢查主從同步配置
masterha_manager 啟動(dòng)mha服務(wù)
74.備份與容災(zāi):
容災(zāi),就是在災(zāi)難發(fā)生時(shí),在保證生產(chǎn)系統(tǒng)的數(shù)據(jù)盡量少丟失的情況下,保持業(yè)務(wù)不間斷容地運(yùn)行。
備份,則是指創(chuàng)建硬盤中數(shù)據(jù)的副本,然后將數(shù)據(jù)存儲(chǔ)到其他存儲(chǔ)設(shè)備。
雖然都是保護(hù)數(shù)據(jù)的手段,但首先兩者的目的不同,容災(zāi)系統(tǒng)建設(shè)的目的主要是保證業(yè)務(wù)的連續(xù)性。
備份則是將生產(chǎn)系統(tǒng)中的數(shù)據(jù)復(fù)制下來(lái),主要的目的是應(yīng)對(duì)數(shù)據(jù)丟失或者數(shù)據(jù)的邏輯錯(cuò)誤等突發(fā)狀況,或保留歷史數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的mysql与redis面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Web运维面试题
- 下一篇: linux的mysql修改用户密码与忘记