MySQL是一個(gè)開源的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它的日志功能非常強(qiáng)大,可以記錄數(shù)據(jù)的變化,以及對(duì)數(shù)據(jù)庫(kù)的操作,這些日志也被稱為二進(jìn)制日志,主要分為三種類型:binlog,redo log以及undo log。
binlog是二進(jìn)制日志,主要是用于記錄所有對(duì)數(shù)據(jù)庫(kù)進(jìn)行的修改操作,包括增刪改操作,它可以記錄所有的語句以及操作時(shí)間戳,從而在需要的時(shí)候可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)恢復(fù)和復(fù)制,這對(duì)于數(shù)據(jù)的備份和容災(zāi)非常有用。
# 查看binlog文件列表 SHOW BINARY LOGS; # 查看指定的binlog文件中記錄的操作語句 mysqlbinlog [filename]
redo log是重做日志,主要是用于記錄所有對(duì)數(shù)據(jù)庫(kù)文件進(jìn)行的修改操作,包括數(shù)據(jù)頁,數(shù)據(jù)文件等等,它主要是為了保證MySQL的事務(wù)特性,從而避免數(shù)據(jù)的損壞和丟失,每個(gè)redo log記錄的大小是相等的,一旦記錄滿,就會(huì)自動(dòng)覆蓋以前的數(shù)據(jù),因此一定要保證redo log大小足夠。
# 查看redo log信息 SHOW ENGINE INNODB STATUS;
undo log是撤銷日志,主要是用于記錄對(duì)數(shù)據(jù)庫(kù)進(jìn)行的撤銷操作,比如ROLLBACK,從而可以保證數(shù)據(jù)庫(kù)的一致性,undo log和redo log不一樣,它并不會(huì)像redo log一樣覆蓋已經(jīng)操作的數(shù)據(jù),而是保留當(dāng)前的數(shù)據(jù)狀態(tài),只要一旦發(fā)生回滾操作,就會(huì)將數(shù)據(jù)恢復(fù)到先前的狀態(tài),非常有用。
# 查看undo log信息 SELECT * FROM information_schema.INNODB_TRX\G