MariaDB——日志文件


數據庫各類日志

 查詢日志:
    記錄每一條sql語句,建議不開啟,因為如果訪問量過大,會占用相當大的資源,影響數據庫的性能。
     vim /etc/my.cnf.d/server.cnf
     general_log = ON | OFF       #查詢日志開關
     general_log_file localhost.log   #查詢日志的文件名 (/var/lib/mysql)
     log_output TABLE | FILE | NONE  #查詢日志的存儲格式

 慢查詢日志:
    執行時長超出指定時間的查詢操作。(測試命令select sleep(4);)
    slow_query_log = ON | OFF  #開啟慢查詢日志
    slow_query_log_file = localhost-slow.log  #慢查詢日志的文件路徑
    long_query_time     #慢查詢時長,默認是10s
    log_slow_rate_limit    #如果記錄的慢查詢日志非常多的話,會按照速率來記錄,默認1s記錄一個
    log_slow_verbosity=full | query_plan #記錄的詳細級別

 錯誤日志:
    mysqld啟動和關閉過程中輸出的事件信息。
    mysqld運行中產生的錯誤。
    event scheduler 運行一個event時產生的日志信息。
    在主從復制架構中的從服務器上啟動從服務器線程時產生的信息。
    log_error = /var/log/mysql_error.log  #指定錯誤日志的輸出位置。
    log_warnings 為0,表示不記錄告警信息。
    log_warnings 為1,表示告警信息寫入錯誤日志。
    log_warnings 大於1,表示各類告警信息,例如有關網絡故障的信息和重新連接信息寫入錯誤日志。(默認為2)

 二進制日志:
     針對時間點還原起着至關重要的作用。
     查看二進制日志:
     show master logs;
     show binary logs;
     show binlog events [in 'log_name']
     show master status;
    記錄導致數據改變或可能導致數據改變的sql語句。所有的增刪改,查詢沒有記錄到二進制日志文件之中。
    log_bin = OFF | ON
    log_bin_basename = /var/lib/mysql/mysql-bin
    binlog_format = statement | row | mixed  #二進制記錄格式
     statement:基於語句記錄
     row:基於行記錄
     mixed:混合記錄

 中繼日志:
    復制架構中,備服務器用於保存主服務器的二進制日志中讀取到的事件。
  
 事務日志:
    transaction log (ib_logfile0 ib_logfile1)
    innodb_buffer_pool_size   #一般設為為物理內存的3/4或者4/5
    innodb_log_files_in_group = 2 #事物日志文件的個數,默認為兩個事物日志文件
    innodb_log_file_size=50331468(48m) #事務日志文件的單個大小 48 m
    innodb_log_group_home_dir=./  #事務日志文件所在路徑,默認在mariadb的數據目錄/var/lib/mysql
    事務型存儲引擎自行管理和使用(innodb),myisam引擎不支持事物,外鍵,行級鎖。
     redo log:重做日志
     undo log:撤銷日志



查詢日志:
  show variables like '%general_log%';
  #查看general_log與general_log_file的值,默認general_log狀態為OFF
  show variables like '%log_output%';
  #查看log_output格式

打開查詢日志:
   [server]
   general_log=1
  show variables like '%general_log%';
  #進入/var/lib/mysql查看查詢日志
  tail -f localhost.log
  #記錄每一條你的sql語句
 
慢查詢日志:
  執行時長超出指定時間的查詢操作。
  #需要注意的是:記錄太多,記錄太詳細也會對數據庫的性能造成影響。
  [server]
  slow_query_log=1
  long_query_time=4
  show variables like '%slow%';
  #查看slow_query_log是否開啟,查看slow_query_log_file的名稱
  show variables like '%long%';
  #查看long_query_time的時間是4s。
  tail -f localhost-slow.log
  select sleep(5); #數據庫執行之后會被記錄到慢查詢日志
 
二進制日志:
  show master logs;  #如果提示你沒有在使用binary logging那么說明你沒有開啟二進制日志。
  [server]
  log_bin=mysql-bin
  #重啟數據庫
  show binlog events in ‘mysql-bin.000001’;  #只是記錄了一些版本信息,查看內容需要用到mysqlbinlog
  二進制日志文件無法使用vim十進制來查看,只能使用mysql提供的二進制文件查看工具——mysqlbinlog
  mysqlbinlog mysql-bin.000001
  show master logs;  #可以查看到現在使用的二進制文件和文件的大小
  #執行一些sql命令:create database kkk character set utf8;
  #show master logs進行查看二進制的文件大小發生了變化
  #mysqlbinlog mysql-bin.000001查看二進制文件的記錄,會發現其中記錄了剛剛的sql語句。
  show variables like ‘%binlog_format%';
  #查看二進制日志的記錄格式,默認是mixed。(statement按語句記錄|row按行記錄|mixed混合)
    statement
    基於語句來記錄——當你已經有相同的表的時候,就會發生還原不了的情況。
    但是它能夠很好的節省空間,你只需要記錄一條sql語句。
    row
    基於行記錄——也就是基於數據記錄。
    還原就避免了基於語句記錄的缺點。
    但是非常占用空間。
    mixed
    混合模式——數據庫會自己去判定到底記錄sql語句還是按行來記錄。
    它是一種折中模式——既可能出現兩者的缺點,又在某種程度上規避了這種缺點。
  sql_log_bin=1|0    #是否啟用二進制日志
  log_bin_index=PATH   #二進制日志索引位置
  sync_binlog=1|0    #設定是否啟用二進制日志同步功能
  max_binlog_size=SIZE  #單個二進制文件最大體積,默認為1G
  expire_logs_days=0   #超過多少天就清除二進制日志,默認為0,代表不啟用此功能
  #mysql-bin.index使用十進制存儲可以使用cat來查看。
  二進制日志手動滾動:flush logs;
  二進制日志文件的構成:
   日志文件:mysql-bin.000001 二級制格式
   索引文件:mysql-bin.index  索引文件
  #查看二進制日志文件的大小:
  show variables like ’%max_binlog_size%';  #其值剛好一個G,如果超過1G就會滾動生成一個新的。
  #查看索引文件的路徑
  show variables like ‘%log_bin_index%’;
  #sync_binlog=1|0    #設定是否啟用二進制日志同步功能
  數據庫支持並發,但是二進制文件不支持。
  開啟為1的話,立馬寫入,就會涉及io操作,會影響數據庫的性能,但是數據安全。
  如果為0:等到資源空閑時寫入,保障了性能。
  如果數據庫down了,設置為1沒有丟失,設置為0可能會有數據的丟失。
  #查看二進制日志的過期刪除時間
  show variables like ‘%expire_logs_days%’;
  如果要刪除,一般不設置自動刪除,tar打包自己手動刪除。
 
二進制日志的滾動:
  自動滾動:如果記錄的日志大小超過最大值,那么會生成一個新的二進制日志。mysql-bin.000001——>mysql-bin.000002——>mysql-bin.000003
  手動滾動:
   flush logs;    #手動滾動二進制日志
   show master logs;  #查看二進制日志
   show master status;  #查看當前使用二級制日志文件
  在重啟數據庫之后二進制日志也會滾動。
  #需要注意的是:日志的滾動只能往前,無法向后,因為這樣的話還原就會有問題。二級制文件不要隨意刪除。
  #日志滾動之后,mysql-bin.index會自動幫你記錄到文件中。
  #二進制日志是數據庫之中最重要的日志。
  #二級制日志的記錄格式:時間——server id——end_log_pos——CRC32——thread id——exec_time——error_code
  #sever id 如果你做了數據庫的集群那么id號不能一樣,它是一種身份標識。
  #如果是主從:都要有一個server id ,如果都為1——它會以為是自己,就不會同步了。
  #end_log_pos 日志的結束位置;thread id 執行事件的線程id號;exec_time 從執行(語句的時間戳)到寫入花費的時間。
  #error_code=0 錯誤代碼
 
基於二進制日志還原數據:
  兩種還原方式——基於位置和基於時間
  還原工具——mysqlbinlog
     #--start-datetime=
     #--stop-datetime=
     #--start-position=
     #--stop-position=
 
中繼日志:
  復制架構中,備服務器用於保存主服務器的二進制日志中讀取到的事件。
  在復制架構之中,master的寫操作記錄到二進制文件之中,slave來同步master的寫操作,具體過程如下:
   1、slave的 I/O thread請求master的二進制文件
   2、master通過dump thread將二進制的內容發送到salve
   3、slave將接受到的內容存放到自己的中繼日志之中
   4、slave在通過SQL thread進行回放,同步到自己的數據庫中
 
事物日志:
  show variables like ‘%buffer_pool%’; #查看buffer_pool的大小
  buffer_pool對於數據庫的性能而言,起着重要的作用。搭好數據庫,第一件事就要改這個參數。
  事務日志是成組來的,默認是兩個交替進行。
  也是非常重要的一個日志。是由innodb自己來管理的。
  大致過程如下:
   1、數據庫client的操作,默認開起事務且自動提交,事務操作會寫到事務日志之中
   2、再由事務日志同步到磁盤之中
   3、將磁盤中的內容再讀到內存,也就是buffer_pool,客戶端請求數據就直接到內存之中獲取。
  數據庫down了,起來之后,會檢查事務日志,有哪些事務是提交了的,但沒有寫入磁盤,做redo操作。
  沒有提交的事務,那么做undo操作——rollback——自動幫你撤銷。
  mysql的進程是mysqld
 
錯誤日志:
  錯誤日志開啟之后,如果不指定文件的路徑, 默認在系統日志/var/log/messages
  這個時候記錄的日志文件需要注意它的權限,可能會因為權限問題導致無法寫入。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM