日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql用binlog恢复数据_利用mysql的binlog恢复数据

發布時間:2023/12/10 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql用binlog恢复数据_利用mysql的binlog恢复数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 @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*/;

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

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-position="50" //指定從50位置開始

--stop-position="100"//指定到100位置結束

注意按位置來的計算的話,需要找到最后那條sql語句的最后那個位置,不能使用下個位置,但是使用時間來恢復的話必須使用下一個sql語句的時間才能恢復到上一條數據。

最后介紹幾個bin_log的操作:

1.產看最后一個bin日志文件是那個,現在位置

2.啟用新的日志文件,一般備份完數據庫后執行

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

總結

以上是生活随笔為你收集整理的mysql用binlog恢复数据_利用mysql的binlog恢复数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。