MySQL 常見面試知識點

以前簡單總結了一下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,保證
	 最大的併發性能及複製中的主從數據的一致  

上面大部分都偏一點理論知識的理解,其實還有不少的知識點沒有列舉

在有的時候,面試官會比較關心:集羣規模業務數據量業務類型等實際的問題

相關文章
相關標籤/搜索