MySQL中有七種日志文件,分別是:
- 重做日志(redo log)
- 回滾日志(undo log)
- 二進制日志(binlog)
- 中繼日志(relay log)
- 錯誤日志(errorlog)
- 慢查詢日志(slow query log)
- 一般查詢日志(general log)
下面介紹前4種。。。。
1. redo log
a.作用
保持了事務的持久性, 采用循環寫的方式將寫數據,寫入方式請參考https://www.cnblogs.com/zhixinSHOU/p/13214933.html
b.內容
物理格式的日志,記錄的是物理數據頁面的修改的信息,其redo log是順序寫入redo log file的物理文件中去的。
b.開始節點
事務開始之后就產生redo log,redo log的落盤並不是隨着事務的提交才寫入的,而是在事務的執行過程中,便開始寫入redo log文件中。
c.結束節點
當對應事務的臟頁寫入到磁盤之后,redo log的使命也就完成了,重做日志占用的空間就可以重用(被覆蓋)。
2.undo log
a.作用
保證了事務的原子性,當事務開始回滾的時候會用到
b.內容:
邏輯格式的日志,在執行undo的時候,僅僅是將數據從邏輯上恢復至事務之前的狀態,而不是從物理頁面上操作實現的,這一點是不同於redo log的。
c.開始節點:
事務開始之前,將當前是的版本生成undo log,undo 也會產生 redo 來保證undo log的可靠性
d.結束節點:
當事務提交之后,undo log並不能立馬被刪除,而是放入待清理的鏈表,由purge線程判斷是否由其他事務在使用undo段中表的上一個事務之前的版本信息,決定是否可以清理undo log的日志空間。
3. binlog
a.作用
主從復制,
前提:主庫將操作記錄存到binlog中,
在發生主從復制時,
1. 主庫會發起一個log dump線程,用來給從庫I/O線程傳binlog;
2.從庫發起一個I/O線程接收binlog文件,並將得到的binlog文件寫到本地relay-log(中繼日志)中,
3.從庫發起一個SQL 讀取中繼日志文件,逐一執行sql語句
在主從復制的時候需要注意的事
1) Master將操作語句記錄到binlog日志中,然后授予slave遠程連接的權限(master一定要開啟binlog二進制日志功能,通常為了數據安全考慮,salve也開啟binlog功能)
2) Slave開始倆個線程:IO線程和sql線程,其中:IO線程負責讀取master的binlog內容到中繼日志relay log里,sql線程負責從中繼日志里讀取binlog內容,並更新到slave的數據庫,這樣就能保持slave數據和master數據保持一致了
3) 至少有倆個Mysql的服務
4) 最好確保master和slave服務器上的Mysql版本相同,或者主服務器小於子服務器
已經在上面介紹過了,不再重復介紹了
已經