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