MySQL是一種關系型數據庫管理系統,支持多種操作系統。它使用了一種名為binlog的二進制日志格式,對于數據庫的備份、恢復以及復制都有著重要的作用。
binlog(Binary log)是指MySQL服務器上的一種記錄日志的機制。當MySQL服務器完成一系列的數據庫修改操作,如插入、更新或刪除等,它就會把這些操作轉換成二進制日志文件,這個文件便稱之為binlog。注意,MySQL只會將committed(事務提交)的數據寫入binlog。
示例binlog的格式結構: /*!*/; # at 4 #170329 2:38:10 server id 1 end_log_pos 124 CRC32 0xbbf8a448 Rotate to mysql-bin.000003 pos: 4 # at 124 #180517 14:11:18 server id 1 end_log_pos 336 CRC32 0x6357db70 GTID last_committed=0 sequence_number=1 rbr_only=yes SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/; # at 336 #180517 14:11:18 server id 1 end_log_pos 565 CRC32 0xc9247e1f Query thread_id=5 exec_time=0 error_code=0 SET TIMESTAMP=1526555478/*!*/; INSERT INTO `test` VALUES (1,'Tom')/*!*/; # at 633 #180517 14:11:18 server id 1 end_log_pos 662 CRC32 0xd81f8a0b Xid = 4 COMMIT/*!*/;
上例是binlog的格式結構示例,其中的每一行都有著重要的意義。第2行是binlog開頭,4表示binlog開始寫入的位置。第3~4行中的server id 1表示的是運行MySQL的服務器的唯一標識符。end_log_pos則表示該事務記錄在binlog中結束的位置。最后一行則是表示該事務的提交。
在MySQL服務器上使用binlog有多種作用,其中最常見的是用于數據的備份、恢復以及復制。在備份數據時,我們可以使用mysqldump命令,將binlog一起備份就能夠實現增量備份。當需要恢復數據時,我們可以將binlog文件加入到mysql命令行中,實現數據的回滾。
在多主復制、從從復制以及半同步復制中,我們通過復制binlog文件可以實現從主服務器或其他MySQL服務器同步數據副本的目的。對于MySQL的高可用性和容災性,binlog也有著至關重要的作用。
下一篇mysql big函數