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

MySQL中Binary Log二進制日記文件的根本操作敕令小結

編輯:MySQL綜合教程

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


MySQL Binary Log也就是常說的bin-log, ,是mysql履行修改發生的二進制日記文件,其重要感化有兩個:
* 數據答復
* 主從數據庫。用於slave端履行增刪改,堅持與master同步。

1.開啟binary log功效

     須要修正mysql的設置裝備擺設文件,本篇的試驗情況是win7,設置裝備擺設文件為mysql裝置目次\MySQL Server 5.1下的my.ini,添加一句log_bin = mysql_bin便可 

  eg: 
  [mysqld] 
    ...... 
    log_bin = mysql_bin 
    ...... 
  log_bin是生成的bin-log的文件名,後綴則是6位數字的編碼,從000001開端,依照下面的設置裝備擺設,生成的文件則為: 
    mysql_bin.000001 
    mysql_bin.000002 
    ...... 

  
    設置裝備擺設保留今後重啟mysql的辦事器,用show variables like  '%bin%'檢查bin-log能否開啟,如圖: 

201512893640786.png (536×205)

2.檢查發生的binary log

   bin-log由於是二進制文件,不克不及經由過程記事本等編纂器直接翻開檢查,mysql供給兩種方法檢查方法,在引見之前,我們先對數據庫停止一下增刪改的操作,不然log裡邊數據有點空。 

 create table bin( id int(10) primary key auto_increment,name varchar(255));

(測試前我曾經建表) 

 insert into bin(name) values ('orange'); 

     1.在客戶端中應用  show binlog events in 'mysql_bin.000001'  語句停止檢查,為了排序雅觀,可以在開頭加\G使成果橫變縱,此時開頭無需加;語句停止符。
      eg:

mysql> show binlog events in 'mysql_bin.000001'\G 
...............省略............... 
*************************** 3. row *************************** 
 Log_name: mysql_bin.000001 
  Pos: 174 
Event_type: Intvar 
 Server_id: 1 
End_log_pos: 202 
  Info: INSERT_ID=2 
*************************** 4. row *************************** 
 Log_name: mysql_bin.000001 
  Pos: 202 
Event_type: Query 
 Server_id: 1 
End_log_pos: 304 
  Info: use `test`; insert into bin(name) values ('orange') 
*************************** 5. row *************************** 
...............省略............... 
  • Log_name:此條log存在誰人文件中,從下面可以看出這2條log皆存在與mysql_bin.000001文件中。
  • Pos:log在bin-log中的開端地位
  • Event_type:log的類型信息
  • Server_id:可以檢查設置裝備擺設中的server_id,表現log是誰人辦事器發生
  • End_log_pos:log在bin-log中的停止地位
  • Info:log的一些備注信息,可以直不雅的看出停止了甚麼操作

2.用mysql自帶的對象mysqlbinlog,這是我們就須要曉得bin-log存在硬盤的甚麼地位,win7默許存在C:\ProgramData\MySQL\MySQL Server 5.1\data文件夾上面,假如沒有此文件夾,那我們可以經由過程設置裝備擺設文件中的  datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/" 定位,假如還沒有,那我就會說“各個體系的搜刮功效都做的不錯!”。這類檢查方法就沒誰人雅觀了,以下

C:\ProgramData\MySQL\MySQL Server 5.1\data>mysqlbinlog mysql_bin.000001 
/*!40019 SET @@session.max_insert_delayed_threads=0*/; 
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; 
DELIMITER /*!*/; 
# at 4 
#121015 16:35:56 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1.51-community-log created 121015 16:35:56 at startup 
ROLLBACK/*!*/; 
BINLOG ' 
7Mp7UA8BAAAAZgAAAGoAAAAAAAQANS4xLjUxLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAADsyntQEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC 
'/*!*/; 
# at 106 
#121015 16:36:51 server id 1 end_log_pos 174 Query thread_id=2  exec_time=0  error_code=0 
SET TIMESTAMP=1350290211/*!*/; 
SET @@session.pseudo_thread_id=2/*!*/; 
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/; 
SET @@session.sql_mode=1344274432/*!*/; 
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; 
/*!\C utf8 *//*!*/; 
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/; 
SET @@session.collation_database=DEFAULT/*!*/; 
BEGIN 
/*!*/; 
# at 174 
#121015 16:36:51 server id 1 end_log_pos 202 Intvar 
SET INSERT_ID=3/*!*/; 
# at 202 
#121015 16:36:51 server id 1 end_log_pos 309 Query thread_id=2  exec_time=0  error_code=0 
use test/*!*/; 
SET TIMESTAMP=1350290211/*!*/; 
insert into bin(name) values('xishizhaohua') 
/*!*/; 
# at 309 
#121015 16:36:51 server id 1 end_log_pos 336 Xid = 28 
COMMIT/*!*/; 
# at 336 
#121015 16:37:25 server id 1 end_log_pos 379 Rotate to mysql_bin.000002 pos: 4 
DELIMITER ; 
# End of log file 
ROLLBACK /* added by mysqlbinlog */; 
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; 

固然排版有點亂,但從圖中我們可以獲得更多信息,如時光戳,自增的偏移,能否主動提交事務等信息。以下圖為從中提取的一部門。

201512893921181.png (921×129)

3.應用bin_log恢單數據

    (1).最長用的就是答復指定命據真個數據了,可以直接恢復到數據庫中: 

 mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 |mysql -uroot -p123456 

      亦可導出為sql文件,再導入至數據庫中: 

  mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 >d:\1.sql 
  source d:\1.sql 

     (2).指定開端\停止地位,從下面的檢查發生的binary log我們可以曉得某個log的開端到停止的地位,我們可以在恢復的進程中指定答復從A地位到B地位的log.須要用上面兩個參數來指定: 

 --start-positon="50" //指定從50地位開端 
 --stop-postion="100"//指定到100地位停止 

   最初引見幾個bin_log的操作:
   (1).產看最初一個bin日記文件是誰人,如今地位

201512894032929.png (527×86)

    (2).啟用新的日記文件,普通備份完數據庫後履行

201512894049040.png (553×262)

    (3).清空現有的所用bin-log

2015128101149336.png (544×256)

4.binary log相干變量和參數

敕令行參數

  --log-bin [=file_name]

  設置此參數表現啟用binlog功效,並制訂途徑稱號。

  --log-bin-index[=file]

  設置此參數是指定二進制索引文件的途徑與稱號。

  --max_binlog_size

 Binlog最年夜值,最年夜和默許值是1GB,該設置其實不能嚴厲掌握Binlog的年夜小,特別是Binlog比擬接近最年夜值而又碰到一個比擬年夜事務時,

為了包管事務的完全性,弗成能做切換日記的舉措,只能將該事務的一切SQL都記載進以後日記,直到事務停止。

  --binlog-do-db=db_name

  此參數表現只記載指定命據庫的二進制日記

  --binlog-ignore-db=db_name

  此參數表現不記載指定的數據庫的二進制日記

體系變量

  log_bin

  binlog_cache_size

  此參數表現binlog應用的內存年夜小,可以經由過程狀況變量binlog_cache_use和binlog_cache_disk_use來贊助測試。

  max_binlog_cache_size

  此參數表現binlog應用的內存最年夜的尺寸

  binlog_cache_use

  應用二進制日記緩存的事務數目

  binlog_cache_disk_use

  應用二進制日記緩存但跨越binlog_cache_size值並應用暫時文件來保留事務中的語句的事務數目。

  binlog_do_db

  binlog_ignore_db

  sync_binlog

  這個參數直接影響mysql的機能和完全性。

  sync_binlog=0:

  當事務提交後,Mysql僅僅是將binlog_cache中的數據寫入binlog文件,但不履行fsync之類的磁盤,同步指令告訴文件體系將緩存刷新到磁盤,而讓Filesystem自行決議甚麼時刻來做同步,這個是機能最好的。

  sync_binlog=0,在停止n次事務提交今後,Mysql將履行一次fsync之類的磁盤同步指令,告訴文件體系將Binlog文件緩存刷新到磁盤。

  Mysql中默許的設置是sync_binlog=0,即不做任何強迫性的磁盤刷新指令,這時候機能是最好的,但風險也是最年夜的。一旦體系Crash,在文件體系緩存中的一切Binlog信息都邑喪失。

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