概念&功能
二進制日志是指,當你進行數據流的操作時,數據庫會記錄除了select以的sql操作,例如update、delete、alter……,記錄的類型包含了完整的sql語句、操作時間、執行時間、錯誤代碼等。
有了二進制日志,就可以將數據回滾到任意時刻,比如數據庫崩潰的前夕,或者其他災難的前一時刻,幾乎可以做到數據0丟失,能夠體驗到時光倒流,如同“穿越”的感覺。
使用方法
要想使用二進制日志,首先確定你的數據庫版本支持,自mysql5.1開始二進制日志就取代了原來的“更新日志”。
打開配置文件my.cnf進行選項設置
代碼如下 復制代碼12 [mysqld] log-bin=<path>
這樣當你重啟mysql服務器的時候,就會創建相應的目錄和文件。文件名是以數字序號為擴展名的文件,如果在配置文件中設置了分割大小值,當單個二進制文件達到這個限制時就會自動生成一個新的文件,也可以使用在工具mysqladmin中運行flush-logs命令來手動刷新,以及再次運行mysqldump進行完整備份時加參數–flush-logs或–deletel-masger-logs 來刷新或刪除日志。
這些mysql日志我們可以使用mysqlbinlog二進制日志文件工具處理
服務器生成的二進制日志文件寫成二進制格式。要想檢查這些文本格式的文件,應使用mysqlbinlog實用工具。
應這樣調用mysqlbinlog:
shell> mysqlbinlog [options] log-files...
例如,要想顯示二進制日志binlog.000003的內容,使用下面的命令:
代碼如下 復制代碼shell> mysqlbinlog binlog.0000003
輸出包括在binlog.000003中包含的所有語句,以及其它信息例如每個語句花費的時間、客戶發出的線程ID、發出線程時的時間戳等等。
查看二進制日志:
1 mysqlbinlog xxx-bin.000989
配合grep篩選:
代碼如下 復制代碼1 mysqlbinlog xxxx-bin.000989 |grep uid=9527
當然也可以通過正則而模糊查看:
代碼如下 復制代碼1 mysqlbinlog xxxx-bin.[0-9]*
運行回滾操作:
12 #如果不是進行回滾,不要執行這條 mysqlbinlog xxxx-bin.[0-9]* | mysql
注意事項:
•如果在my.cnf中指定了默認編碼,將會導致二進制查看時報錯unknown variable ‘default-character-set=utf8′,這是一個bug,個人理解是由於客戶端和配置文件的這一方式二進制根據沒有進行相應的更新支持。預計在以後的版本中就消除這個bug。臨時的解決方法就是注釋掉配置文件中這一句,不用重啟mysql服務,帶使用完這個工具,在將注釋去掉即可。
•如果使用了二進制日志,則對性能有一定影響,據官方預計在1%左右。當然,對於它所起到的強大作用而言,1%性能損耗是完全值得的。