數據庫的常用日志


本章內容:

  1. 查詢日志
  2. 慢查詢日志 ***
  3. 錯誤日志
  4. 二進制日志 *****
  5. 中繼日志
  6. 事務日志 ****

mariadb 日志文件默認路徑:/var/lib/mysql


查詢日志

  1. 數據庫的查詢日志記錄了每一條sql語句;
  2. 訪問量較大時建議不開啟,因為設想一下如果同時又幾百萬個用戶同時訪問數據庫,查詢日志的記錄就會占用大量的系統開銷,直接影響服務器性能;

開啟方式

vim /etc/my.cnf.d/server.cnf 
	general_log = ON| OFF            #查詢日志開關
	general_log_file localhost.log            #查詢日志的文件名字(/var/lib/mysql)
	log_output TABLE | FILE | NONE       #查詢日志的存儲形式

慢查詢日志* * * *

  1. 它用來記錄在mariadb中響應時間超過閥值的語句。具體指運行時間超過long_query_time值的SQL語句,則會被記錄到慢查詢日志中。
  2. 慢查詢日志是做數據優化可查的分析項
slow_query_log = OFF|ON           #開啟慢查詢日志
slow_query_log_file = LOCALHOST-SLOW.log        #慢查詢日志的文件路徑
long_query_time               #慢查詢時長;默認是10s
log_slow_rate_limit           #如果要記錄的慢查詢日志非常多的話,會按照速率來記錄,默認1秒記錄一個
log_slow_verbosity=full | query_plan         #記錄的詳細級別

第一步:查看默認設置

MariaDB [mysql]> show variables like '%slow_query%';
+---------------------+--------------------+
| Variable_name       | Value              |
+---------------------+--------------------+
| slow_query_log      | OFF                |
| slow_query_log_file | localhost-slow.log |
+---------------------+--------------------+

查看默認等待時長

MariaDB [(none)]> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+

第二步:編輯配置文件開啟慢查詢日志

╭─root@localhost.localdomain ~  
╰─➤  vim /etc/my.cnf.d/server.cnf 

[server]
slow_query_log=1
long_query_time=3

第三步:可以用測試命令:select sleep(4)


錯誤日志

  1. 錯誤日志包含了mariadb 啟動和關閉的次數.
  2. 包含了錯誤,警告,和注釋的相關診斷信息.
  3. mariadb 在運行時,如果你的mariadb 中的表需要自動檢查或者修復.這些信息都會寫入到error log 里面.
  4. 在主從復制架構中的從服務器上啟動從服務器線程時產生的信息
  5. event scheduler 運行一個event時產生的日志信息
log_error = /var/log/mysql_error.log#指定錯誤日志的輸出位置
log_warnings 為0, 表示不記錄告警信息。
log_warnings 為1, 表示告警信息寫入錯誤日志。
log_warnings 大於1, 表示各類告警信息,例如有關網絡故障的信息和重新連接信息寫入錯誤日志。(默認為2)
MariaDB [mysql]> show variables like '%log_warning%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_warnings  | 2     |
+---------------+-------+

二進制日志* * * * *

  1. 二進制日志:記錄着所有更改數據的語句,可以用於數據的恢復,並且是針對時間點還原
  2. 二進制日志:是在數據庫中起着至關重要的作用(主從架構,數據備份,數據恢復等)
log_bin = OFF | ON
log_bin_basename = /var/lib/mysql/mysql-bin	
sql_log_bin=1|0    #是否啟用二進制日志
log_bin_index=PATH    #二進制日志索引位置
sync_binlog=1|0     #設定是否啟動二進制日志同步功能
max_binlog_size=SIZE      #單個二進制文件最大體積,默認為1G
expire_logs_days=0       #超過多少天就清除二進制日志,默認為0,代表不啟用此功能
binlog_format=STATEMENT|ROW|MIXED       
#二進制記錄格式(STATEMENT:基於“語句”記錄; ROW:基於“行”記錄 ;MIXED:讓系統自行判定該基於哪種方式進行)

開啟二進制日志

╭─root@localhost.localdomain ~  
╰─➤  vim /etc/my.cnf.d/server.cnf

[server]
log_bin=mysql-bin

二進制日志文件內容查詢

用數據庫自帶的日志查看工具mysqlbinlog

╭─root@localhost.localdomain /var/lib/mysql  
╰─➤  mysqlbinlog mysql-bin.000001 

查看position(數據的位置)

#手動滾動二進制日志文件

MariaDB [mysql]> flush logs;
Query OK, 0 rows affected (0.006 sec)


#查看所有二進制日志文件

MariaDB [mysql]> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       375 |
| mysql-bin.000002 |       371 |
+------------------+-----------+

#查看當前位置

MariaDB [mysql]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      371 |              |                  |
+------------------+----------+--------------+------------------+

二進制日志文件滾動

  1. flush logs;
  2. 文件超出指定大小
  3. service mariadb restart

客戶端命令工具:mysqlbinlog

通過二進制日志恢復還原數據庫文件

mysqlbinlog [options] log_file ...
--start-datetime=
--stop-datetime=
		
		
--start-position=
--stop-position=

中繼日志

中繼日志:復制架構中,備服務器用於保存主服務器的二進制日志中讀取到的事件


事務日志* * * *

InnoDB的事務日志主要分為redo log(重做日志,提供前滾操作)和undo log(回滾日志,提供回滾操作),為了最大程度上減少數據寫入時io問題,在存儲引擎修改表的數據時,會將數據從磁盤拷貝到內存中,然后修改內存中的數據拷貝,再將修改行為持久化到磁盤中(先寫redo log buffer(日志緩沖區)(PS:這塊我會在下文詳細說明),再定期批量寫入),而不用每次將修改的數據本身持久化到硬盤中.

事務日志參數

innodb_buffer_pool_size        			一般設置成為物理內存的3/4,或者4/5
innodb_log_files_in_group = 2  			事務日志文件的個數,默認為2個事務日志文件
innodb_log_file_size = 50331648(48m)	事務日志文件的單個大小48m
innodb_log_group_home_dir = ./ 			事務日志文件的所在路徑,默認mariadb的數據目錄/var/lib/mysql

查看

MariaDB [mysql]> show variables like '%innodb_log%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| innodb_log_buffer_size      | 16777216 |
| innodb_log_checksums        | ON       |
| innodb_log_compressed_pages | ON       |
| innodb_log_file_size        | 50331648 |
| innodb_log_files_in_group   | 2        |
| innodb_log_group_home_dir   | ./       |
| innodb_log_optimize_ddl     | ON       |
| innodb_log_write_ahead_size | 8192     |
+-----------------------------+----------+
8 rows in set (0.002 sec)

# -- 緩沖池(buffer_pool)大小非常重要

MariaDB [mysql]> show variables like '%innodb_buffer_pool_size%';
+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.001 sec)

事務日志推薦文章:https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html


免責聲明!

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



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