MySQL日誌管理mysql
SHOW GLOBAL VARIABLES LIKE '%log%';查看關於log的全局變量sql
1、日誌分類數據庫
1.錯誤日誌 2.通常查詢日誌 3.慢查詢日誌緩存
4.二進制日誌 5.中繼日誌 6.事務日誌 7.滾動日誌安全
2、日誌詳解bash
1.錯誤日誌服務器
說明:在對應的數據目錄中,以主機名+.err命名的文件,錯誤日誌記錄的信息類型:架構
記錄了服務器運行中產生的錯誤信息ide
記錄了服務在啓動和中止是所產生的信息性能
在從服務器上若是啓動了複製進程的時候,複製進程的信息也會被記錄
記錄event事件錯誤日誌
配置mysql的主配置文件:
1
2
|
log_error =
/mydata/data/mysql
.
test
.com.err
#指定錯誤日誌的位置,默認是在數據目錄下,這個位置mysql用戶必須有寫權限
log_warning = {0|1}
#默認開啓,服務器運行中的警告日誌也會記錄在錯誤日誌中
|
2.通常查詢日誌
說明:對除了慢查日誌中記錄的查詢信息都將記錄下來,這將對服務器主機產生大量的壓力,因此對於繁忙的服務器應該關閉這個日誌
與查詢日誌相關的變量,
1
2
3
4
|
log = {ON|OFF}
#是否啓用查詢日誌,該指令在mysq5.6中已廢棄
general_log = {ON|OFF}
#啓動或關閉查詢日誌,默認是關閉的
general_log_file =
/mydata/data/mysql
.log
#指定查詢日誌的位置,默認在數據目錄下
log_output = {TABLE|FILE|NONE}
#指定存放查詢日誌的位置,能夠放在文件中,也能夠放在數據庫的表中,放在表中比放在文件中更容易查看。若是組合中出現了NONE,那麼其它設定都將失效,同時,不管是否啓用日誌功能,也不會記錄任何相關的日誌信息
|
3.慢查詢日誌
說明:默認爲關閉狀態,記錄下來查詢時間超過設定時長的查詢,這些查詢日誌將被慢查日誌記錄下來
配置mysql的主配置文件:
1
2
3
4
5
|
slow_query_log = {ON | OFF}
#是否開啓慢慢查詢日誌,默認是關閉的
slow_query_log_file =
/mydata/data/mysql-slow
.log
#慢查詢日誌的存放位置,默認在數據目錄下
log_query_time = 10
#定義默認的時長,默認時長爲10秒
log_query_not_using_indexes = {ON|OFF}
#設定是否將沒有使用索引的查詢操做記錄到慢查詢日誌
log_output = {TABLE|FILE|NONE}
#定義通常查詢日誌和慢查詢日誌的保存方式,能夠是TABLE、FILE、NONE,也能夠是TABLE及FILE的組合(用逗號隔開),默認爲FILE。若是組合中出現了NONE,那麼其它設定都將失效,同時,不管是否啓用日誌功能,也不會記錄任何相關的日誌信息
|
4.二進制日誌
說明:默認開啓,精確的記錄了用戶對數據庫中的數據進行操做的命令和操做的數據對象,
任何引發或可能引發數據庫變化的操做,二進制日誌都會記錄下來。
二進制日誌文件的做用:
提供了增量備份的功能
提供了數據基於時間點的恢復,這個恢復的時間點能夠由用戶控制
爲mysql的複製架構提供基礎,將這主服務器的二進制日誌複製到從服務器上並執行一樣的操做,就可將數據進行同步
二進制日誌格式:
基於語句 statement
基於行 row
混合方式 mixed
二進制日誌事件:
position 基於位置
datetime 基於時間
二進制日誌的查看與刪除方式:
1
2
3
4
5
|
mysql>show master status;
查看當前正在使用的二進制日誌
Usage:SHOW BINLOG EVENTS IN 'mysql-bin.00001' FROM 107 #查看mysql-bin.00001日誌文件的事件信息,且從事件107位置開始顯示 mysql>flush logs; 二進制日誌滾動
mysql>show binary logs; 查看全部二進制日誌
mysql>SHOW BINARY LOGS ; #查看全部的二進制日誌文件 +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 1165 | | mysql-bin.000002 | 126 | | mysql-bin.000003 | 126 | | mysql-bin.000004 | 884 | | mysql-bin.000005 | 126 | | mysql-bin.000006 | 126 | | mysql-bin.000007 | 126 | | mysql-bin.000008 | 126 | | mysql-bin.000009 | 206 | | mysql-bin.000010 | 126 | | mysql-bin.000011 | 126 | | mysql-bin.000012 | 391 | | mysql-bin.000013 | 7984 | | mysql-bin.000014 | 286 | | mysql-bin.000015 | 1325 | | mysql-bin.000016 | 390 | | mysql-bin.000017 | 371 | +------------------+-----------+ 17 rows in set (0.00 sec) mysql> PURGE BINARY LOGS TO 'mysql-bin.000003'; #刪除二進制日誌文件以前的全部日誌文件。再次查看,二進制日誌文件,000001和000002日誌文件已經被刪除。 Query OK, 0 rows affected (0.01 sec) mysql> SHOW BINARY LOGS ; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000003 | 126 | | mysql-bin.000004 | 884 | | mysql-bin.000005 | 126 | | mysql-bin.000006 | 126 | | mysql-bin.000007 | 126 | | mysql-bin.000008 | 126 | | mysql-bin.000009 | 206 | | mysql-bin.000010 | 126 | | mysql-bin.000011 | 126 | | mysql-bin.000012 | 391 | | mysql-bin.000013 | 7984 | | mysql-bin.000014 | 286 | | mysql-bin.000015 | 1325 | | mysql-bin.000016 | 390 | | mysql-bin.000017 | 371 | +------------------+-----------+ 15 rows in set (0.00 sec) |
文件系統中查看二進制日誌的命令:mysqlbinlog
1
2
3
4
5
6
|
mysqlbinlog
相關選項,
--start-position
#開始位置
--stop-position
#結束位置
--start-datetime
'yyyy-mm-dd hh:mm:ss'
;
#開始時間
|
配置mysql的主配置文件:
1
2
3
4
5
6
7
8
9
|
sql_log_bin = {ON|OFF}
#用於控制二進制日誌信息是否記錄進日誌文件。默認爲ON,表示啓用記錄功能。用戶能夠在會話級別修改此變量的值,但其必須具備SUPER權限
binlog_cache_size = 32768
#默認值32768 Binlog Cache 用於在打開了二進制日誌(binlog)記錄功能的環境,是 MySQL 用來提升binlog的記錄效率而設計的一個用於短期內臨時緩存binlog數據的內存區域。通常來講,若是咱們的數據庫中沒有什麼大事務,寫入也不是特別頻繁,2MB~4MB是一個合適的選擇。可是若是咱們的數據庫大事務較多,寫入量比較大,可與適當調高binlog_cache_size。同時,咱們能夠經過binlog_cache_use 以及 binlog_cache_disk_use來分析設置的binlog_cache_size是否足夠,是否有大量的binlog_cache因爲內存大小不夠而使用臨時文件(binlog_cache_disk_use)來緩存了
binlog_stmt_cache_size = 32768
#當非事務語句使用二進制日誌緩存,可是超出binlog_stmt_cache_size時,使用一個臨時文件來存放這些語句
log_bin = mysql-bin
#指定binlog的位置,默認在數據目錄下
binlog-
format
= {ROW|STATEMENT|MIXED}
#指定二進制日誌的類型,默認爲MIXED。若是設定了二進制日誌的格式,卻沒有啓用二進制日誌,則MySQL啓動時會產生警告日誌信息並記錄於錯誤日誌中。
sync_binlog = 10
#設定多久同步一次二進制日誌至磁盤文件中,0表示不一樣步,任何正數值都表示對二進制每多少次寫操做以後同步一次。當autocommit的值爲1時,每條語句的執行都會引發二進制日誌同步,不然,每一個事務的提交會引發二進制日誌同步
max_binlog_cache_size = {4096 .. 18446744073709547520}
#二進定日誌緩存空間大小,5.5.9及之後的版本僅應用於事務緩存,其上限由max_binlog_stmt_cache_size決定。
max_binlog_stmt_cache_size = {4096 .. 18446744073709547520}
#二進定日誌緩存空間大小,5.5.9及之後的版本僅應用於事務緩存
expire_log_days = {0..99}
#設定二進制日誌的過時天數,超出此天數的二進制日誌文件將被自動刪除。默認爲0,表示不啓用過時自動刪除功能。若是啓用此功能,自動刪除工做一般發生在MySQL啓動時或FLUSH日誌時
|
注:通常建議將binlog日誌與數據文件分開存放,不但能夠提升mysql性能,還能夠增長安全性!
5.中繼日誌
說明:主要是在mysql服務器的中從架構中的從服務器上用到的,當從服務器想要和主服務器進行數據的同步時,從服務器將主服務器的二進制日誌文件拷貝到己的主機上放在中繼日誌中,而後調用SQL線程按照拷中繼日誌文件中的二進制日誌文件執行以便就可達到數據的同步
開啓的方法:(只在從服務器上開啓)
配置mysql的主配置文件:
1
2
3
4
5
6
|
relay-log = file_name #指定中繼日誌的位置和名字,默認爲host_name-relay-bin。也可使用絕對路徑,以指定非數據目錄來存儲中繼日誌
relay-log-index = file_name #指定中繼日誌的名字的索引文件的位置和名字,默認爲數據目錄中的host_name-relay-bin.index
relay-log-info-file = file_name #設定中繼服務用於記錄中繼信息的文件,默認爲數據目錄中的relay-log.info
relay_log_purge = {ON|OFF} #設定對再也不須要的中繼日誌是否自動進行清理。默認值爲ON
relay_log_space_limit =
0
#設定用於存儲全部中繼日誌文件的可用空間大小。默認爲
0
,表示不限定。最大值取決於系統平臺位數
max_relay_log_size = {
4096
..
1073741824
} #設定從服務器上中繼日誌的體積上限,到達此限度時其會自動進行中繼日誌滾動。此參數值爲
0
時,mysqld將使用max_binlog_size參數同時爲二進制日誌和中繼日誌設定日誌文件體積上限
|
6.事務日誌
說明:詳細的記錄了在什麼時間發生了何時,在哪一個時間對哪些數據進行了改變,能後實現事件的重放,通常只記錄對數據進行改變的操做,對於讀操做通常不進行記錄。事務性存儲引擎用於保證原子性、一致性、隔離性和持久性
事物日誌爲數據庫服務器實現如下功能:
(1).將隨機IO轉換爲順序IO,大大的提升了數據庫的性能,存儲的數據可能存在在磁盤的不一樣位置,下降了數據的讀取和操做性能。轉換爲順序IO的原理爲,先將數據存放在日誌文件中,而後由RDBSM的後臺將日誌中的數據存放到磁盤上,這樣就保證了存儲的數據是連續的。
(2).爲事件重放提供基礎,事務日誌詳細的記錄了時間發生的時間以及操做的數據對象,事務進程能夠根據這些信息進行時間重放。
默認的事務日誌文件有兩個,位於數據目錄下以ibdata+number結尾的數字,咱們能夠對事務日誌的位置、文件大小、增加方式進行定義,定義的方法以下:
這裏以使用支持事務的Innodb存儲引擎爲例,
配置mysql的主配置文件:
1
2
3
4
5
6
7
|
innodb_data_file_path = ibdata2:50M:autoextend
#定義數據大小的增加方式
innodb_log_group_home_dir =
/mydata/data
#設定InnoDB重要日誌文件的存儲目錄。在缺省使用InnoDB日誌相關的全部變量時,其默認會在數據目錄中建立兩個大小爲5MB的名爲ib_logfile0和ib_logfile1的日誌文件
innodb_log_files_in_group = {2 .. 100}
#設定日誌組中日誌文件的個數。InnoDB以循環的方式使用這些日誌文件。默認值爲2
innodb_log_file_size = {108576 .. 4294967295}
#設定日誌組中每一個日誌文件的大小,單位是字節,默認值是5MB。較爲明智的取值範圍是從1MB到緩存池體積的1/n,其中n表示日誌組中日誌文件的個數。日誌文件越大,在緩存池中須要執行的檢查點刷寫操做就越少,這意味着所需的I/O操做也就越少,然而這也會致使較慢的故障恢復速度
innodb_log_buffer_size = {262144 .. 4294967295}
#設定InnoDB用於輔助完成日誌文件寫操做的日誌緩衝區大小,單位是字節,默認爲8MB。較大的事務能夠藉助於更大的日誌緩衝區來避免在事務完成以前將日誌緩衝區的數據寫入日誌文件,以減小I/O操做進而提高系統性能。所以,在有着較大事務的應用場景中,建議爲此變量設定一個更大的值
|
7.滾動日誌
說明:只要是針對二進制日誌進行滾動的,對某個類型的日誌文件滾動一次就生成一個新的相對應的日誌文件,經過這種方法保證日誌文件的特定大小,從而保證服務器在對日誌文件查詢時有較高的響應能力。
滾動二進制日誌的命令:
1
|
mysql> FLUSH LOGS; #實現二進制日誌滾動
|