mysql日志文件的類型和作用_Mysql日志文件和日志類型介紹_MySQL

日志文件類型

MySQL有幾個不同的日志文件,可以幫助你找出mysqld內部發生的事情:

日志文件

記入文件中的信息類型

錯誤日志

記錄啟動、運行或停止mysqld時出現的問題。

查詢日志

記錄建立的客戶端連接和執行的語句。

更新日志

記錄更改數據的語句。不贊成使用該日志。

二進制日志

記錄所有更改數據的語句。還用于復制。

慢日志

記錄所有執行時間超過long_query_time秒的所有查詢或不使用索引的查詢。

默認情況下,所有日志創建于mysqld數據目錄中。通過刷新日志,你可以強制 mysqld來關閉和重新打開日志文件(或者在某些情況下切換到一個新的日志)。當你執行一個FLUSH LOGS語句或執行mysqladmin flush-logs或mysqladmin refresh時,出現日志刷新。

錯誤日志

錯誤日志文件包含了當mysqld啟動和停止時,以及服務器在運行過程中發生任何嚴重錯誤時的相關信息。

如果mysqld莫名其妙地死掉并且mysqld_safe需要重新啟動它,mysqld_safe在錯誤日志中寫入一條restarted mysqld消息。如果mysqld注意到需要自動檢查或著修復一個表,則錯誤日志中寫入一條消息。

在一些操作系統中,如果mysqld死掉,錯誤日志包含堆棧跟蹤信息。跟蹤信息可以用來確定mysqld死掉的地方。

可以用--log-error[=file_name]選項來指定mysqld保存錯誤日志文件的位置。如果沒有給定file_name值,mysqld使用錯誤日志名host_name.err 并在數據目錄中寫入日志文件。如果你執行FLUSH LOGS,錯誤日志用-old重新命名后綴并且mysqld創建一個新的空日志文件。(如果未給出--log-error選項,則不會重新命名)。

如果不指定--log-error,或者(在Windows中)如果你使用--console選項,錯誤被寫入標準錯誤輸出stderr。通常標準輸出為你的終端。

通用查詢日志

如果你想要知道mysqld內部發生了什么,你應該用--log[=file_name]或-l [file_name]選項啟動它。如果沒有給定file_name的值, 默認名是host_name.log。所有連接和語句被記錄到日志文件。當你懷疑在客戶端發生了錯誤并想確切地知道該客戶端發送給mysqld的語句時,該日志可能非常有用。

mysqld按照它接收的順序記錄語句到查詢日志。這可能與執行的順序不同。這與更新日志和二進制日志不同,它們在查詢執行后,但是任何一個鎖釋放之前記錄日志。(查詢日志還包含所有語句,而二進制日志不包含只查詢數據的語句)。

服務器重新啟動和日志刷新不會產生新的一般查詢日志文件(盡管刷新關閉并重新打開一般查詢日志文件)。在Unix中,你可以通過下面的命令重新命名文件并創建一個新文件:

代碼如下:

shell> mv hostname.log hostname-old.log

shell> mysqladmin flush-logs

shell> cp hostname-old.log to-backup-directory

shell> rm hostname-old.log

慢速查詢日志

用--log-slow-queries[=file_name]選項啟動時,mysqld寫一個包含所有執行時間超過long_query_time秒的SQL語句的日志文件。獲得初使表鎖定的時間不算作執行時間。

如果沒有給出file_name值, 默認未主機名,后綴為-slow.log。如果給出了文件名,但不是絕對路徑名,文件則寫入數據目錄。

語句執行完并且所有鎖釋放后記入慢查詢日志。記錄順序可以與執行順序不相同。

慢查詢日志可以用來找到執行時間長的查詢,可以用于優化。但是,檢查又長又慢的查詢日志會很困難。要想容易些,你可以使用mysqldumpslow命令獲得日志中顯示的查詢摘要來處理慢查詢日志。

在MySQL 5.1的慢查詢日志中,不使用索引的慢查詢同使用索引的查詢一樣記錄。要想防止不使用索引的慢查詢記入慢查詢日志,使用--log-short-format選項。

在MySQL 5.1中,通過--log-slow-admin-statements服務器選項,你可以請求將慢管理語句,例如OPTIMIZE TABLE、ANALYZE TABLE和 ALTER TABLE寫入慢查詢日志。

用查詢緩存處理的查詢不加到慢查詢日志中,因為表有零行或一行而不能從索引中受益的查詢也不寫入慢查詢日志。

二進制日志

二進制文件介紹

二進制日志以一種更有效的格式,并且是事務安全的方式包含更新日志中可用的所有信息。

二進制日志包含了所有更新了數據或者已經潛在更新了數據(例如,沒有匹配任何行的一個DELETE)的所有語句。語句以“事件”的形式保存,它描述數據更改。

備注:二進制日志已經代替了老的更新日志,更新日志在MySQL 5.1中不再使用。

二進制文件的行為

二進制日志還包含關于每個更新數據庫的語句的執行時間信息。它不包含沒有修改任何數據的語句。如果你想要記錄所有語句(例如,為了識別有問題的查詢),你應使用一般查詢日志。

二進制日志的主要目的是在恢復使能夠最大可能地更新數據庫,因為二進制日志包含備份后進行的所有更新。

二進制日志還用于在主復制服務器上記錄所有將發送給從服務器的語句。

運行服務器時若啟用二進制日志則性能大約慢1%。但是,二進制日志的好處,即用于恢復并允許設置復制超過了這個小小的性能損失。

二進制文件的文件路徑

當用--log-bin[=file_name]選項啟動時,mysqld寫入包含所有更新數據的SQL命令的日志文件。如果未給出file_name值, 默認名為-bin后面所跟的主機名。如果給出了文件名,但沒有包含路徑,則文件被寫入數據目錄。建議指定一個文件名.

如果你在日志名中提供了擴展名(例如,--log-bin=file_name.extension),則擴展名被悄悄除掉并忽略。

mysqld在每個二進制日志名后面添加一個數字擴展名。每次你啟動服務器或刷新日志時該數字則增加。如果當前的日志大小達到max_binlog_size,還會自動創建新的二進制日志。如果你正使用大的事務,二進制日志還會超過max_binlog_size:事務全寫入一個二進制日志中,絕對不要寫入不同的二進制日志中。

為了能夠知道還使用了哪個不同的二進制日志文件,mysqld還創建一個二進制日志索引文件,包含所有使用的二進制日志文件的文件名。默認情況下與二進制日志文件的文件名相同,擴展名為'.index'。你可以用--log-bin-index[=file_name]選項更改二進制日志索引文件的文件名。當mysqld在運行時,不應手動編輯該文件;如果這樣做將會使mysqld變得混亂。

二進制日志選項

可以使用下面的mysqld選項來影響記錄到二進制日志知的內容。又見選項后面的討論。

--binlog-do-db=db_name

告訴主服務器,如果當前的數據庫(即USE選定的數據庫)是db_name,應將更新記錄到二進制日志中。其它所有沒有明顯指定的數據庫 被忽略。如果使用該選項,你應確保只對當前的數據庫進行更新。

對于CREATE DATABASE、ALTER DATABASE和DROP DATABASE語句,有一個例外,即通過操作的數據庫來決定是否應記錄語句,而不是用當前的數據庫。

一個不能按照期望執行的例子:如果用binlog-do-db=sales啟動服務器,并且執行USE prices; UPDATE sales.january SET amount=amount+1000;,該語句不寫入二進制日志。

--binlog-ignore-db=db_name

告訴主服務器,如果當前的數據庫(即USE選定的數據庫)是db_name,不應將更新保存到二進制日志中。如果你使用該選項,你應確保只對當前的數據庫進行更新。

一個不能按照你期望的執行的例子:如果服務器用binlog-ignore-db=sales啟動,并且執行USE prices; UPDATE sales.january SET amount=amount+1000;,該語句不寫入二進制日志。

類似于--binlog-do-db,對于CREATE DATABASE、ALTER DATABASE和DROP DATABASE語句,有一個例外,即通過操作的數據庫來決定是否應記錄語句,而不是用當前的數據庫。

要想記錄或忽視多個數據庫,使用多個選項,為每個數據庫指定相應的選項。

服務器根據下面的規則對選項進行評估,以便將更新記錄到二進制日志中或忽視。請注意對于CREATE/ALTER/DROP DATABASE語句有一個例外。在這些情況下,根據以下規則,所創建、修改或刪除的數據庫將代替當前的數據庫。

1. 是否有binlog-do-db或binlog-ignore-db規則?

·沒有:將語句寫入二進制日志并退出。

·有:執行下一步。

2.有一些規則(binlog-do-db或binlog-ignore-db或二者都有)。當前有一個數據庫(USE是否選擇了數據庫?)?

·沒有:不要寫入語句,并退出。

·有:執行下一步。

3.有當前的數據庫。是否有binlog-do-db規則?

· 有:當前的數據庫是否匹配binlog-do-db規則?

o有:寫入語句并退出。

o沒有:不要寫入語句,退出。

· No:執行下一步。

4.有一些binlog-ignore-db規則。當前的數據庫是否匹配binlog-ignore-db規則?

·有:不要寫入語句,并退出。

·沒有:寫入查詢并退出。

例如,只用binlog-do-db=sales運行的服務器不將當前數據庫不為sales的語句寫入二進制日志(換句話說,binlog-do-db有時可以表示“忽視其它數據庫”)。

如果你正進行復制,應確保沒有從服務器在使用舊的二進制日志文件,方可刪除它們。

本條技術文章來源于互聯網,如果無意侵犯您的權益請點擊此處反饋版權投訴

本文系統來源:php中文網

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

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

相關文章

ruby mysql 驅動_windows下Rails安裝MySql驅動的配置

1.安裝ruby這我就不廢話了,安裝很簡單,網上資料也很多。安裝完后再環境變量path里加入D:ruby\bin(視你的安裝路徑了)安裝完后在命令行輸入ruby -v, 會顯示版本號,表示安裝成功,我的版本號是1.8.62.安裝rails我建議去官…

cross join 一張表沒有值關聯不出來數據_你是否還在對left join、right join和join有困擾呢?...

說到SQL,很多人可能用了挺久,但依然有個問題一直困擾著,那就是 left join、 join、 right join和 inner join等等各種 join的區別。網上搜,最常見的就是一張圖解圖,如下:接下來就來實際自己動手實驗&#x…

MySQL如何修改表的儲存方式_修改mysql默認存儲引擎的方法

修改mysql默認存儲引擎的方法,供大家學習參考。先來了解一下mysql存儲引擎:mysql服務器采用了模塊化風格,各部分之間保持相對獨立,尤其體現在存儲架構上。存儲引擎負責管理數據存儲,以及mysql的索引管理。通過定義的AP…

前端判斷是否安裝桌面應用_前端開發人員的桌面應用神器 Electron

01為什么用 JavaScript 來開發桌面應用?曾經的 JavaScript 脆弱、簡陋、甚至有被邊緣化的危險,不過 JavaScript 在經過了兩次飛躍后(以 V8 為首的 JavaScript 引擎和 Node.js 的問世),不再受人欺負,早已升級…

mysql 導出csv 多列_從包含300多列的csv,txt或xls文件創建MySQL表

你可以用一些langague C ,PHP解析txt文件......然后構建一個請求并執行它。PHP和PDO :: module將使這個最簡單。我不知道某個程序是否已經完成這項工作。這是一個解決方案。如果您選擇這樣做并遇到麻煩,歡迎您。每個stackoverflow成員都會幫助您。編輯&a…

mysql error 1594_【MySQL】解決mysql的 1594 錯誤-阿里云開發者社區

對于主從架構的mysql,當發生主機斷電或者其他原因異常crash的時候, slave的容易發生讀取binlog出錯的問題,最常見的是show slave status \G;Master_Log_File: mysql-bin.000029Read_Master_Log_Pos: 3154083Relay_Log_File: relay-bin.000478Relay_Log_Pos: 633Rel…

mysql innodb文件_MySQL的InnoDB文件介紹

MySQL一個顯著的特點是其可插拔的存儲引擎,因此MySQL文件分為兩種,一種是和MySQL數據庫本身相關 的文件,一種是和存儲引擎相關的文件。本文主要介紹和InnoDB存儲引擎相關的文件。表空間文件InnoDB在存儲上也模仿了Oracle的設計,數…

python中與label類似的控件是_python中tkinter的使用(控件整理)(一)

1、使用tkinter.Tk() 生成主窗口(windowtkinter.Tk()):window.title(標題名)修改框體的名字,也可在創建時使用className參數來命名;window.resizable(0,0)框體大小可調性,分別表示x,y方向的可變性;1表示可變,0表示不可…

jdbc dao 工具類mysql_Java基于JDBC實現事務,銀行轉賬及貨物進出庫功能示例

本文實例講述了Java基于JDBC實現事務,銀行轉賬及貨物進出庫功能。分享給大家供大家參考,具體如下:1. 轉賬業務轉賬必須執行2個sql語句(update更新)都成功的情況下,提交事務,如果有一個失敗,則2個都回滾事務…

冒險島單機版mysql_冒險島單機版

這款《冒險島單機版》經驗是盛大冒險島的100倍?最新盛大地圖及BOSS,甚至包括盛大沒有地圖BOSS及現金裝備,地圖包括新加坡,馬來西亞,臺灣,可口可樂城,鬧鬼宅邸,暹羅等等?。25駕坐騎&#xff0c…

python與html5搭建聊天室_html5 websocket 新版協議聊天室 服務端(python版)

網上找了很多代碼都是舊版協議的,研究了很久終于弄清楚了 現在發個用新版協議寫的服務端代碼出來(這個代碼是從網上舊版協議改過來的)最要就是握手協議和發送接受字符的方式變了# incodingutf-8import socketimport structimport hashlibimport threading,randomimp…

mysql數據庫開發筆記_MySQL數據庫生成數據庫說明文檔

在半年多前為一個MySQL數據庫生成過數據庫說明文檔,今天要重新生成一份,但是發現完全不記得當時是怎么生成的,只能在網上搜索重來一遍,所以今天特意把這個過程記錄一下。一、安裝使用MySQL數據庫表結構導出器DBExportDoc V1.0 For…

java 字符串緩沖區_詳解Java中字符串緩沖區StringBuffer類的使用

StringBuffer 是一個線程安全的可變的字符序列。它繼承于AbstractStringBuilder,實現了CharSequence接口。StringBuilder 也是繼承于AbstractStringBuilder的子類;但是,StringBuilder和StringBuffer不同,前者是非線程安全的&#…

rabbitmq java文檔_RabbitMQ文檔翻譯——Hello World!(上)

文章主要翻譯自RabbitMQ官方文檔,主要是為了練習英語翻譯,順便學習一下RabbitMQ😶其中也記錄了一些爬過的坑IntroductionRabbitMQ is a message broker. The principal idea is pretty simple: it accepts and forwards messages. You can th…

java string 包含http_Java中使用HttpPost上傳文件以及HttpGet進行API請求(包含HttpPost上傳文件)...

一、HttpPost上傳文件public static String getSuffix(final MultipartFile file){if(file null || file.getSize() 0){return null;}String fileName file.getOriginalFilename();return fileName.substring(fileName.lastIndexOf(".")1);}public static JSONObj…

java倒計時跳出窗口_java倒計時彈出框

直接使用java語言寫出一個運行時的彈出框倒計時:package test.dagong.testDecreaseDate;import java.awt.Container;import java.awt.FlowLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.sw…

jpa mysql存儲過程_Jpa調用存儲過程及參數

public List findAllEntityListBySearch(Long inputInfoId, int flag) throws Exception {List infoviewListnew ArrayList<>();EntityManager em emf.createEntityManager();try {StoredProcedureQuery storedProcedure em.createStoredProcedureQuery("存儲名稱&…

python從mongodb里取出數據進行可視化_python3 mongoDB數據庫的安裝配置與可視化

python3 mongoDB數據庫的安裝配置與可視化。前天說是要學習如何使用mongoDB的鏈接與安裝。安裝環境&#xff1a; wind10 還是盜版的 磁盤分析&#xff1a;只有一個C盤&#xff0c;步驟&#xff1a;1 . 下載這里下載了對應的msi文件&#xff0c;貌似.zip文件沒有了2 我默認把mon…

idea 注入mapper報錯報紅的幾種解決方案

文章目錄 前言方法1&#xff1a;為 Autowired 注解設置required false方法2&#xff1a;用 Resource 替換 Autowired方法3&#xff1a;在Mapper接口上加上Repository注解方法4&#xff1a;用Lombok方法5&#xff1a;把IDEA的警告關閉掉方法6&#xff1a;不用管他 前言 相信大…

java 調用對象的方法_JAVA調用對象方法的執行過程

JAVA調用對象方法的執行過程&#xff1a;①.編譯器查看對象的聲明類型和方法名。假設調用x.f(parameter), 且隱式參數x聲明為C類型的對象&#xff0c;有可能在C對象中存在多個參數類型和參數個數不同的f的方法{例如&#xff1a;f(int)、f(int,String)和f(String)}&#xff0c;…