利用mysql的binlog恢複資料

來源:互聯網
上載者:User

標籤:cte   提取   read   cti   chm   query   sql   定位   時間戳記   

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是否開啟,  
 

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 @[email protected]@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 [email protected]_COMPLETION_TYPE*/; 

雖然排版有點亂,但我們可以得到更多資訊,如時間戳記,自增的位移,是否自動認可事務等資訊。如為從中提取的一部分。 


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記錄檔是那個,現在位置 
 
  2.啟用新的記錄檔,一般備份完資料庫後執行 
 
3.清空現有的所用bin-log 

利用mysql的binlog恢複資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.