MySQL-日志

MySQL-日志

  • 前言
  • 一、錯誤日志(error log)
  • 二、慢查詢日志(slow query log)
  • 三 、一般查詢日志(general log)
  • 四、 事務日志
    • 重做日志(redo log)
    • 回滾日志(undo log)
  • 五、 二進制日志(bin log)/歸檔日志 => 數據同步和數據恢復
  • 總結


前言

日志用來做什么?

記錄了很多關于程序運行狀態的信息(正常、出錯…)

  • 用于排錯
  • 了解MySQL性能(速度)運行情況…
  • 數據的備份和恢復

一、錯誤日志(error log)

記錄MySQL啟動、關閉、運行過程中的錯誤信息
配置方式
my.cnf文件

[mysqld]
log-error=/var/log/mysqld.log

查看錯誤日志路徑

root@test 15: 38>show variables like 'log_error';
±--------------±---------------------------+
| Variable_name | Value |
±--------------±---------------------------+
| log_error | /data/mysql/mysqld3308.err |
±--------------±---------------------------+
1 row in set (0.00 sec)


二、慢查詢日志(slow query log)

記錄MySQL中響應時間超過閾值的SQL語句信息

作用:記錄消耗時間較長的SQL語句,為數據庫性能提升提供了線索(DBA/開發人員)
配置方式

my.cnf

[mysqld]
slow_query_log=1 # on
slow_query_log_file=/data/mysql/mysqld_query.log
long_query_time=10 # 默認10s,如果sql語句執行超過10s,將會記錄下來

分析慢日志:mysqldumpslow

查看與慢查詢時間閾值

root@test 15: 48>show variables like '%long_query%';
±----------------±----------+
| Variable_name | Value |
±----------------±----------+
| long_query_time | 10.000000 |
±----------------±----------+

慢查詢日志開關及路徑

root@test 15: 48>show variables like '%slow_query%';
±--------------------±-----------------------------+
| Variable_name | Value |
±--------------------±-----------------------------+
| slow_query_log | ON |
| slow_query_log_file | /data/mysql/mysqld_query.log |
±--------------------±-----------------------------+


三 、一般查詢日志(general log)

記錄客戶端連接服務端的信息以及執行SQL語句的信息
執行的SQL命令,執行結果(成功、失敗原因)
從性能考慮,默認沒有開啟

[mysqld]
general_log=1
general_log_file=/data/mysql/mysqld_general.log

查看一般查詢日志開關及路徑

root@test 15: 48>show variables like '%general_log%';
±-----------------±-------------------+
| Variable_name | Value |
±-----------------±-------------------+
| general_log | OFF |
| general_log_file | /data/mysql/db.log |
±-----------------±-------------------+


四、 事務日志

重做日志(redo log)

是MySQL存儲引擎InnoDB的事務日志
可以讓MySQL擁有崩潰恢復的能力
比如MySQL實例掛了、宕機了,重啟時InnoDB使用redo log恢復數據保持數據的一致性

redo log時當做更新操作時,就會寫的日志。

查看 InnoDB 存儲引擎中與刷盤策略相關的配置參數,默認為1

show variables like '%innodb_flush%';
innodb_flush_log_at_trx_commit= 1

當值為1時表示,只要事務提交成功,將redo log寫入磁盤
即使系統崩潰,也不會丟失已提交的事務

當值為2時表示,當事務提交時,只把redo log buffer寫入page cache
定期刷盤,若操作系統崩潰,可能丟失緩存中的數據

當值為0時表示,每秒刷寫一次 redo log 到磁盤,事務提交時不主動刷盤。若系統崩潰,可能丟失最后 1 秒內已提交的事務

redo log 文件的大小?
大小固定,循環寫入格式

為什么這么設計?
因為redo log記錄的數據頁上的修改,如果buffer pool中數據已經刷盤(寫入磁盤),日志失效了。因此可以將其進行覆蓋


回滾日志(undo log)

是MySQL存儲引擎InnoDB的
起到回滾的作用,保證事務的原子性

1->2
當執行rollback時,2->1

當修改操作時,記錄下對應所需要的信息
插入一條記錄:至少記錄這條記錄主鍵 -> 回滾:找到主鍵刪除
刪除一條記錄:記錄下這條記錄的所有信息 -> 回滾:將信息整理成INSERT SQL
修改一條記錄:主鍵,舊值 -> 回滾:Update為舊值


五、 二進制日志(bin log)/歸檔日志 => 數據同步和數據恢復

數據以二進制方式存儲在磁盤上邏輯日志,記錄了用戶對數據庫寫操作

二進制日志能完整記錄數據變更歷史,默認沒有開啟
表結構/數據 增、刪、改 存儲過程、函數

二進制日志的作用

  • 備份恢復
  • 主從復制
  • 日志審計場景(被攻擊)

查詢是否開啟了二進制日志

root@test 16: 57>select @@log_bin;
±----------+
| @@log_bin |
±----------+
| 1 |
±----------+

二進制日志配置

[mysqld]
log_bin=/data/mysql/mysqld_binlog
binlog_format=ROW

STATEMENT:記錄SQL語句
ROW: 記錄每一行數據更改
MIXED:以上兩者的混合

查看二進制日志的記錄格式

root@test 17: 00>show variables like 'binlog_format';
±--------------±------+
| Variable_name | Value |
±--------------±------+
| binlog_format | ROW |
±--------------±------+

二進制日志很大,日志切割

查看與二進制日志大小限制相關的配置參數

root@test 17: 01>show variables like '%max_binlog%';
±---------------------------±---------------------+
| Variable_name | Value |
±---------------------------±---------------------+
| max_binlog_cache_size | 18446744073709547520 |
| max_binlog_size | 1073741824 | 1G
| max_binlog_stmt_cache_size | 18446744073709547520 |
±---------------------------±---------------------+

xxx.index => binlog目錄
xxx.00001 => binlog文件

-rw-r----- 1 mysql mysql 157 8月 9 17:00 mysqld_binlog.000001
-rw-r----- 1 mysql mysql 33 8月 9 17:00 mysqld_binlog.index

查看有哪些binlog文件

root@test 17: 04>show master logs;
±---------------------±----------±----------+
| Log_name | File_size | Encrypted |
±---------------------±----------±----------+
| mysqld_binlog.000001 | 180 | No |
| mysqld_binlog.000002 | 157 | No |
±---------------------±----------±----------+
2 rows in set (0.00 sec)

root@test 17: 05>show binary logs;
±---------------------±----------±----------+
| Log_name | File_size | Encrypted |
±---------------------±----------±----------+
| mysqld_binlog.000001 | 180 | No |
| mysqld_binlog.000002 | 157 | No |
±---------------------±----------±----------+
2 rows in set (0.00 sec)

查看當前binlog文件

root@test 17: 05>show master status\G
*************************** 1. row ***************************
File: mysqld_binlog.000002
Position: 157
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

查看二進制日志

show binlog events in 'mysqld_binlog.000002' \G

*************************** 17. row ***************************Log_name: mysqld_binlog.000002          日志文件名 Pos: 1085                          pos起始位置Event_type: Xid                           事件類型Server_id: 1                             哪臺服務在操作
End_log_pos: 1116                          pos結束位置Info: COMMIT /* xid=80 */           操作的內容

查看指定二進制日志文件

root@test 17: 09>show binlog events in 'mysqld_binlog.000002' from 924\G

解析和查看二進制二進制日志文件

mysqlbinlog -vv /data/mysql/mysqld_binlog.000002

-vv 選項表示以詳細模式輸出,會顯示更完整的日志內容(包括行級變更細節)

自動清除策略

root@test 17: 18> show variables like '%expire_logs_days%';
±-----------------±------+
| Variable_name | Value |
±-----------------±------+
| expire_logs_days | 0 |
±-----------------±------+

設置為自動保留 7 天
[mysqld]
expire_logs_days=7

刪除所有二進制日志

reset master

二進制如何寫入磁盤

  1. 什么寫二進制日志(INSERT/DELETE/UPDATE)
  2. 當執行以上操作 -> binlog_buffer -> 磁盤
    sync_binlog=0:由操作系統來決定什么時候寫入磁盤
    sync_binlog=1:每次事務提交時都會調用fsync,刷新binlog寫入磁盤
    sync_binlog=N:每N次事務提交時都會調用fsync,刷新binlog寫入磁盤

查看二進制日志的同步策略配置

root@test 17: 20>show variables like "sync_binlog";
±--------------±------+
| Variable_name | Value |
±--------------±------+
| sync_binlog | 1 |
±--------------±------+
1 row in set (0.00 sec)


總結

Innodb引擎使用redo log保持事務持久性,undo log保證事務原子性
數據備份、集群(主備、主主、主從)都離不開binlog, 負責同步數據,保證數據一致性
當需要查找系統瓶頸時,可以通過slow query log分析
錯誤日志、一般查詢日志

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95106.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95106.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95106.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

嵌入式C語言編程:策略模式、狀態模式和狀態機的應用

概述 在沒有面向對象語法的C語言中,策略(Strategy)模式和狀態(State)模式都通過“上下文 接口”組合來模擬多態。 它們在代碼結構上幾乎一致,但設計意圖和應用場景卻差異很大。 本文分三部分深入剖析&…

人工智能、機器學習、深度學習:2025技術革命的深度解析

目錄 人工智能、機器學習、深度學習:技術革命的深度解析 引言 第一部分:人工智能的起源與演進 1.1 人工智能的定義 1.2 人工智能的歷史 1.3 人工智能的關鍵概念 a.知識表示(Knowledge Representation) b.搜索算法&#xf…

【Python】常用內置模塊

1.os 文件目錄 import os# 創建文件夾 os.mkdir(dir) # 判斷文件是否存在 os.path.exists(path) # 列出文件夾下文件列表 os.listdir(dir)""" 常用 """ # 當前文件相對路徑 os.getcwd()# 當前文件絕對路徑 os.path.abspath(__file__)# 當前文…

(Python)爬蟲進階(Python爬蟲教程)(CSS選擇器)

源代碼:#導入庫 import requests from bs4 import BeautifulSoup import pandas as pd#爬蟲函數 def scrape_books():#1.基本網址連接base_url "http://books.toscrape.com"#2.獲取基本網址responserequests.get(base_url)#3.檢查是否正常訪問if respons…

第七節 自然語言處理與Bert

自然語言處理與BERT模型:從基礎到實踐入門 自然語言處理(NLP)的核心目標之一是讓計算機理解人類語言的語義和上下文。本文將從基礎的字詞表示出發,逐步解析傳統模型的局限性、Self-attention的突破性思想,以及BERT如何…

攻擊者瞄準加密技術的基礎:智能合約

雖然利用許多智能合約中的安全漏洞已經成為網絡攻擊者的長期目標,但越來越多的安全公司開始關注使用欺詐性或混淆的智能合約從加密貨幣賬戶中竊取資金的騙局。 根據網絡安全公司 SentinelOne 本周發布的分析報告,在最近一次引人注目的攻擊中&#xff0c…

基于開源AI大模型、AI智能名片與S2B2C商城小程序的零售智能化升級路徑研究

摘要:在零售業數字化轉型浪潮中,人工智能技術正從“輔助工具”向“核心生產力”演進。本文聚焦開源AI大模型、AI智能名片與S2B2C商城小程序的協同應用,提出“數據感知-關系重構-生態協同”的三維創新框架。通過分析智能傳感、動態畫像與供應鏈…

機器學習 樸素貝葉斯

目錄 一.什么是樸素貝葉斯 1.1 從 “概率” 到 “分類” 二.樸素貝葉斯的數學基礎:貝葉斯定理 2.1 貝葉斯定理公式 2.2 從貝葉斯定理到樸素貝葉斯分類 2.3 “樸素” 的關鍵:特征獨立性假設 三、樸素貝葉斯的三種常見類型 3.1 高斯樸素貝葉斯&…

A Logical Calculus of the Ideas Immanent in Nervous Activity(神經網絡早期的M-P模型)

哈嘍,各位朋友大家上午好!今天我們要一起啃下這篇神經科學與邏輯學交叉領域的奠基之作——McCulloch和Pitts的《A Logical Calculus of the Ideas Immanent in Nervous Activity》。這篇論文篇幅不長,但每一個定理、每一個假設都像精密齒輪&a…

大語言模型提示工程與應用:提示工程-提升模型準確性與減少偏見的方法

語言模型可靠性優化 學習目標 在本課程中,我們將學習通過提示工程提升模型事實準確性、減少偏見的有效方法。 相關知識點 語言模型可靠性優化 學習內容 1 語言模型可靠性優化 1.1 事實準確性增強 LLM可能生成看似合理但實際虛構的內容。優化策略包括&#x…

遇到前端導出 Excel 文件出現亂碼或文件損壞的問題

1. 檢查后端返回的數據格式確認接口響應:確保后端返回的是二進制流(如 ArrayBuffer)或 Base64 編碼的 Excel 文件,而非 JSON 字符串。用瀏覽器開發者工具(Network 標簽)檢查接口響應類型:正確的…

2025年Cloudflare WAF防護機制深度剖析:5秒盾繞過完全指南

2025年Cloudflare WAF防護機制深度剖析:5秒盾繞過完全指南 技術概述 Cloudflare作為全球領先的CDN和網絡安全服務提供商,其WAF(Web Application Firewall)防護系統已經成為現代Web安全的標桿。特別是其標志性的"5秒盾"…

【Android調用相冊、拍照、錄像】等功能的封裝

關于調用Android項目 關于Android中調用相機拍照、錄像,調用相冊選圖等是比較繁瑣的,為了減少代碼冗余,肯定需要封裝成工具類,最終使用大概如下,大部分代碼使用Java編寫,因為需要照顧到不適用kotlin的伸手…

Git 分支管理:從新開發分支遷移為主分支的完整指南

問題背景 我在使用 Git 進行開發時,由于原有的主分支遭到了污染,不得已在多方嘗試之后,決定替換原有的主分支。創建一個新分支并完成了重要修改: 基于提交 0fcb6df0f5e8caa3d853bb1f43f23cfe6d269b18 創建了 new-development 分支…

nginx常見問題(四):端口無權限

當 Nginx 日志報錯 bind() to 80 failed (13: Permission denied) 時,這通常是由于權限不足導致 Nginx 無法綁定到 80 端口(該端口為系統特權端口)。以下是詳細的問題分析與解決方案:一、問題原因分析80 端口屬于 系統特權端口&am…

【線性代數】線性方程組與矩陣——(3)線性方程組解的結構

上一節:【線性代數】線性方程組與矩陣——(2)矩陣與線性方程組的解 總目錄:【線性代數】目錄 文章目錄9. 向量組的線性相關性與線性方程組解的結構9.1. 向量組及其線性組合9.2. 向量組的線性相關性9.3. 向量組的秩9.4. 線性方程組…

機器學習-----K-means算法介紹

一、為什么需要 K-Means?在監督學習中,我們總把數據寫成 (x, y),讓模型學習 x → y 的映射。 但現實中很多數據根本沒有標簽 y,例如:啤酒:熱量、鈉含量、酒精度、價格用戶:訪問時長、點擊次數、…

Spring Security自動處理/login請求,后端控制層沒有 @PostMapping(“/login“) 這樣的 Controller 方法

一:前言 (1)Spring Security概念: Spring Security 是屬于 Spring 生態下一個功能強大且高度可定制的認證和授權框架,它不僅限于 Web 應用程序的安全性,也可以用于保護任何類型的應用程序。 &#xff08…

idea開發工具中git如何忽略編譯文件build、gradle的文件?

idea開發工具中: git顯示下面這個文件有變更: ~/Documents/wwwroot-dev/wlxl-backend/java/hyh-apis/hyh-apis-springboot/build/resources/main/mapping/AccountRealnameMapper.xml 我git的根路徑是: ~/Documents/wwwroot-dev/wlxl-backend/…

狀態機淺析

狀態機是處理狀態依賴型行為的高效工具,通過結構化建模狀態轉換,解決了傳統條件判斷的冗余和混亂問題。它在設備控制、流程管理、協議解析等場景中表現優異,核心優勢在于邏輯清晰、可擴展性強和易于調試。 一、介紹 1. 概念 狀態機&#x…