MySQL日志文件系統(tǒng)的組成
- 錯(cuò)誤日志:記錄啟動(dòng),停止MySQL時(shí)出現(xiàn)的問(wèn)題。
- 通用日志:記錄建立的客戶端連接和執(zhí)行語(yǔ)句。
- 更新日志:記錄更改數(shù)據(jù)的語(yǔ)句。該日志在MySQL5.1中已經(jīng)不宰使用。
- 二進(jìn)制日志:記錄所有更改數(shù)據(jù)的語(yǔ)句。還用于復(fù)制。
- 慢查詢?nèi)罩荆河涗浰袌?zhí)行時(shí)間超過(guò)long_query_time秒的所有查詢或不適用索引的查詢。
- 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ò)誤日志
記錄信息:
- mysqld啟動(dòng)和關(guān)閉過(guò)程 輸出的信息;
- mysqld運(yùn)行中產(chǎn)生的錯(cuò)誤信息;
- event scheduler運(yùn)行時(shí)產(chǎn)生的信息;
- 主從復(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 #索引文件