* 數(shù)據(jù)恢復
* 主從數(shù)據(jù)庫。用于slave端執(zhí)行增刪改,保持與master同步。
下面介紹利用binlog來MySQL數(shù)據(jù)恢復
1.開啟binary log功能
需要修改mysql的配置文件,本篇的實驗環(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的服務器,用show variables like '%bin%'查看bin-log是否開啟,如圖:
2.查看產(chǎn)生的binary log
bin-log因為是二進制文件,不能通過記事本等編輯器直接打開查看,mysql提供兩種方式查看方式,在介紹之前,我們先對數(shù)據(jù)庫進行一下增刪改的操作,否則log里邊數(shù)據(jù)有點空。
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' 語句進行查看,為了排序美觀,可以在結尾加\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是那個服務器產(chǎn)生
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/" 定位,如果還沒有,那我就會說“各個系統(tǒng)的搜索功能都做的不錯!”。這種查看方式就沒那個美觀了,如下
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*/;
雖然排版有點亂,但從圖中我們可以得到更多信息,如時間戳,自增的偏移,是否自動提交事務等信息。如下圖為從中提取的一部分。
3.利用bin_log恢復數(shù)據(jù)(date與position)
1.最長用的就是恢復指定數(shù)據(jù)端的數(shù)據(jù)了,可以直接恢復到數(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
亦可導出為sql文件,再導入至數(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.指定開始\結束位置,從上面的查看產(chǎn)生的binary log我們可以知道某個log的開始到結束的位置,我們可以在恢復的過程中指定回復從A位置到B位置的log.需要用下面兩個參數(shù)來指定:
--start-positon="50" //指定從50位置開始
--stop-postion="100"http://指定到100位置結束
最后介紹幾個bin_log的操作:
1.查看最后一個bin日志文件是那個,現(xiàn)在位置。
show master status;
2.啟用新的日志文件,一般備份完數(shù)據(jù)庫后執(zhí)行。
flush logs;
3.清空現(xiàn)有的所用bin-log
reset master;