1. 程式人生 > >1.Binary Logging概述

1.Binary Logging概述

  • Mysql預設情況下是啟用二進位制日誌記錄的(log_bin系統變數設定為ON)。但是,如果使用mysqld通過使用–initialize或–initialize-insecure選項手動初始化資料目錄,預設情況下禁用二進位制日誌記錄,可以通過在配置檔案中增加–log-bin選項啟用,也可以在啟動時指定–skip-log-bin或–disable-log-bin選項,啟用與關閉選項誰靠後誰優先。
  • 設定–log-slave-updates和–slave-preserve-commit-order選項需要啟動binary log,預設情況下,當指定了–skip-log-bin或–disable-log-bin,MySQL會禁用這些選項。如果將–log-slave-updates或–slave-preserve-commit-order與–skip-log-bin或–disable-log-bin一起指定,則會發出警告或錯誤訊息
  • 設定–log-bin [= base_name]選項用於指定二進位制日誌檔案的基本名稱。如果不設定–log-bin選項,則MySQL使用binlog作為二進位制日誌檔案的預設基本名稱。為了與早期版本相容,如果提供的-log-bin選項沒有字串或空字串,則基本名稱預設為host_name-bin,使用主機名稱。建議您指定基本名稱,以便在主機名更改時,您可以輕鬆地繼續使用相同的二進位制日誌檔名
  • mysqld將數字副檔名附加到binary log基本名稱以生成二進位制日誌檔名。每次伺服器建立新日誌檔案時,該數字都會增加,從而建立一系列有序的檔案。每次啟動或重新整理日誌時,伺服器都會在系列中建立一個新檔案。在當前日誌的大小達到max_binlog_size後,伺服器還會自動建立新的二進位制日誌檔案。如果您使用大型事務,則二進位制日誌檔案可能會變得比max_binlog_size大,因為事務是以一個部分寫入檔案,而不是在檔案之間分割。
  • 為了跟蹤已使用的binary log檔案,mysqld還建立了一個二進位制日誌索引檔案,其中包含所有使用的binary log檔案的名稱。預設情況下,它具有與二進位制日誌檔案相同的基本名稱,副檔名為“.index”。您可以使用–log-bin-index [= file_name]選項更改二進位制日誌索引檔案的名稱。在mysqld執行時,此檔案不可手動編輯。
  • 二進位制日誌檔案和二進位制日誌索引檔案的預設位置是資料目錄。您可以使用–log-bin選項指定備用位置,方法是在基本名稱中新增前導絕對路徑名以指定其他目錄。當伺服器從二進位制日誌索引檔案中讀取條目時,該檔案跟蹤已使用的二進位制日誌檔案,它會檢查條目是否包含相對路徑。如果是,則使用–log-bin選項將路徑的相對部分替換為絕對路徑。二進位制日誌索引檔案中記錄的絕對路徑保持不變;在這種情況下,必須手動編輯索引檔案以啟用新路徑。二進位制日誌檔案基本名稱和任何指定的路徑都可用作log_bin_basename系統變數。
  • 在MySQL 5.7中,必須在啟用二進位制日誌記錄時指定伺服器ID,否則伺服器將無法啟動。在MySQL 8.0中,server_id系統變數預設設定為1。啟用二進位制日誌記錄時,可以使用此預設ID啟動伺服器,但如果未使用–server-id選項明確指定伺服器標識,則會發出資訊性訊息。對於複製拓撲中使用的伺服器,必須為每個伺服器指定唯一的非零伺服器ID。
  • 在MySQL 5.7中,必須在啟用二進位制日誌記錄時指定伺服器ID,否則伺服器將無法啟動。在MySQL 8.0中,server_id系統變數預設設定為1。啟用二進位制日誌記錄時,可以使用此預設ID啟動伺服器,但如果未使用–server-id選項明確指定伺服器標識,則會發出資訊性訊息。對於複製拓撲中使用的伺服器,必須為每個伺服器指定唯一的非零伺服器ID。
  • 預設情況下,伺服器記錄事件的長度以及事件本身,並使用它來驗證事件是否正確寫入。可以通過設定binlog_checksum系統變數使伺服器為事件編寫校驗和。
  • binary log中記錄的事件格式取決於二進位制日誌記錄格式。支援三種格式型別:基於行的日誌記錄,基於語句的日誌記錄和基於混合的日誌記錄。使用的二進位制日誌記錄格式取決於MySQL版本。
  • mysql伺服器以與–replicate-do-db和–replicate-ignore-db選項相同的方式處理–binlog-do-db和–binlog-ignore-db選項。
  • 啟動複製從屬伺服器時預設啟用–log-slave-updates設定,這意味著從屬伺服器會將從複製主伺服器接收的任何資料修改寫入其自己的二進位制日誌。必須啟用二進位制日誌才能使此設定生效.
  • 可以使用RESET MASTER語句刪除所有binary log檔案,或使用PURGE BINARY LOGS刪除它們的子集。
  • 假如使用mysql複製技術,那麼不要在Slave伺服器全部同步完之前刪除過期的binary log,可以使用mysqladmin flush-logs技術重新生成相關的binary log日誌,假如Slave伺服器沒有延遲3天以上,可以刪除3天以前的日誌。手動刪除binary log後,需要用PURGE BINARY LOGS重新更新索引檔案。
  • binary log也可用於顯示覆制從屬中繼日誌檔案內容,因為它們使用與二進位制日誌檔案相同的格式編寫。
  • binary log是在語句或事務完成之後但在釋放任何鎖定或完成任何提交之前生成,這樣做的目的是為了確保以提交順序記錄日誌。
  • 非事務性表的更新在執行後立即儲存在二進位制日誌中。
  • 無法回滾對非事務表引擎的修改。如果回滾的事務包括對非事務表的修改,則使用ROLLBACK語句記錄整個事務,以確保複製對這些表的修改。