Mysql面試可能會問到的基礎知識

mysql複製流程
    master的log thread將數據改變寫入到binlog裏
    --->slave通過i/o thread發請求,master的binlog dump thread將binary log events傳送給slave,slave的i/o thread將其寫到relay log裏
    --->slave的sql thread將relay log apply到庫裏

MySQL如何保證和監控主從數據一致性的
    5.6 GTID複製,
    5.7 無損半同步複製(rpl_semi_sync_master_wait_point:after_sync)
    pt-table-checksum監控主從數據一致性
    

MySQL如何監控和減少主從延遲的
    5.5的單線程複製--->5.6的多庫複製--->5.7的多線程複製    
    pt-heartbeat 監控mysql主從同步延遲
    
Myisam和Innodb的區別:
    1.事務性
    2.innodb鎖粒度更細,myisam表級鎖,innodb行級鎖,併發性更高
    3.innodb支持MVCC(多版本併發控制)
    4.innodb支持外鍵(但是不建議用)
    5.表類型 innodb是iot,myisam是堆表
    6.myisam會使用一個變量保存表的行數
    7.innodb必須有主鍵(沒有的話innodb也會自動創建一個自增列作爲主鍵)
    
innodb四大特性:
    1.change buffer
        ---記錄不在內存中的二級索引頁的修改,頁面讀取到內存後再merge
    2.double write
        ----用來解決頁斷裂的問題,內存中有double write buffer,系統表空間裏對應的有連續的128個頁(2個extend,2M),其中120個用於批量刷髒,8個用於single page flush
        ----將隨機寫變成了順序寫
        ----內存中髒頁--->double write buffer--->系統表空間--->磁盤
        ----redo log的最小寫入單位是512字節=磁盤IO最小單位,所以不會有頁斷裂問題 
    3.read ahead
        ----兩種預讀算法:
            Linear read-ahead:如果InnoDB順序讀取了一個extent的N頁,那麼innodb會發起一個異步讀去讀取the entire following extent。由參數innodb_read_ahead_threshold控制頁閾值    
            Random read-ahead:如果一個extent中有13個連續不斷的頁被加載到buffer pool中,innodb會異步發起一個請求去讀取該extent的剩下所有頁。由參數innodb_random_read_ahead控制頁閾值
    4.Adaptive Hash Index
        ----作用是提高檢索效率

Mysql5.6 新增特性:
    online ddl、GTID複製、schema級別的多線程複製、memcached NoSQL api、統計信息持久化、buffer pool預熱

Mysql5.7 新增特性:
    online ddl支持重命名索引和修改varchar大小、對JSON的支持、sys schema、在線修改buffer pool的大小、並行複製、多源複製
    
varchar(n),int(n):
    varchar(n) n代表字符數,mysql行定義長度不能超過65535 latin1 gbk utf8 utf8mb4
    int(n) n表示顯示長度,與存儲長度無關   tinyint1 smallint2 mediumint3 int4  bigint8

innodb日誌
    redo ---redo log buffer --->ib_logfile
    undo ---undo log buffer --->ib_data* 也可以單獨指定innodb_undo_directory、innodb_undo_tablespaces
    
Mysql刷日誌規則:
    1.innodb_flush_log_at_trx_commit
    2.innodb_flush_log_at_timeout控制
    3.checkpoint觸發
    4.log buffer使用內存超過一般

Mysql刷數據頁規則:
    1.checkpoint觸發

innodb_flush_log_at_trx_commit和sync_binlog:
    innodb_flush_log_at_trx_commit:log buffer--->os buffer---->ib_logfile
        0--->每次提交寫log buffer  每秒寫入os buffer並調用fsync()落盤
        1--->每次提交都落盤
        2--->每次提交寫到os buffer 每秒調用fsync()落盤
    sync_binlog:binlog_cache--->binlog
        0--->MySQL不控制binlog的刷新
        n--->每n次事務刷新一次

Mysql binlog的格式:
    statement、mixed、row

Innodb的事務隔離級別:
    讀未提交、讀已提交、可重複讀、串行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章