mariadb日誌
mariadb日誌:
一、查詢日誌:query log;
二、慢查詢日誌:slow query log
三、錯誤日誌:error log
四、二進制日誌:binary log
五、中繼日誌:reley log
六、事務日誌:transaction log
查詢日誌
記錄查詢操做:
文件:file
表: table
general_log=ON|OFF
general_log_file=HOSTNAME.log # 使用相對路徑,存儲在定義的mysql數據存放路徑下
log_output=TABLE|FILE|NONE
不記錄日誌的方式有兩種:
一、general_log=off不會記錄
二、general_log=on但把log_output=NONE也不會記錄日誌
查詢日誌通常是不開啓,額外會產生太多的壓力,並且更重要的是查詢語句並不是每個都有記錄下來的價值
慢查詢日誌
指的是查詢時長超出指定時長的查詢操做:
不是全部的慢查詢,都是由於查詢語句自行真正執行太慢而致使,而是查詢操做所依賴的表被其它語句鎖定致使當前語句被阻塞,儘管如此依然斷定這是個慢查詢
slow_query_log=ON|OFF
slow_query_log_file=HOSTNAME-slow.log
log_slow_filter # 慢查詢日誌過濾器
admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk
過濾器主要做用:
用來定義慢查詢在進行記錄時如何進行記錄的,好比說這裏的filter表示哪種查詢致使的不與記錄,哪種查詢致使的才進行記錄等等。
log_slow_queries= OFF # 從mariadb-10.0和mysql-5.6.1開始就被拋棄了,取而代之是slow_query_log
log_slow_rate_limit 1 # 指明記錄速率
log_slow_verbosity 詳細級別
默認的慢查詢時長:
MariaDB [hellodb]> show global variables like '%long_query%';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
也可使用select來查詢,若是是用戶自定義變量使用一個@,服務器變量使用2個@
MariaDB [hellodb]> select @@global.long_query_time;
+--------------------------+
| @@global.long_query_time |
+--------------------------+
| 10.000000 |
+--------------------------+
自定義修改慢查詢時長:
一、修改session會話級別
MariaDB [hellodb]> set long_query_time=5;
Query OK, 0 rows affected (0.01 sec)
MariaDB [hellodb]> show variables like '%long_query%';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 5.000000 |
+-----------------+----------+
二、修改global全局設置,修改session和global設置,global只須要在set後面加上global便可,而session不須要加直接在set後面跟上變量便可;
MariaDB [hellodb]> set global long_query_time=5;
Query OK, 0 rows affected (0.00 sec)
MariaDB [hellodb]> show global variables like '%long_query%';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 5.000000 |
+-----------------+----------+
錯誤日誌
一、記錄的不徹底是錯誤日誌,記錄的是多種信息,包括MySQL服務器啓動、關閉過程當中所產生的事件也會記錄到錯誤日誌裏面去,但它們未必是真正的錯誤日誌信息。
二、錯誤日誌默認也是沒開啓的,但在centos7發行版商是被開啓的
三、記錄哪幾種日誌信息:
3.一、mysqld啓動和關閉過程當中輸出的事件信息;
3.二、mysqld運行中產生的錯誤信息;
3.三、event scheduler (事件調度器) 運行一個event時產生的日誌信息;
3.四、在主從複製架構中的從服務器上啓動從服務器線程時產生的信息;
log_error=/var/log/mariadb/mariadb.log
log_warnings=1|0:是否記錄警告信息至錯誤日誌文件中,1表示記錄、0表示不記錄
二進制日誌:
記錄致使數據改變或潛在致使數據改變的SQL語句;
功能:用於經過「重放」日誌文件中的事件來生成數據副本;
並且更重要的是這個SQL語句在文件中保存是以二進制格式保存的而非是文本類型保存
SHOW {BINARY | MASTER} LOGS:查看mariadb自行管理使用中的二進制日誌文件列表;
SHOW MASTER STATUS:查看使用中的二進制日誌文件;
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
二進制日誌記錄格式:
基於「語句」記錄:startement
基於「行」記錄:row
混合模式:mixed,讓系統自行斷定該基於哪一種方式進行;
要記錄精確數據使用哪一種方式:
基於「行」,記錄數據的
基於「語句」,記錄語句的
基於行會產生較大的數據量
混合模式,應用折中、語句不會產生混淆,不會致使兩次記錄、兩次執行數據不同,就基於語句而且節約空間,不然就基於行
二進制日誌文件的構成:
兩類文件
日誌文件:mysql-bin.文件名後綴,二進制
索引文件:mysql-bin.index,文本
mysql-bin.index:是用來追蹤mysql或mariadb正在使用中的或者是咱們仍然在追蹤中可用二進制日誌文件序列有哪些
服務器變量:
sql_log_bin=ON|OFF:是否記錄二進制日誌;
log_bin=/PATH/TO/BIN_LOG_FILE:記錄的文件位置;一般爲ON;二進制日誌默認經過滾動方式來進行記錄的
binlog_format=STATEMENT|ROW|MIXED:二進制日誌記錄的格式;
max_binlog_size=1073741824:單個二進制日誌文件的最大致積,默認爲1G,
注意:
一、到達最大值以後自動會滾動
二、文件達到上限的大小未必爲指定的精確值
sync_binlog=1|0:設定是否啓動二進制日誌同步功能:
mysqlbinlog:客戶端命令工具
mysqlbinlog [options] log_file
--start-position
從指定起始號開始顯示:
[root@node7 /data/mysql]#mysqlbinlog --start-position=499 mysql-bin.000002
--stop-position
從指定位置開始到指定結束位置
[root@node7 /data/mysql]#mysqlbinlog --start-position=328 --stop-position=457 mysql-n.000002
--start-datetime=
--stop-datetime=
時間格式:
YYYY-MM-DD hh:mm:ss
二進制日誌事件的格式
# at 499
#181014 21:30:29 server id 1 end_log_pos 604 CRC32 0x5c77d4d7 Query thread_id=1 exec_time=0 error_code=0
use `mydb`/*!*/;
SET TIMESTAMP=1539523829/*!*/;
create table tb1(id int,name char(30))
/*!*/;
事件的起始位置: at 499
事件發生的日期和時間: 181014 21:30:29
事件發生的服務器標識: server id 1
事件的結束位置: end_log_pos 604
事件的類型: Query
事件發生時所在服務器執行此事件的線程的id:thread_id=1
語句的時間戳與將其寫入二進制文件中的時間差;exec_time=0
錯誤代碼: error_code=0
事件內容:
use `mydb`/*!*/;
SET TIMESTAMP=1539523829/*!*/;
create table tb1(id int,name char(30))
/*!*/;
GTID:全局事務ID號(global transaction id):
專屬屬性:GTID
說明在同一個複製集羣中,每個服務器上執行任何一個事務,都有一個惟一的標識符、不管是執行過多少個事務、在本次集羣運行過程當中必定不會有任何其它事務與當前事務重名的
--------------------------------------------------------------------------------------------------------------------------------------------------------
查看數據庫日誌的操做:
使用file命令來查看mysql-bin.000001 爲哪一個類型的文件,不能使用cat去查看mysql-bin.000001文件不然顯示的結構爲亂碼
[root@node7 /data/mysql]#file mysql-bin.000001
mysql-bin.000001: MySQL replication log
查看當前mysql服務器中可管理的二進制日誌文件有哪些
MariaDB [hellodb]> show binary logs;
+-------------------------+-------------+
| Log_name | File_size |
+------------------------+---------------+
| mysql-bin.000001 | 1675 |
| mysql-bin.000002 | 15764 |
| mysql-bin.000003 | 3429 |
| mysql-bin.000004 | 740 |
| mysql-bin.000005 | 10606 |
| mysql-bin.000006 | 26983604 |
| mysql-bin.000007 | 6098 |
+------------------------+---------------+
也可以使用show master logs查看,跟show binary logs是同樣的
MariaDB [hellodb]> show master logs;
+------------------------+----------------+
| Log_name | File_size |
+------------------------+----------------+
| mysql-bin.000001 | 1675 |
| mysql-bin.000002 | 15764 |
| mysql-bin.000003 | 3429 |
| mysql-bin.000004 | 740 |
| mysql-bin.000005 | 10606 |
| mysql-bin.000006 | 26983604 |
| mysql-bin.000007 | 6098 |
+------------------------+----------------+
查看當前系統上正在使用的二進制日誌文件
查看二進制日誌文件的事件
字段解釋:
Log_name : 日誌文件名
Pos: 起始點
Event_type: 事件的類型
Server_id: 服務器編號
End_log_pos: 結束位置
Info: 記錄事件自己的內容
中繼日誌
複製架構中,從服務器用於保存從主服務器的二進制日誌中讀取到的事件;
事務日誌
事務日誌:transaction log
事務型存儲引擎自行管理和使用;
redo log:重作日誌
undo log:撤銷日誌
事務日誌不宜太大,根據業務來定義;