mysql的二進(jìn)制日志

MySQL日志文件系統(tǒng)的組成

  1. 錯(cuò)誤日志:記錄啟動(dòng),停止MySQL時(shí)出現(xiàn)的問(wèn)題。
  2. 通用日志:記錄建立的客戶端連接和執(zhí)行語(yǔ)句。
  3. 更新日志:記錄更改數(shù)據(jù)的語(yǔ)句。該日志在MySQL5.1中已經(jīng)不宰使用。
  4. 二進(jìn)制日志:記錄所有更改數(shù)據(jù)的語(yǔ)句。還用于復(fù)制。
  5. 慢查詢?nèi)罩荆河涗浰袌?zhí)行時(shí)間超過(guò)long_query_time秒的所有查詢或不適用索引的查詢。
  6. innodb日志:innodb redo log

缺省情況下,所有日志創(chuàng)建于mysqld數(shù)據(jù)目錄中。
可以通過(guò)刷新日志,來(lái)強(qiáng)制mysqld來(lái)關(guān)閉和重新打開日志文件(或者在某些情況下切換到一個(gè)新的日志)。
當(dāng)你執(zhí)行一個(gè)FLUSH LOGS語(yǔ)句或執(zhí)行mysqladmin flush-logs或mysqladmin refresh時(shí),則日志被老化。
對(duì)于存在MySQL復(fù)制的情形下,從復(fù)制服務(wù)器將維護(hù)更多日志文件,被稱為接替日志。

查詢?nèi)罩?/h1>

記錄查詢語(yǔ)句,日志存儲(chǔ)位置:
文件:file
表:table (mysql.general_log)

general_log={ON|OFF}
general_log_file=HOSTNAME.log
log_output={FILE|TABLE|NONE}

慢查詢?nèi)罩?/h1>

慢查詢:運(yùn)行時(shí)間超出指定時(shí)長(zhǎng)的查詢;
long_query_time
存儲(chǔ)位置:
文件:FILE
表:TABLE,mysql.slog_log

log_slow_queries={ON|OFF}
slow_query_log={ON|OFF}
slow_query_log_file=
log_output={FILE|TABLE|NONE}
log_slow_filter=admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk
log_slow_rate_limit
log_slow_verbosity

錯(cuò)誤日志

記錄信息:

  1. mysqld啟動(dòng)和關(guān)閉過(guò)程 輸出的信息;
  2. mysqld運(yùn)行中產(chǎn)生的錯(cuò)誤信息;
  3. event scheduler運(yùn)行時(shí)產(chǎn)生的信息;
  4. 主從復(fù)制架構(gòu)中,從服務(wù)器復(fù)制線程啟動(dòng)時(shí)產(chǎn)生的日志;

log_error=
/var/log/mariadb/mariadb.log|OFF
log_warnings={ON|OFF}

二進(jìn)制日志

用于記錄引起數(shù)據(jù)改變或存在引起數(shù)據(jù)改變的潛在可能性的語(yǔ)句(STATEMENT)或改變后的結(jié)果(ROW),也可能是二者混合;
功用:“重放”

binlog_format={STATEMENT|ROW|MIXED}
STATEMENT:語(yǔ)句;
ROW:行;
MIXED:混編;

它包含的內(nèi)容及作用如下:

  • 包含了所有更新了數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)(比如沒(méi)有匹配任何行的一個(gè)DELETE)
  • 包含關(guān)于每個(gè)更新數(shù)據(jù)庫(kù)(DML)的語(yǔ)句的執(zhí)行時(shí)間信息
  • 不包含沒(méi)有修改任何數(shù)據(jù)的語(yǔ)句,如果需要啟用該選項(xiàng),需要開啟通用日志功能
  • 主要目的是盡可能的將數(shù)據(jù)庫(kù)恢復(fù)到數(shù)據(jù)庫(kù)故障點(diǎn),因?yàn)槎M(jìn)制日志包含備份后進(jìn)行的所有更新
  • 用于在主復(fù)制服務(wù)器上記錄所有將發(fā)送給從服務(wù)器的語(yǔ)句
  • 啟用該選項(xiàng)數(shù)據(jù)庫(kù)性能降低1%,但保障數(shù)據(jù)庫(kù)完整性,對(duì)于重要數(shù)據(jù)庫(kù)值得以性能換完整。有些類似于oracle開啟歸檔模式。

開啟二進(jìn)制日志的方法及屬性

使用--log-bin[=file_name]選項(xiàng)或在配置文件中指定log-bin啟動(dòng)時(shí),mysqld寫入包含所有更新數(shù)據(jù)的SQL命令的日志文件。

對(duì)于未給出file_name值, 默認(rèn)名為-bin后面所跟的主機(jī)名。

在未指定絕對(duì)路徑的情形下,缺省位置保存在數(shù)據(jù)目錄下。

每個(gè)二進(jìn)制日志名會(huì)添加一個(gè)數(shù)字?jǐn)U展名用于日志老化,因此不支持自定義的擴(kuò)展名,會(huì)被mysql數(shù)字?jǐn)U展名動(dòng)態(tài)替換。

若當(dāng)前的日志大小達(dá)到max_binlog_size,則自動(dòng)創(chuàng)建新的二進(jìn)制日志。

對(duì)于大的事務(wù),二進(jìn)制日志會(huì)超過(guò)max_binlog_size設(shè)定的值。也即是事務(wù)僅僅寫入一個(gè)二進(jìn)制日志。 由是可知,二進(jìn)制日志文件大小接近,其size不是完全相等,這點(diǎn)不同于oracle。

二進(jìn)制日志文件會(huì)有一個(gè)對(duì)應(yīng)二進(jìn)制日志索引文件,該文件包含所有的二進(jìn)制日志,其文件名與二進(jìn)制日志相同,擴(kuò)展名為.index

二進(jìn)制索引文件通過(guò)--log-bin-index[=file_name]選項(xiàng)來(lái)指定

RESET MASTER語(yǔ)句將刪除所有二進(jìn)制日志文件,這將影響到從庫(kù)。也可以用PURGE MASTER LOGS只刪除部分二進(jìn)制文件。

查看二進(jìn)制日志文件列表:
SHOW MASTER|BINARY LOGS;

查看當(dāng)前正在使用的二進(jìn)制日志文件:
SHOW MASTER STATUS;

查看二進(jìn)制 日志文件中的事件:
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]

二進(jìn)制文件的構(gòu)成:
兩類文件
日志文件:mysql-bin.文件名后綴 二進(jìn)制格式
索引文件:mysql-bin.index 文本格式

服務(wù)器變量:
log_bin=/PATH/TO/BIN_LOG_FILE 記錄文件路徑
只讀變量;
session.sql_log_bin={ON|OFF}
控制某會(huì)話中的“寫”操作語(yǔ)句是否會(huì)被記錄于日志文件中;
max_binlog_size=1073741824
sync_binlog={1|0}
binlog_format=

mysqlbinlog:
YYYY-MM-DD hh:mm:ss

--start-datetime=
--stop-datetime=

-j, --start-position=#
--stop-position=#

--user, --host, --password

二進(jìn)制日志事件格式:
基于語(yǔ)句記錄:statement
基于行記錄:row
混合模式:mixed,讓系統(tǒng)自行判定該基于哪種方式進(jìn)行

# at 553
#160831 9:56:08 server id 1 end_log_pos 624 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1472608568/!/;
BEGIN
/*!*/;

事件的起始位置:# at 553
事件發(fā)生的日期時(shí)間:#160831 9:56:08
事件發(fā)生的服務(wù)器id:ser ver id 1
事件的結(jié)束位置:end_log_pos 624
事件的類型:Query
事件發(fā)生時(shí)所在服務(wù)器執(zhí)行此事件的線程的ID: thread_id=2
語(yǔ)句的時(shí)間戳與將其寫入二進(jìn)制日志文件中的時(shí)間差:exec_time=0
錯(cuò)誤代碼:error_code=0
事件內(nèi)容:SET TIMESTAMP=1472608568/!/;

二進(jìn)制日志相關(guān)演示

啟動(dòng)日志

查看環(huán)境

MariaDB [(none)]> show variables like '%version%'
        -> ;
    +-------------------------+---------------------+
    | Variable_name           | Value               |
    +-------------------------+---------------------+
    | innodb_version          | 5.5.52-MariaDB-38.3 |
    | protocol_version        | 10                  |
    | slave_type_conversions  |                     |
    | version                 | 5.5.56-MariaDB      |
    | version_comment         | MariaDB Server      |
    | version_compile_machine | x86_64              |
    | version_compile_os      | Linux               |
    +-------------------------+---------------------+
    7 rows in set (0.01 sec)
    
    MariaDB [(none)]> show variables like '%log_bin%';
    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | log_bin                         | OFF   |--該參數(shù)用于設(shè)定是否啟用二進(jìn)制日志 
    | log_bin_trust_function_creators | OFF   |
    | sql_log_bin                     | ON    |
    +---------------------------------+-------+
    3 rows in set (0.01 sec)

binary log相關(guān)參數(shù)

    MariaDB [(none)]> show variables like '%binlog%';
    +-----------------------------------------+----------------------+
    | Variable_name                           | Value                |
    +-----------------------------------------+----------------------+
    | binlog_annotate_row_events              | OFF                  |
    | binlog_cache_size                       | 32768                |
    | binlog_checksum                         | NONE                 |
    | binlog_direct_non_transactional_updates | OFF                  |
    | binlog_format                           | STATEMENT            |
    | binlog_optimize_thread_scheduling       | ON                   |
    | binlog_stmt_cache_size                  | 32768                |
    | innodb_locks_unsafe_for_binlog          | OFF                  |
    | max_binlog_cache_size                   | 18446744073709547520 |
    | max_binlog_size                         | 1073741824           |
    | max_binlog_stmt_cache_size              | 18446744073709547520 |
    | sync_binlog                             | 0                    |
    +-----------------------------------------+----------------------+
    12 rows in set (0.01 sec)

當(dāng)前mysql服務(wù)器數(shù)據(jù)文件的缺省位置

    MariaDB [(none)]> show variables like '%datadir%';
    +---------------+-----------------+
    | Variable_name | Value           |
    +---------------+-----------------+
    | datadir       | /var/lib/mysql/ |
    +---------------+-----------------+
    1 row in set (0.00 sec)

編輯my.cnf來(lái)設(shè)定binary log日志位置(注,配置二進(jìn)制日志路徑及文件名后,系統(tǒng)變量log_bin被自動(dòng)置為on)
在編輯配置文件時(shí)要把服務(wù)停止

[mysqld]
log_bin=/var/log/maria/mariadb.log/binarylog/binlog

[root@localhost ~]# mkdir -p /var/log/maria/mariadb.log/binarylog
[root@localhost ~]# chown -R mysql:mysql  /var/log/maria/mariadb.log/binarylog

切換日志

MariaDB [(none)]> system ls -hltr /var/log/mariadb/binarylog/*
-rw-rw----. 1 mysql mysql 245 Oct 12 22:55 /var/log/mariadb/binarylog/binlog.000001      #日志文件
-rw-rw----. 1 mysql mysql  41 Oct 12 22:55 /var/log/mariadb/binarylog/binlog.index     #索引文件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文轉(zhuǎn)載于: https://www.cnblogs.com/martinzhang/p/3454358.html...
    簡(jiǎn)單的菜鳥閱讀 2,435評(píng)論 0 7
  • 日志文件對(duì)于一個(gè)服務(wù)器來(lái)說(shuō)是非常重要的,它記錄著服務(wù)器的運(yùn)行信息,許多操作都會(huì)寫日到日志文件,通過(guò)日志文件可以監(jiān)視...
    時(shí)待吾閱讀 1,123評(píng)論 0 5
  • Mysql 有4種類型的日志:Error Log、Genaral Query Log、 Binary Log 和 ...
    人在碼途閱讀 16,586評(píng)論 2 11
  • 雖然不能恢復(fù)百分百,至少能將損失降到最低。 有個(gè)問(wèn)題測(cè)試: 主從同步時(shí),主庫(kù)網(wǎng)絡(luò)斷開,binlog dump線程...
    kun_zhang閱讀 3,174評(píng)論 0 6
  • MySQL的二進(jìn)制日志(binary log)是一個(gè)二進(jìn)制文件,主要用于記錄修改數(shù)據(jù)或有可能引起數(shù)據(jù)變更的MySQ...
    時(shí)待吾閱讀 2,156評(píng)論 0 1

友情鏈接更多精彩內(nèi)容