以前簡單總結了一下MySQL的場景面試知識點node
1.講下MVCC原理 2.MySQL高可用架構介紹 3.OSC(在線更改表結構)原理 4.MySQL性能調優有哪些關鍵點/經驗 5.MySQL在線備份方案,Xtrabackup原理 6.MySQL監控有哪些指標 7.如何在線遷移MySQL 8.MySQL 5.7有哪些新特性/功能 9.Update t1 set c1=v1 where id=123; id是普通索引,該操做,會加哪些鎖? 10.空隙鎖是解決什麼問題的? 11.服務器參數調優,有哪些關鍵點 12.瞭解哪些中間件,對LVS,MHA的理解 13.運維MySQL主從複製集羣中,遇到過哪些問題,如何解決? 14.運維MySQL過程當中,遇到過什麼重大故障,如何處理的? 15. 數據庫監控自動化方案 16. innodb_autoinc_lock_mode#自增鎖進發怎麼設?設哪一個參數,值多少,爲何?
1 mvccmysql
mysql數據庫的多版本併發控制,對innodb引擎的表實現一致性的非鎖定行讀,若是讀取當前的數據正在進行 dml操做,讀取操做不會等待行鎖,innodb進行一個快照讀,快照的版本是事務開始以前的版本,經過innodb的 undo來實現,不一樣事務隔離級別,事務快照定義不同。每一行存儲版本號,每個事務都會保存理解的版本號, 依照事務的版原本檢查每行的版本。
2 mysql高可用架構linux
a 雙主keepalived,master-master,經過keepalived提供一個虛擬ip,並提供心跳檢測腳本(ka_check_mysql.sh) ,若是腳本檢測mysql失效, 則將該主機剔除keepalived b mha,manager節點,多個node,1個master,多個slave,mha能夠進行自動切換,手工切換,因爲mha能夠保證 多個日誌進行合併,日誌比對,將數據丟失到最小 c lvs+keepalived+slave slave負載均衡
d pxc
因爲這個總結於2016年,如今應該加上MGR面試
3 osc在線更改表結構sql
mysql原生的在線ddl,copy和inplace --add index:copy,新建帶index的表,鎖原表,禁止dml,容許select,將原表數據拷貝到臨時表,禁止讀寫,進行rename,升級字典鎖,完成建立index操做 --add index(second index): inplace,建立索引數據字典,加共享鎖,禁止dml,容許select,讀取聚簇索引,構造新的索引項,排序並插入新索引 等待打開當前表的全部只讀事務提交,建立結束 第三方工具進行在線ddl,OAK,pt-online-ddl --oak,檢查表是否符合oak-online-alter-table,沒有fk,trigger,online ddl,數據一致性校驗,表切換,rename,刪除觸發器 --pt
4 mysql性能調優數據庫
--mysql 參數, --innodb_buffer_pool_size --innodb_thread_concurrency --innodb_io_capacity --innodb_flush_method --innodb_flush_log_at_trx_commit --sync_binlog
5 mysql在線備份方案,xtrabackupjson
a mysqldump,在線邏輯備份,導出成create,insert格式 b xtrabackup,innobackupex 在線物理備份,以read-write模式打開innodb的數據文件, 每次讀寫1mb的數據,一頁一頁的遍歷,因爲不鎖表,因此複製出來的數據不一致,對於 myisam表,必須先鎖表,而後複製文件 --啓動後臺檢測,實時檢測mysql redo的變化,一旦redo寫入,馬上將日誌寫入日誌xtrabackup_log中 --複製innodb的數據問候和系統表空間文件 --複製結束,執行flush table with read lock --複製frm,myd,myi等文件 --這一刻得到binary log的位置 --unlock tables InnoDB 維護了一個 redo log,又稱爲 transaction log,事務日誌,它包含了 innodb 數據 的全部改動狀況。當 InnoDB 啓動的時候,它會先去檢查 data file 和 transaction log,而且會 作二步操做: 1.It applies committed transaction log entries to the data files 2.it performs an undo operation on any transactions that modified data but did not commit.
6 mysql監控指標centos
zabbix監控mysql,指標 --cpu,processor load,memory,swap --qps,tps,mysqld --slave_io_running,slave_sql_running
7 在線遷移mysql安全
a 經過master-slave在線遷移,手動遷移 b 經過mha,手工切換 c pt-archive
8 5.7新特性,功能服務器
a 安全性,初始化後沒有密碼爲null的,密碼修改策略,鎖住用戶等 b 對json格式支持 CREATE TABLE t_jeson (jdoc JSON); insert into t_jeson VALUES('{"key1": "value1", "key2": "value2"}'); c generate column CREATE TABLE triangle (sidea DOUBLE, sideb DOUBLE, area DOUBLE AS (sidea * sideb / 2)); d 引入sys schema,系統庫,包含一些視圖,函數和過程 e 在線開啓GTID
9.Update t1 set c1=v1 where id=123; id是普通索引,該操做,會加哪些鎖
a innodb表,RR模式下,首先經過id索引定位到第一條知足查詢的記錄,記錄上加X鎖,加GAP的gap鎖,而後加聚簇索引記錄上的x鎖,而後返回 ,而後讀取下一條,重複進行,直至進行到第一條不知足條件的記錄,此時不須要加x鎖,仍須要加gap鎖。 b inndob表,RC模式下,對應全部知足sql查詢條件的記錄,都會被加鎖,同時,這些記錄在主鍵索引上的記錄,也會被加鎖
關於鎖這一塊,能夠詳細看一下mysql 45講裏面的鎖講解
10.空隙鎖是解決什麼問題的?
在RR模式下,innodb爲了解決幻讀,產生了gap鎖 ,在同一個事務,連續兩次當前讀,返回的徹底相同的記錄。
11.服務器參數調優,有哪些關鍵點
1 os系統選擇,redhat,centos,suse 2 關閉swap,vm.swappiness=10 3 單實例mysql,關閉NUMA,os內核中設置,啓動mysql時候關閉該參數 4 作雙網卡,bond0,調整網絡參數 5 磁盤調度設置 6 文件系統 推薦xfs/ext4 ,noatime,nobarrier
12.瞭解哪些中間件,對LVS,MHA的理解
a mycat 中間件,可實現讀寫分離,主從自動切換,主要在分庫分表
b lvs 負載均衡,dr模式,選擇路由方式,負責工做轉派
c mha 高可用架構,manager節點負責管理node,可用進行failover和手動切換主備庫
d dble
e sharding-JDBC
13.運維MySQL主從複製集羣中,遇到過哪些問題,如何解決?
集羣問題: 1 從庫報錯:1062 stop slave; delete from t1 where ename='robin'; start slave; 2 1032 stop slave sql_thread; insert into t1 values(1,'linuxidc','http://www.linuxidc.com/linuxidc'); start slave sql_thread; 3 從庫找不到對應的被刪除的記錄(Errno: 1032) stop slave sql_thread; set gtid_next='1b64c25d-8d2b-11e6-9ac0-000c29b82d0d:92'; begin;commit; set gtid_next='AUTOMATIC'; start slave sql_thread; 4 主庫binlog被purge的情形(Errno: 1236) Last_IO_Error: Got fatal error 1236 from master when reading data from binary log:
14.運維MySQL過程當中,遇到過什麼重大故障,如何處理的?
15. 數據庫監控自動化方案
16. innodb_autoinc_lock_mode#自增鎖進發怎麼設?設哪一個參數,值多少,爲何?
插入類型 insert-like=insert,replace,insert...select,replace...select,load data simple inserts=insert,replacce bulk inserts=insert...select,replace..select,load data mixed-mode inserts=insert into t1(c1,c2) values (1,'a'),(null,'b'),(5,'b'),(null,'d') innodb_autoinc_lock_mode=0,1,2 1 默認值,對於simple inserts只用互斥量對內存中的計算器進行累加,對於bulk inserts,仍是傳統 的auto-inc locking的方式,不考慮rollback,自增加仍是連續的。 若是使用auto-inc locking方式產生自增加的值,進行simple inserts時,須要等待auto-inc locking的釋放 2 全部的insert-like,自增加值的產生都是經過互斥兩,而不是auto-inc locking方式,性能最高 併發插入,每次插入,自增加的值可能不連續,使用該模式,主從要用row-base replication,保證 最大的併發性能及複製中的主從數據的一致
上面大部分都偏一點理論知識的理解,其實還有不少的知識點沒有列舉
在有的時候,面試官會比較關心:集羣規模,業務數據量,業務類型等實際的問題