国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

對MySQL日志操作的一些基本命令總結

2024-07-24 13:08:11
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了對MySQL日志操作的一些基本命令總結,其中重點講述了二進制日志文件的相關方面,需要的朋友可以參考下

MySQL日志主要包含:錯誤日志、查詢日志、慢查詢日志、事務日志、二進制日志;

日志是mysql數據庫的重要組成部分。日志文件中記錄著mysql數據庫運行期間發生的變化;也就是說用來記錄mysql數據庫的客戶端連接狀況、SQL語句的執行情況和錯誤信息等。當數據庫遭到意外的損壞時,可以通過日志查看文件出錯的原因,并且可以通過日志文件進行數據恢復。

錯誤日志

在mysql數據庫中,錯誤日志功能是默認開啟的。并且,錯誤日志無法被禁止。默認情況下,錯誤日志存儲在mysql數據庫的數據文件中。錯誤日志文件通常的名稱為hostname.err。其中,hostname表示服務器主機名。

錯誤日志信息可以自己進行配置的,錯誤日志所記錄的信息是可以通過log-error和log-warnings來定義的,其中log-err是定義是否啟用錯誤日志的功能和錯誤日志的存儲位置,log-warnings是定義是否將警告信息也定義至錯誤日志中。默認情況下錯誤日志大概記錄以下幾個方面的信息:服務器啟動和關閉過程中的信息(未必是錯誤信息,如mysql如何啟動InnoDB的表空間文件的、如何初始化自己的存儲引擎的等等)、服務器運行過程中的錯誤信息、事件調度器運行一個事件時產生的信息、在從服務器上啟動服務器進程時產生的信息。

下面我們來定義mysql錯誤日志的功能:

一般而言,日志級別的定義沒有回話變量都只是在全局級別下進行定義。

是否啟用了日志

 

 
  1. mysql>show variables like 'log_bin'

怎樣知道當前的日志

 

 
  1. mysql> show master status; 

二進制日志文件

看二進制日志文件用mysqlbinlog

 

 
  1. shell>mysqlbinlog mail-bin.000001 

或者

 

  1. shell>mysqlbinlog mail-bin.000001 | tail 

備注:日志目錄如果沒有指定,則默認在datadir配置目錄下,通過my.ini查看該配置目錄

Windows 下用類似的命令。

在5.6及以上版本一定要手動指定。5.6以下版本默認file_name為$datadir/mysqld-binlog

二進制日志用于記錄所有更改數據的語句。主要用于復制和即時點恢復。

查看二進制日志的工具為:mysqlbinlog

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

二進制日志的主要目的是在數據庫存在故障時,恢復時能夠最大可能地更新數據庫(即時點恢復),因為二進制日志包含備份后進行的所有更新。二進制日志還用于在主復制服務器上記錄所有將發送給從服務器的語句。

那么二進制日志是記錄執行的語句還是執行后的結果數據呢?

第一種情況:

加入一個表有10萬行數據,而現在要執行一個如下語句將amount字段的值全部在原來的基礎上增加1000:

 

 
  1. UPDATE sales.january SET amount=amount+1000; 

此時如果要記錄執行后的結果數據的話,日志會非常大。

因此在這種情況下應記錄執行語句。這種方式就是基于語句的二進制日志。

第二種情況:

如果向某個字段插入的是當前的時間呢?如下:

 

 
  1. INSERT INTO tb SET Birthdate=CURRENT_TIME(); 

此時就不能記錄語句了,因為不同時間執行的結果是不一樣的。這是應該記錄這一行的值,這種就是基于行(row)的二進制日志。

在有些情況,可能會結合兩種方式來記錄,這種叫做混合方式的二進制日志。

二進制日志記錄時間:

默認情況下,并不是每次寫入時都將二進制日志與硬盤同步。因此如果操作系統或機器(不僅僅是MySQL服務器)崩潰,有可能二進制日志中最后的語句丟失了。要想防止這種情況,你可以使用sync_binlog全局變量(1是最安全的值,但也是最慢的),使二進制日志在每N次二進制日志寫入后與硬盤同步。

對非事務表的更新執行完畢后立即保存到二進制日志中。對于事務表,例如BDB或InnoDB表,所有更改表的更新(UPDATE、DELETE或INSERT) 被緩存起來,直到服務器接收到COMMIT語句。在該點,執行完COMMIT之前,mysqld將整個事務寫入二進制日志。當處理事務的線程啟動時,它為緩沖查詢分配binlog_cache_size大小的內存。如果語句大于該值,線程則打開臨時文件來保存事務。線程結束后臨時文件被刪除。

日志恢復

:(數據庫備份時間:2013-02-30 10:10:10 數據出錯前一刻時間:2013-02-30 10:10:10)

利用mysqlbinlog.exe工具

(1)打開cmd,進入到日志目錄下

(2)恢復備份數據庫

(3)重新執行從備份數據庫開始到出錯前一刻日志,

例如1:用時間段恢復

 

 
  1. mysqlbinlog --start-datetime="2013-02-30 10:10:10" --stop-datetime="2013-02-30 10:10:10" log.00001 | mysql -uroot -p123456 

由于在測試中發現,用時間進行恢復,恢復這個時間段sql并不準確,特此標注(待研究)

例如2:用日志位置進行恢復(必須打開日志,確定開始恢復日志位置和出錯前日志的位置)

(A):

 

 
  1. mysqlbinlog log.00001 >F:log.sql 

-- 把二進制文件log.00001導入文件日志log.sql中

(B):打開log.sql日志文件,確定恢復點

(C):

 

  1. mysqlbinlog --start-position="5230766" --stop-position="5231104" PC-201304011235-bin.000001 | mysql -uroot -p111111 

備注:必須加上|后面mysql信息,重新執行這段點之間日志


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南溪县| 崇义县| 元氏县| 镇宁| 浙江省| 错那县| 揭阳市| 长寿区| 尼木县| 镇安县| 察雅县| 九龙城区| 冕宁县| 宝山区| 金堂县| 余庆县| 大悟县| 花垣县| 吉水县| 马边| 凤山市| 徐州市| 乐安县| 赣州市| 荣昌县| 门源| 汽车| 廊坊市| 海南省| 余庆县| 邵阳县| 文成县| 萍乡市| 苍溪县| 渝中区| 香格里拉县| 朝阳区| 宜兰市| 郑州市| 肇庆市| 安乡县|