性色av无码一区二区三区人妻,人妻精品久久久久中文字幕99,日韩久久中文字幕,人人爽人人爽人人爽av

搜索
Close this search box.

MySQL利用binlog數(shù)據(jù)恢復(fù)

作者:admin 發(fā)布日期:2015-12-15 00:17:18

       MySQL Binary Log也就是常說的bin-log,,是mysql執(zhí)行改動產(chǎn)生的二進(jìn)制日志文件,其主要作用有兩個(gè):

       * 數(shù)據(jù)恢復(fù) 
       * 主從數(shù)據(jù)庫。用于slave端執(zhí)行增刪改,保持與master同步。 

下面介紹利用binlog來MySQL數(shù)據(jù)恢復(fù)
1.開啟binary log功能 

     需要修改mysql的配置文件,本篇的實(shí)驗(yàn)環(huán)境是win7,配置文件為mysql安裝目錄\MySQL Server 5.1下的my.ini,添加一句log_bin = mysql_bin即可
     eg: 
     [mysqld] 
             ...... 
             log_bin = mysql_bin 
             ...... 
       log_bin是生成的bin-log的文件名,后綴則是6位數(shù)字的編碼,從000001開始,按照上面的配置,生成的文件則為: 
             mysql_bin.000001 
             mysql_bin.000002 
             ...... 
  
    配置保存以后重啟mysql的服務(wù)器,用show variables like  '%bin%'查看bin-log是否開啟,如圖: 

MYSQL數(shù)據(jù)恢復(fù)


2.查看產(chǎn)生的binary log 

   bin-log因?yàn)槭嵌M(jìn)制文件,不能通過記事本等編輯器直接打開查看,mysql提供兩種方式查看方式,在介紹之前,我們先對數(shù)據(jù)庫進(jìn)行一下增刪改的操作,否則log里邊數(shù)據(jù)有點(diǎn)空。
   create table bin( id int(10) primary key auto_increment,name varchar(255));(測試前我已經(jīng)建表)
   insert into bin(name) values ('orange'); 

     1.在客戶端中使用  show binlog events in 'mysql_bin.000001'  語句進(jìn)行查看,為了排序美觀,可以在結(jié)尾加\G使結(jié)果橫變縱,此時(shí)結(jié)尾無需加;語句結(jié)束符。
      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存在那個(gè)文件中,從上面可以看出這2條log皆存在與mysql_bin.000001文件中。 
Pos:log在bin-log中的開始位置 
Event_type:log的類型信息 
Server_id:可以查看配置中的server_id,表示log是那個(gè)服務(wù)器產(chǎn)生 
End_log_pos:log在bin-log中的結(jié)束位置 
Info:log的一些備注信息,可以直觀的看出進(jìn)行了什么操作 

2.用mysql自帶的工具mysqlbinlog,這是我們就需要知道bin-log存在硬盤的什么位置,win7默認(rèn)存在C:\ProgramData\MySQL\MySQL Server 5.1\data文件夾下面,如果沒有此文件夾,那我們可以通過配置文件中的  datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/" 定位,如果還沒有,那我就會說“各個(gè)系統(tǒng)的搜索功能都做的不錯(cuò)!”。這種查看方式就沒那個(gè)美觀了,如下

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 
#140215 16:35:56 server id 1  end_log_pos 106   Start: binlog v 4, server v 5.1.51-community-log created 140215 16:35:56 at startup
ROLLBACK/*!*/; 
BINLOG ' 
7Mp7UA8BAAAAZgAAAGoAAAAAAAQANS4xLjUxLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAADsyntQEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC 
'/*!*/; 
# at 106 
#140215 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 
#140215 16:36:51 server id 1  end_log_pos 202   Intvar 
SET INSERT_ID=3/*!*/; 
# at 202 
#140215 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 
#140215 16:36:51 server id 1  end_log_pos 336   Xid = 28 
COMMIT/*!*/; 
# at 336 
#140215 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*/; 

雖然排版有點(diǎn)亂,但從圖中我們可以得到更多信息,如時(shí)間戳,自增的偏移,是否自動提交事務(wù)等信息。如下圖為從中提取的一部分。 

MYSQL數(shù)據(jù)恢復(fù)


3.利用bin_log恢復(fù)數(shù)據(jù)(date與position)

    1.最長用的就是恢復(fù)指定數(shù)據(jù)端的數(shù)據(jù)了,可以直接恢復(fù)到數(shù)據(jù)庫中: 
    mysqlbinlog  --start-date="2014-02-18 16:30:00" --stop-date="2014-02-18 17:00:00" mysql_bin.000001 |mysql -uroot -p123456
      亦可導(dǎo)出為sql文件,再導(dǎo)入至數(shù)據(jù)庫中: 
      mysqlbinlog  --start-date="2014-02-18 16:30:00" --stop-date="2014-02-18 17:00:00" mysql_bin.000001 >d:\1.sql
      source d:\1.sql 
      2.指定開始\結(jié)束位置,從上面的查看產(chǎn)生的binary log我們可以知道某個(gè)log的開始到結(jié)束的位置,我們可以在恢復(fù)的過程中指定回復(fù)從A位置到B位置的log.需要用下面兩個(gè)參數(shù)來指定:
    --start-positon="50" //指定從50位置開始 
    --stop-postion="100"http://指定到100位置結(jié)束 

   最后介紹幾個(gè)bin_log的操作: 
   1.查看最后一個(gè)bin日志文件是那個(gè),現(xiàn)在位置。

show master status;

MYSQL數(shù)據(jù)恢復(fù)


  2.啟用新的日志文件,一般備份完數(shù)據(jù)庫后執(zhí)行。

flush logs;

MYSQL數(shù)據(jù)恢復(fù)


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

reset master;

 MYSQL數(shù)據(jù)恢復(fù)
 

 


上一篇:工控機(jī)維修與系統(tǒng)數(shù)據(jù)修復(fù)

下一篇:SQL數(shù)據(jù)庫如何備份與恢復(fù)

熱門閱讀

你丟失數(shù)據(jù)了嗎!

我們有能力從各種數(shù)字存儲設(shè)備中恢復(fù)您的數(shù)據(jù)

Scroll to Top