《Mysql入門MySQL中Binary Log二進(jìn)制日志文件的基本操作命令小結(jié)》要點(diǎn):
本文介紹了Mysql入門MySQL中Binary Log二進(jìn)制日志文件的基本操作命令小結(jié),希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
MYSQL入門MySQL Binary Log也就是常說的bin-log, ,是mysql執(zhí)行改動(dòng)產(chǎn)生的二進(jìn)制日志文件,其主要作用有兩個(gè):
* 數(shù)據(jù)回復(fù)
* 主從數(shù)據(jù)庫.用于slave端執(zhí)行增刪改,保持與master同步.
MYSQL入門1.開啟binary log功能
MYSQL入門???? 需要修改mysql的配置文件,本篇的實(shí)驗(yàn)環(huán)境是win7,配置文件為mysql安裝目錄\MySQL Server 5.1下的my.ini,添加一句log_bin = mysql_bin即可?
MYSQL入門
eg:
[mysqld]
......
log_bin = mysql_bin
......
log_bin是生成的bin-log的文件名,后綴則是6位數(shù)字的編碼,從000001開始,按照上面的配置,生成的文件則為:
mysql_bin.000001
mysql_bin.000002
......
MYSQL入門??
??? 配置保存以后重啟mysql的服務(wù)器,用show variables like? '%bin%'查看bin-log是否開啟,如圖:?
MYSQL入門
MYSQL入門2.查看產(chǎn)生的binary log
MYSQL入門?? bin-log因?yàn)槭嵌M(jìn)制文件,不能通過記事本等編輯器直接打開查看,mysql提供兩種方式查看方式,在介紹之前,我們先對(duì)數(shù)據(jù)庫進(jìn)行一下增刪改的操作,否則log里邊數(shù)據(jù)有點(diǎn)空.?
MYSQL入門
create table bin( id int(10) primary key auto_increment,name varchar(255));
MYSQL入門(測(cè)試前我已經(jīng)建表)?
MYSQL入門
insert into bin(name) values ('orange');
MYSQL入門???? 1.在客戶端中使用? show binlog events in 'mysql_bin.000001'? 語句進(jìn)行查看,為了排序美觀,可以在結(jié)尾加\G使結(jié)果橫變縱,此時(shí)結(jié)尾無需加;語句結(jié)束符.
????? eg:
MYSQL入門
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 ***************************
...............省略...............
MYSQL入門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/" 定位,如果還沒有,那我就會(huì)說“各個(gè)系統(tǒng)的搜索功能都做的不錯(cuò)!”.這種查看方式就沒那個(gè)美觀了,如下
MYSQL入門
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*/;
MYSQL入門雖然排版有點(diǎn)亂,但從圖中我們可以得到更多信息,如時(shí)間戳,自增的偏移,是否自動(dòng)提交事務(wù)等信息.如下圖為從中提取的一部分.
MYSQL入門
MYSQL入門3.利用bin_log恢復(fù)數(shù)據(jù)
MYSQL入門??? (1).最長(zhǎng)用的就是回復(fù)指定數(shù)據(jù)端的數(shù)據(jù)了,可以直接恢復(fù)到數(shù)據(jù)庫中:?
MYSQL入門
mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 |mysql -uroot -p123456
MYSQL入門????? 亦可導(dǎo)出為sql文件,再導(dǎo)入至數(shù)據(jù)庫中:?
MYSQL入門
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
MYSQL入門???? (2).指定開始\結(jié)束位置,從上面的查看產(chǎn)生的binary log我們可以知道某個(gè)log的開始到結(jié)束的位置,我們可以在恢復(fù)的過程中指定回復(fù)從A位置到B位置的log.需要用下面兩個(gè)參數(shù)來指定:?
MYSQL入門
--start-positon="50" //指定從50位置開始
--stop-postion="100"http://指定到100位置結(jié)束
MYSQL入門?? 最后介紹幾個(gè)bin_log的操作:
?? (1).產(chǎn)看最后一個(gè)bin日志文件是那個(gè),現(xiàn)在位置
MYSQL入門
MYSQL入門??? (2).啟用新的日志文件,一般備份完數(shù)據(jù)庫后執(zhí)行
MYSQL入門
MYSQL入門??? (3).清空現(xiàn)有的所用bin-log
MYSQL入門
MYSQL入門4.binary log相關(guān)變量和參數(shù)
MYSQL入門命令行參數(shù)
MYSQL入門? --log-bin [=file_name]
MYSQL入門? 設(shè)置此參數(shù)表示啟用binlog功能,并制定路徑名稱.
MYSQL入門? --log-bin-index[=file]
MYSQL入門? 設(shè)置此參數(shù)是指定二進(jìn)制索引文件的路徑與名稱.
MYSQL入門? --max_binlog_size
MYSQL入門?Binlog最大值,最大和默認(rèn)值是1GB,該設(shè)置并不能嚴(yán)格控制Binlog的大小,尤其是Binlog比較靠近最大值而又遇到一個(gè)比較大事務(wù)時(shí),
MYSQL入門為了保證事務(wù)的完整性,不可能做切換日志的動(dòng)作,只能將該事務(wù)的所有SQL都記錄進(jìn)當(dāng)前日志,直到事務(wù)結(jié)束.
MYSQL入門? --binlog-do-db=db_name
MYSQL入門? 此參數(shù)表示只記錄指定數(shù)據(jù)庫的二進(jìn)制日志
MYSQL入門? --binlog-ignore-db=db_name
MYSQL入門? 此參數(shù)表示不記錄指定的數(shù)據(jù)庫的二進(jìn)制日志
MYSQL入門系統(tǒng)變量
MYSQL入門? log_bin
MYSQL入門? binlog_cache_size
MYSQL入門? 此參數(shù)表示binlog使用的內(nèi)存大小,可以通過狀態(tài)變量binlog_cache_use和binlog_cache_disk_use來幫助測(cè)試.
MYSQL入門? max_binlog_cache_size
MYSQL入門? 此參數(shù)表示binlog使用的內(nèi)存最大的尺寸
MYSQL入門? binlog_cache_use
MYSQL入門? 使用二進(jìn)制日志緩存的事務(wù)數(shù)量
MYSQL入門? binlog_cache_disk_use
MYSQL入門? 使用二進(jìn)制日志緩存但超過binlog_cache_size值并使用臨時(shí)文件來保存事務(wù)中的語句的事務(wù)數(shù)量.
MYSQL入門? binlog_do_db
MYSQL入門? binlog_ignore_db
MYSQL入門? sync_binlog
MYSQL入門? 這個(gè)參數(shù)直接影響mysql的性能和完整性.
MYSQL入門? sync_binlog=0:
MYSQL入門? 當(dāng)事務(wù)提交后,Mysql僅僅是將binlog_cache中的數(shù)據(jù)寫入binlog文件,但不執(zhí)行fsync之類的磁盤,同步指令通知文件系統(tǒng)將緩存刷新到磁盤,而讓Filesystem自行決定什么時(shí)候來做同步,這個(gè)是性能最好的.
MYSQL入門? sync_binlog=0,在進(jìn)行n次事務(wù)提交以后,Mysql將執(zhí)行一次fsync之類的磁盤同步指令,通知文件系統(tǒng)將Binlog文件緩存刷新到磁盤.
MYSQL入門? Mysql中默認(rèn)的設(shè)置是sync_binlog=0,即不做任何強(qiáng)制性的磁盤刷新指令,這時(shí)性能是最好的,但風(fēng)險(xiǎn)也是最大的.一旦系統(tǒng)Crash,在文件系統(tǒng)緩存中的所有Binlog信息都會(huì)丟失.
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/1077.html