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的事務隔離級別:
讀未提交、讀已提交、可重複讀、串行