程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 對MySQL日記操作的一些根本敕令總結

對MySQL日記操作的一些根本敕令總結

編輯:MySQL綜合教程

對MySQL日記操作的一些根本敕令總結。本站提示廣大學習愛好者:(對MySQL日記操作的一些根本敕令總結)文章只能為提供參考,不一定能成為您想要的結果。以下是對MySQL日記操作的一些根本敕令總結正文


MySQL日記重要包括:毛病日記、查詢日記、慢查詢日記、事務日記、二進制日記;

日記是mysql數據庫的主要構成部門。日記文件中記載著mysql數據庫運轉時代產生的變更;也就是說用來記載mysql數據庫的客戶端銜接狀態、SQL語句的履行情形和毛病信息等。當數據庫遭到不測的破壞時,可以經由過程日記檢查文件失足的緣由,而且可以經由過程日記文件停止數據恢復。

毛病日記

在mysql數據庫中,毛病日記功效是默許開啟的。而且,毛病日記沒法被制止。默許情形下,毛病日記存儲在mysql數據庫的數據文件中。毛病日記文件平日的稱號為hostname.err。個中,hostname表現辦事器主機名。

毛病日記信息可以本身停止設置裝備擺設的,毛病日記所記載的信息是可以經由過程log-error和log-warnings來界說的,個中log-err是界說能否啟用毛病日記的功效和毛病日記的存儲地位,log-warnings是界說能否將正告信息也界說至毛病日記中。默許情形下毛病日記年夜概記載以下幾個方面的信息:辦事器啟動和封閉進程中的信息(未必是毛病信息,如mysql若何啟動InnoDB的表空間文件的、若何初始化本身的存儲引擎的等等)、辦事器運轉進程中的毛病信息、事宜調劑器運轉一個事宜時發生的信息、在從辦事器上啟動辦事器過程時發生的信息。

上面我們來界說mysql毛病日記的功效:

普通而言,日記級其余界說沒有回話變量都只是在全局級別下停止界說。


能否啟用了日記

mysql>show variables like 'log_bin';

如何曉得以後的日記
mysql> show master status;

二進制日記文件 看二進制日記文件用mysqlbinlog
shell>mysqlbinlog mail-bin.000001
或許
shell>mysqlbinlog mail-bin.000001 | tail
備注:日記目次假如沒有指定,則默許在datadir設置裝備擺設目次下,經由過程my.ini檢查該設置裝備擺設目次
Windows 下用相似的敕令。

在5.6及以上版本必定要手動指定。5.6以下版本默許file_name為$datadir/mysqld-binlog
二進制日記用於記載一切更改數據的語句。重要用於復制和即時點恢復。
檢查二進制日記的對象為:mysqlbinlog
二進制日記包括了一切更新了數據或許曾經潛伏更新了數據(例如,沒有婚配任何行的一個DELETE)的一切語句。語句以“事宜”的情勢保留,它描寫數據更改。二進制日記還包括關於每一個更新數據庫的語句的履行時光信息。它不包括沒有修正任何數據的語句。
二進制日記的重要目標是在數據庫存在毛病時,恢復時可以或許最年夜能夠地更新數據庫(即時點恢復),由於二進制日記包括備份落後行的一切更新。二進制日記還用於在主復禮服務器上記載一切將發送給從辦事器的語句。
那末二進制日記是記載履行的語句照樣履行後的成果數據呢?
第一種情形:
參加一個表有10萬行數據,而如今要履行一個以下語句將amount字段的值全體在本來的基本上增長1000:

UPDATE sales.january SET amount=amount+1000;

此時假如要記載履行後的成果數據的話,日記會異常年夜。
是以在這類情形下應記載履行語句。這類方法就是基於語句的二進制日記。
第二種情形:
假如向某個字段拔出的是以後的時光呢?以下:

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:用時光段恢復

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):

mysqlbinlog log.00001 >F:log.sql

-- 把二進制文件log.00001導入文件日記log.sql中
     (B):翻開log.sql日記文件,肯定恢復點
     (C):

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

備注:必需加上|前面mysql信息,從新履行這段點之間日記

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved