mysql 二進位制日誌恢復

2021-07-15 10:44:44 字數 3468 閱讀 2353

mysql開啟二進位制日誌記錄檔案

# binary logging.

log-bin=/data0/mysql/mybinlog.log

sync_binlog=1

innodb_support_xa=1

簡介:mysql的二進位制日誌可以說或是mysql最重要的日誌了,它記錄了所有的ddl和dml(除了資料查詢語句)語句,以事件形式記錄,還包含語句所執行的消耗的時間,mysql的二進位制日誌是失誤安全型的.

mysql的二進位制日誌的作用是顯而易見的,可以方便的備份這些日誌以便做資料恢復,也可以作為主從複製的同步檔案,然而二進位制日誌的大小可能會根據不同的需求而存在麻煩,所以讓日誌回滾是必須的,當然mysql已經為我們提供了二進位制迴滾的功能,那就是max_binlog_size引數。

預設mysql的二進位制日誌達到1g後就會自動回滾,如果我們想要更小的二進位制日誌,可以使用max_binlog_size引數來設定。測試使用max_binlog_size=200m,具體應用就是在配置檔案裡新增這個引數max_binlog_size=200m,官方文件是這樣解釋的:

mysqld在每個二進位制日誌名後面新增乙個數字副檔名。每次你啟動伺服器或重新整理日誌時該數字則增加。如果當前的日誌大小達到 max_binlog_size,還會自動建立新的二進位制日誌。如果你正使用大的事務,二進位制日誌還會超過 max_binlog_size:事務全寫入乙個二進位制日誌中,絕對不要寫入不同的二進位制日誌中。也就是說,在達到max_binlog_size的時候,如果正在處理乙個大的事務,那麼二進位制日誌會在處理完這個事務後才會回滾,所以該二進位制日誌可能會大於所設定的max_binlog_size。

在主從複製的應用中,可能我們不希望二進位制日誌過大,因為日誌過大可能會影響日誌的執行效率,適當調整max_binlog_size的值還是非常有意義的,當然還要記得定期清理長時間不用的日誌哦,要不然你的硬碟空間很快就會被用完的。

開啟mysql二進位制日誌:

編輯my.cnf,新增

log-bin=/var/log/mysql/mysql-bin.log
開啟日誌後需要myssqladmin flush logs才能生效。

需要注意的是log-bin指定副檔名是無效的,當mysql建立二進位制日誌檔案時,首先建立乙個以「mysql_log_bin」為名稱,以「.index」為字尾的檔案;再建立乙個以「mysql_log_bin」為名稱,以 「.000001」為字尾的檔案。當mysql服務重新啟動一次以「.000001」為字尾的檔案會增加乙個,並且字尾名加1遞增;如果日誌長度超過了 max_binlog_size的上限(預設是1g)也會建立乙個新的日誌檔案;使用flush logs(mysql命令符)或者執行mysqladmin –u –p flush-logs(windows命令提示符)也會建立乙個新的日誌檔案。

檢視:由於日誌是以二進位制方式儲存的,不能直接讀取,需要使用mysql自帶的mysqlbinlog工具來進行檢視

mysqlbinlog mysql-bin.000002 -d test
mysqlbinlog有一些選項可以使用,簡單說明常用選項:

-d,--database=name :指定資料庫名稱,只列出指定資料庫的操作.

-d, --disable-log-bin :執行恢復的時候,禁止二進位制日誌.可以防止同一臺mysql加上-t時進入死迴圈

-o,--offset=n :忽略掉日誌前n行命令

-r,--result-file=name :將輸出日誌到指定檔案

-r, --read-from-remote-server :從乙個mysql伺服器上讀取二進位制

-s,--short-form :顯示簡單格式,省略一些資訊

-s, --socket=name :socket檔案連線path.

-t, --to-last-log :和-r一起使用,在二進位制日誌結束的時候並不會停止,而是在mysql伺服器最後生成的binlog結束,如果輸出和輸入都在一台mysql上可能會導致死迴圈.

--set-charset=char-name :在輸出文字格式的時候,在第一行加上set names char-name.

--start-datetime=# --stop-datetime=# :指定輸出起始日期的日誌.

--start-position=# --stop-position=# :指定起始日誌的位置.

清理:

刪除全部二進位制日誌:

reset master
刪除部分日誌:

purge master logs to & purge master logs before

purge master logs to 'mysql-bin.******'命令,是將'******'編號之前的所有日誌進行刪除

purge master logs before 'yyyy-mm-dd hh:mm:ss'命令,是將在'yyyy-mm-dd hh:mm:ss'時間之前的所有日誌進行刪除

expire_log_day=5
這裡設定儲存5天的日誌,超過5天的日誌會被自動刪除

恢復:完全恢復:

mysqlbinlog mysql-bin.00001|mysql -uroot -p
基於時間點的恢復:

如果誤刪了一張表,使用完全恢復是沒有用的,因為日誌裡同樣也保留著刪除的sql語句,所以我們需要恢復到誤操作前的狀態,然後跳過誤操作的語句。

假如我在20:00誤刪了一張表,可以使用以下語句恢復:

mysqlbinlog --stop-date='2012-06-05 19:59:59' /var/log/mysql-bin.000001 | mysql -uroot -p
跳過誤刪除的時間點,再執行:

mysqlbinlog --start-date='2012-06-05 20:01:00' /var/log/mysql-bin.000001 | mysql -uroot -p
基於位置點的恢復:

基於位置點的恢復可以得到更為精確的資料。

如上圖,drop table test這條語句的起始位置是889107,終止位置是889189,那麼我們可以使用於以下語句進行恢復:

mysqlbinlog --stop-position='889107' /var/lib/mysql/mysql-bin.000001|mysql -uroot -p

mysqlbinlog --start-position='889189' /var/lib/mysql/mysql-bin.000001|mysql -uroot -p

有時有可能因為系統版本的問題,以上方法行不通,可以將二進位制導出到乙個sql檔案中,再直接根據sql語句進行恢復,這樣匯出後log.sql就有sql語句,把語句複製到工具或者phpmyadmin裡執行

mysqlbinlog  mysqlbinlog.000001 >log.sql

mysql二進位制恢復 mysql二進位制日誌恢復

二進位制日誌匯出 1.按時間節點匯出 no defaults 用來對mysql5.5之前mysqlbinlog命令報錯 mysqlbinlog no defaults start date 2017 08 08 15 04 04 stop date 2017 08 08 15 12 00 progr...

mysql 二進位制日誌

如果mysql 伺服器啟用了二進位制日誌,你可以使用mysqlbinlog工具來恢復從指定的時間點開始 例如,從你最後一次備份 直到現在或另乙個指定的時間點的資料。mysqlbinlog 用於處理二進位制日誌檔案的實用工具 要想從二進位制日誌恢復資料,你需要知道當前二進位制日誌檔案的路徑和檔名。一般...

mysql 二進位制日誌

1.日誌型別 二進位制日誌記錄了所有對mysql資料庫的修改事件,包括增刪改事件和對錶結構的修改事件。2.配置使用二進位制日誌 在my.ini 配置 log bin mysql bin 3.二進位制日誌格式 基於段的日誌格式 binlog format statement 記錄了操作的sql語句。優...