欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL?Server?層四個日志詳解

 更新時間:2022年03月31日 11:07:55   作者:BugMaker-shen  
這篇文章主要介紹了MySQL?Server?層四個日志,包括錯誤日志,查詢?nèi)罩?,二進制日志及慢查詢?nèi)罩?,本文結(jié)合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下

一、MySQL Server層日志簡介

一個mysql client發(fā)起一個連接請求,處理請求的過程如下圖所示:

MySQL日志是在MySQL server上生成的,不管更改哪個存儲引擎,這些日志都是需要有的,包括:

  • 錯誤日志:記錄mysqld服務(wù)運行過程中出現(xiàn)的cordump、error、exception等
  • 查詢?nèi)罩荆河涗浛蛻舳怂械腟QL。由于上線項目的SQL太多了,開啟查詢?nèi)罩綢O太多導(dǎo)致MySQL效率低下,我們一般都不會開啟,只有調(diào)試時才開啟
  • 二進制日志:記錄數(shù)據(jù)的更改(insert、update、delete、alter …),非常重要,可用于數(shù)據(jù)恢復(fù),主從復(fù)制。主從復(fù)制技術(shù)依賴于log_bin,主庫所有的更改操作都記錄在log_bin里,從庫從binlog讀取主庫所有的操作,自己再執(zhí)行一遍。
  • 慢查詢?nèi)罩荆河涗浟艘恍﹫?zhí)行時間超過指定值的SQL語句,可供開發(fā)人員分析耗時SQL,從而針對性優(yōu)化

查看日志相關(guān)變量

二、配置文件參數(shù)

my.cnf

通過set方法只能影響當(dāng)前session,如果想要配置永久有效,需要在配置文件上進行設(shè)置,然后重啟MySQL服務(wù),就可以永久生效

linux下重啟mysqld服務(wù)的命令:sudo service mysqld restart

我們查看一下配置文件/etc/mysql/my.cnf

  • 給出log-error的路徑就是開啟了log-error,如果不自定義log-error的路徑,默認(rèn)在data_dir
  • 在開啟log-bin=mysql-bin的同時還要加上server-id=1(表示當(dāng)前MySQL Server的身份),否則sudo service mysqld restart無法重啟服務(wù)
  • 設(shè)置過期的時間expire_log_days,因為總有一天磁盤會被這個日志占滿,導(dǎo)致服務(wù)器不可運行,超過設(shè)置時間后日志文件會被刪除

三、錯誤日志

錯誤日志是 MySQL 中最重要的日志之一,它記錄了當(dāng) mysqld 啟動和停止,以及服務(wù)器在運行過程中發(fā)生任何嚴(yán)重錯誤(cordump,error,exception…)時的相關(guān)信息。當(dāng)數(shù)據(jù)庫出現(xiàn)故障導(dǎo)致無法正常使用時,可以首先查看此日志

mysqld 使用的錯誤日志名為 host_name.err(host_name 為主機名) ,并默認(rèn)在參數(shù)data_dir(數(shù)據(jù)目錄)指定的目錄中寫入日志文件

四、查詢?nèi)罩?/h2>

查詢?nèi)罩居涗浟薱lient發(fā)送的所有SQL語句

由于上線項目sql特別多,開啟查詢?nèi)罩綢O太多導(dǎo)致MySQL效率低,我們一般都不會開啟,只有在調(diào)試時才開啟,比如通過查看sql發(fā)現(xiàn)熱點數(shù)據(jù)從而可以進行緩存

show global variables like '%genera%';

五、二進制日志

不是明文,不能直接查看,需要通過mysqlbinlog工具(mysql原生自帶)解析binlog日志文件

二進制日志(BINLOG)記錄了所有的 DDL(數(shù)據(jù)定義語言)語句和 DML(數(shù)據(jù)操縱語言) 語句,但是不包括數(shù)據(jù)查詢語句(不記錄select操作,記錄的是數(shù)據(jù)庫的更改操作

語句以“事件”的形式保存,它描述了數(shù)據(jù)的更改過程。二進制日志對于災(zāi)難時的數(shù)據(jù)恢復(fù)起著極其重要的作用。

兩個重要的應(yīng)用場景:主從復(fù)制、數(shù)據(jù)恢復(fù)

主從復(fù)制:主庫所有的更新操作(update、delete、insert、alter …)都記錄在binlog中,從庫讀主庫的binlog,把binlog的所有操作在從庫上在進行一遍

查看當(dāng)前的binlog:

show binary logs;  -- show master logs;

binlog默認(rèn)在MySQL的data_dir下

1. 演示binlog記錄更改

我們先刷新一下,生成一個新的binlog

切換數(shù)據(jù)庫

更改一下數(shù)據(jù)

再次查看binlog

我們發(fā)現(xiàn)日志的filesize和剛才的不一樣了,肯定記錄我們剛才的數(shù)據(jù)更改操作

如果我們直接cat日志查看,會發(fā)現(xiàn)不是明文,無法直接查看

我們需要通過mysqlbinlog進行查看,如下:

mysqlbinlog --no-defaults --database=school --base64-output=decode-rows -v --start-datetime='2022-03-01 00:00:00' --stop-datetime='2022-03-31 00:00:00' mysql-bin.000001 | more

database:指定查看某個庫的更改base64-output:binlog解碼方式start-datetime & stop-datetime:指定查看某個時間段內(nèi)的更改,不寫則查看所有的更改mysql-bin.000001:查看的二進制日志文件

我們查看一下binlog

@1、@2、@3、@4:表示數(shù)據(jù)庫表的4個字段server id:表示我們在my.cnf中設(shè)置的id,用于標(biāo)識當(dāng)前MySQL的身份at 565、at679:指的是當(dāng)前事件在binlog記錄的位置,數(shù)據(jù)恢復(fù)的時候使用

2. 演示binlog數(shù)據(jù)恢復(fù)

現(xiàn)在創(chuàng)建數(shù)據(jù)庫mytest,并創(chuàng)建表,添加數(shù)據(jù)

假如現(xiàn)在有人把庫刪除了:

這時mytest庫的所有表和數(shù)據(jù)都沒有了,然而這些操作都會記錄在二進制日志binlog里面

理論上來說,可以從binlog把丟失的數(shù)據(jù)恢復(fù)出來。由于恢復(fù)過程也是對數(shù)據(jù)的修改,所以恢復(fù)過程產(chǎn)生的日志也要記錄在binlog中,這就需要我們指定binlog恢復(fù)區(qū)間

我們現(xiàn)在知道,我們建庫、建表、插入數(shù)據(jù)的操作都記錄在mysql-bin.00003文件中

我們現(xiàn)在刷新一下,生成一個新的binlog,這就可以讓我們接下來數(shù)據(jù)恢復(fù)的操作被記錄在mysql-bin.00004文件中,而不會在追加到mysql-bin.00003

我們先查看mysql-bin.00003,找需要恢復(fù)的區(qū)間

從mysql-bin.000003中拿出區(qū)間內(nèi)所有的操作,通過管道放到MySQL shell上執(zhí)行

查看一下當(dāng)前的庫

再查看一下表和數(shù)據(jù)

到這里,數(shù)據(jù)已經(jīng)全部恢復(fù)了

我們不僅可以通過binlog記錄的位置,得到需要恢復(fù)的區(qū)間,也可以通過binlog記錄的時間得到需要恢復(fù)的區(qū)間

參數(shù)為:start-datetime、stop-datetime

由于binlog有一個過期時間,過期的日志數(shù)據(jù)都會進行備份,沒有過期的數(shù)據(jù)可以直接通過binlog恢復(fù),如果需要恢復(fù)過期的數(shù)據(jù),通過以下命令即可:

mysql> source ~/data.sql
$cat ~/data.sql | mysql -u  root -p

六、慢查詢?nèi)罩?/h2>

MySQL可以設(shè)置慢查詢?nèi)罩?,?dāng)SQL執(zhí)行的時間超過我們設(shè)定的時間,那么這些SQL就會被記錄在慢查詢?nèi)罩井?dāng)中

我們通過查看日志,用explain分析這些SQL的執(zhí)行計劃,來判定為什么效率低下,是沒有使用到索引?還是索引本身創(chuàng)建的有問題?或者是索引使用到了,但是由于表的數(shù)據(jù)量太大,花費的時間就是很長,那么此時我們可以把表分成n個小表,比如訂單表按年份分成多個小表等

慢查詢?nèi)罩鞠嚓P(guān)的參數(shù)如下所示:

慢查詢?nèi)罩居涗浟税袌?zhí)行時間超過參數(shù) long_query_time(單位:秒)所設(shè)置值的 SQL語句的日志,在MySQL上用命令可以查看,如下:

這個值是可以修改的:

現(xiàn)在修改成執(zhí)行時間超過1秒的SQL都會被記錄在慢查詢?nèi)罩井?dāng)中!可以設(shè)置為0.01秒,表示10毫秒

慢查詢?nèi)罩?,默認(rèn)名稱是host_name-slow.log,存放在MySQL的data_dir下,內(nèi)容格式顯示大致如下:

show profiles命令可有查看sql詳細的運行時間,全局變量的名字是:profiling

首先需要:set profiling=on

到此這篇關(guān)于MySQL Server 層四個日志的文章就介紹到這了,更多相關(guān)MySQL Server層日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL的幾種安裝方式及配置問題小結(jié)

    MySQL的幾種安裝方式及配置問題小結(jié)

    這篇文章主要介紹了MySQL的幾種安裝方式及配置,然后在文章底部給大家介紹了安裝過程中的問題總結(jié),非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-07-07
  • 在Windows環(huán)境下安裝MySQL 的教程圖解

    在Windows環(huán)境下安裝MySQL 的教程圖解

    這篇文章主要介紹了在Windows環(huán)境下安裝MySQL 的教程圖解,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • 解說mysql之binlog日志以及利用binlog日志恢復(fù)數(shù)據(jù)的方法

    解說mysql之binlog日志以及利用binlog日志恢復(fù)數(shù)據(jù)的方法

    下面小編就為大家?guī)硪黄庹fmysql之binlog日志以及利用binlog日志恢復(fù)數(shù)據(jù)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 如何在Windows中運行多個MySQL實例詳解

    如何在Windows中運行多個MySQL實例詳解

    這篇文章主要給大家介紹了關(guān)于如何在Windows中運行多個MySQL實例的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Mysql| 使用通配符進行模糊查詢詳解(like,%,_)

    Mysql| 使用通配符進行模糊查詢詳解(like,%,_)

    這篇文章主要介紹了Mysql| 使用通配符進行模糊查詢詳解(like,%,_),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    MySQL 字符串拆分操作(含分隔符的字符串截取)

    這篇文章主要介紹了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • mysql?索引使用及優(yōu)化詳情

    mysql?索引使用及優(yōu)化詳情

    這篇文章主要介紹了mysql?索引使用及優(yōu)化詳情,合理使用索引,能大大提升sql查詢的性能,可以這么講,隨著業(yè)務(wù)數(shù)據(jù)量的不斷增長,優(yōu)化系統(tǒng)的響應(yīng)速度,很大程度上可以說就是集中在索引的優(yōu)化上
    2022-07-07
  • MySQL數(shù)據(jù)庫配置信息查看與修改方法詳解

    MySQL數(shù)據(jù)庫配置信息查看與修改方法詳解

    我們通常把在項目中使用的常量收集在一個文件,這個文件就是配置文件,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫配置信息查看與修改的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • MySQL全局共享內(nèi)存介紹

    MySQL全局共享內(nèi)存介紹

    這篇文章主要介紹了MySQL全局共享內(nèi)存介紹,全局共享內(nèi)存則主要是 MySQL Instance(mysqld進程)以及底層存儲引擎用來暫存各種全局運算及可共享的暫存信息,如存儲查詢緩存的 Query Cache,緩存連接線程的 Thread Cache等等,需要的朋友可以參考下
    2014-12-12
  • MySql delimiter的作用是什么

    MySql delimiter的作用是什么

    其實就是告訴mysql解釋器,該段命令是否已經(jīng)結(jié)束了,mysql是否可以執(zhí)行了。默認(rèn)情況下,delimiter是分號;。在命令行客戶端中,如果有一行命令以分號結(jié)束,那么回車后,mysql將會執(zhí)行該命令。
    2010-09-09

最新評論