Mysql 二進制日誌管理

Mysql 二進制日誌管理 mysql

MySQL二進制日誌是以事務安全的方式包含更新日誌中可用的全部信息。它包含了全部更新了數據或者已經潛在更新了數據(例如,沒有匹配任何行的一個DELETE)的全部語句。語句以「事件」的形式保存,它描述數據更改。 linux

運行服務器時若啓用二進制日誌則性能大約慢1%。可是,二進制日誌的好處,即用於恢復並容許設置複製超過了這個小小的性能損失。 sql

打開mysql二進制日誌

編輯mysql配置文件:/etc/my.cnfwindows下是my.ini),將「bin-log」一行前面的註釋去掉,默認是:#log-bin=mysql-bin,(沒有的話,本身手動添加一行),等號後面的mysql-bin是生成日誌的路徑和文件名,這裏表示在mysqldata目錄下生成,你也能夠本身改路徑,如log-bin=/data/mysql/log/mysql-bin windows

還能夠設置如下選項: 安全

binlog-do-db= db_name  #db_name更新記錄到二進制日誌中 服務器

binlog-ignore-db=db_name #不將db_name更新保存到二進制日誌中 ide

max_binlog_size= 104857600 #每一個日誌文件最大100M 工具

保存,重啓mysql 性能

重啓後看到有生成相似mysql-bin.000001mysql-bin.000002的文件就說明已經成功打開了二進制日誌。 spa

管理二進制日誌文件

1、查看當前已有的二進制日誌文件,執行sqlSHOW BINLOG EVENTS \G」或「SHOW MASTER LOGS」:

mysqlSHOW BINLOG EVENTS \G;

mysqlSHOW MASTER LOGS

2清除二進制日誌文件
mysql> PURGE { MASTER|BINARY } LOGS TO 'log_name';
mysql> PURGE { MASTER|BINARY } LOGS BEFORE 'datetime';
例如: 
mysql> PURGE MASTER LOGS TO 'mysql-bin.000001'; 
mysql> PURGE MASTER LOGS BEFORE '2010-06-20 13:00:00';


另外一種清除二進制日誌方法
mysql > flush logs;
mysql > reset master;

從二進制日誌文件恢復數據

mysqlbinlog:用於處理二進制日誌文件的實用工具;能夠用它來恢復從指定的時間點開始 (例如,從你最後一次備份)直到如今或另外一個指定的時間點的數據

使用方法:mysqlbinlog [options] log-files

mysqlbinlog有不少選項,具體可使用mysqlbinlog help查看:

如:bin>mysqlbinlog --help

(若是沒有將mysqlbinlog設置成系統命令,linux下能夠用find / -name "mysqlbinlog"搜索出mysqlbinlog的位置,windows下在mysql安裝目錄的bin文件夾下)

若是執行mysqlbinlog時出現相似unknown variable 'default-character-set=utf8'錯誤提示,是由於my.cnf(或my.ini)中的client選項組中添加了default-character-set=utf8,能夠有兩種辦法解決這個bug

第一種,執行時加上--no-defaults選項;如:mysqlbinlog --no-defaults --help

第二種,在使用mysqlbinlog工具時把my.cnf(或my.ini)中client選項組中default-character-set=utf8註釋掉。注意要記得在不在使用mysqlbinlog工具時取消這個註釋。

部分經常使用選項說明:

--start-datetime=datetime #從二進制日誌中第1個日期時間等於或晚於datetime參量的事件開始讀取, 格式應符合DATETIMETIMESTAMP數據類型datetime相對於運行mysqlbinlog的機器上的本地時區時間。

--stop-datetime=datetime #從二進制日誌中第1個日期時間等於或晚於datetime參量的事中止讀取,描述同start-datetime

--start-position=N #從二進制日誌中第1個位置等於N參量時的事件開始讀。

·       --stop-position=N  #從二進制日誌中第1個位置等於N參量時的事件中止讀。

示例:

1、 mysql-bin.000001中恢復從2010-01-01 01:00:00開始以後的數據:

bin> mysqlbinlog --start-datetime="2010-01-01 01:00:00mysql-bin.000001 | mysql -uroot -proot

2、 mysql-bin.000001中恢復從2010-01-01 01:00:002010-01-02 01:00:00之間的數據:

bin> mysqlbinlo--start-datetime="2010-01-01 01:00:00" --stop-datetime="2010-01-02 01:00:00" mysql-bin.000001 | mysql -uroot -proot

3、 從多個日誌文件中恢復數據:

bin> mysqlbinlog mysql-bin.000001 mysql-bin.000002 | mysql -uroot -proot

bin> ls -t -r -1 mysql-bin.* | xargs mysqlbinlog | mysql -uroot -proot

4、 其餘方式恢復:

bin> mysqlbinlog mysql-bin.000001 > /temp/binlog.sql #符號>表示建立新的文件,若是原來已經存在,則會覆蓋掉原文件。

bin> mysqlbinlog --stop-datetime="2010-01-02 01:00:00" mysql-bin.000002 >> /temp/binlog.sql #符號>>表示追加到內容後面。

bin> mysql -uroot -proot -e source /temp/binlog.sql #這步必須執行

相關文章
相關標籤/搜索