1:開啟binlog日志記錄
# log-bin
log-bin = E:/log/logbin.log
檢視備份的二進制檔案
c:\mysql\bin\>mysqlbinlog e:/log/logbin.000001
">": 導入到檔案中; ">>": 追加到檔案中
c:\mysql\bin\> mysqlbinlog e:/log/logbin.000001 > e:/log/log.sql
c:\mysql\bin\> mysqlbinlog e:/log/logbin.000002 >> e:/log/log.sq
2.2 按指定位置導出:
c:\mysql\bin\>mysqlbinlog --start-position=185 --stop-position=338 e:/log/logbin.000001 > e:/log/log3.txt
2.3 按指定時間導出:
c:\mysql\bin\>mysqlbinlog --start-datetime="2010-01-07 11:25:56" --stop-datetime="2010-01-07 13:23:50" e:/log/logbin.000001 > e:/log/log_by_date22.txt
3:從備份恢複資料庫
c:\mysql\bin\>mysqlbinlog e:/log/logbin.000001 | mysql -u root -p
mysqlbinlog d:/mysql/data/binlog.000001 | mysql -uroot -pxcg213
3.2 按指定位置恢複:
c:\mysql\bin\>mysqlbinlog --start-position=185 --stop-position=338 e:/log/logbin.000001 | mysql -u root -p
3.3 按指定時間恢複:
c:\mysql\bin\>mysqlbinlog --start-datetime="2010-01-07 11:25:56" --stop-datetime="2010-01-07 13:23:50" e:/log/logbin.000001 | mysql -u root -p
3.4 通過導出的腳本檔案恢複
c:\mysql\bin\>mysql -e "source e:/log/log.sql"
4.其他常用操作
4.1 檢視所有日志檔案
Sql代碼
複制代碼 代碼如下:
mysql>show master logs;
4.2 目前使用的binlog檔案
>show binlog events;
mysql>show binlog events \g;
4.3 産生一個新的binlog日志檔案
Sql代碼
複制代碼 代碼如下:
mysql>flush logs;
4.4 删除所有二進制日志,并從新開始記錄(注意:reset master指令會删除所有的二進制日志)
mysql > flush logs;
mysql > reset master;
4.5 快速備份資料到sql檔案
c:\mysql\bin>mysqldump -u root -p --opt --quick interactive > e:/log/mysqldump.sql
為了友善檢視,把從腳本恢複的指令在寫一次
c:\mysql\bin\>mysql -e "source e:/log/mysqldump.sql"
更換政策:
使用索引來循環檔案,在以下條件将循環至下一個索引
1。伺服器重新開機
2。伺服器被更新
3。日志到達了最大日志長度 max_binlog_size
4。日志被重新整理 mysql> flush logs;
-------------------------------------------
2.記錄到二進制日志知的内容配置
binlog-do-db=sales 隻記錄sales庫
binlog-ignore-db=sales 除sales庫不記錄,其他都記錄
但是如果在操作資料庫之前,不使用use $dbname 那麼所有的SQL都不會記錄
如果使用了use $dbname,那麼判斷規則取決于這裡的$dbname,而不是SQL中操作的庫
----------------------------------------------------------------------------------
ERROR 1665 (HY000) at line 33: Cannot execute statement: impossible to write to
binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage
engine limited to row-based logging. InnoDB is limited to row-logging when tran
saction isolation level is READ COMMITTED or READ UNCOMMITTED.
解決辦法:
mysql> SET SESSION binlog_format = 'ROW';
mysql> SET GLOBAL binlog_format = 'ROW';
解釋參考:http://www.cnblogs.com/sunson/archive/2012/05/28.html
msyql>show variables like 'binlog%';
當然了,也能夠在運作時動态修正binlog的款式。例如
mysql> SET SESSION binlog_format = 'STATEMENT';
mysql> SET SESSION binlog_format = 'ROW';
mysql> SET SESSION binlog_format = 'MIXED';
mysql> SET GLOBAL binlog_format = 'STATEMENT';
mysql> SET GLOBAL binlog_format = 'ROW';
mysql> SET GLOBAL binlog_format = 'MIXED';
-------------------------------------------------------------------------------------
3.二進制日志不準确的處理http://www.lampblog.net/2011/01/mysql-binlog%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%97%A5%E5%BF%97%E8%AF%A6%E8%A7%A3/
預設情況下,并不是每次寫入時都将二進制日志與硬碟同步。是以如果作業系統或機器(不僅僅是MySQL伺服器)崩潰,有可能二進制日志中最後的語句丢失。
要想防止這種情況,你可以使用sync_binlog全局變量(1是最安全的值,但也是最慢的),使二進制日志在每N次二進制日志寫入後與硬碟同步。
即使sync_binlog設定為1,出現崩潰時,也有可能表内容和二進制日志内容之間存在不一緻性。
如果崩潰恢複時MySQL伺服器發現二進制日志變短了(即至少缺少一個成功送出的InnoDB事務),
如果sync_binlog =1并且硬碟/檔案系統的确能根據需要進行同步(有些不需要)則不會發生,則輸出錯誤消息 (“二進制日志<名>比期望的要小”)。
在這種情況下,二進制日志不準确,複制應從主伺服器的資料快照開始。
為了您的安全,請隻打開來源可靠的網址