天天看點

MySQL(三)利用binlog日志恢複資料

1.開啟binlog

安裝了mysql後,binlog預設是關閉的

show  variables like  '%log_bin%'

MySQL(三)利用binlog日志恢複資料

vim /etc/mysql/my.cnf  添加

[mysqld] 

log-bin=mysql-bin

server-id=1

添加完後重新開機  sudo service mysql restart

重新開機完成後在 /var/lib/mysql/下會生成   mysql-bin.index和mysql-bin.000001

/var/lib/mysql/是預設的目錄,mysql-bin是日志檔案名的字首

也可以指定日志檔案的路徑,比如需要指定為/logs/mysql-binlog/

關于配置的方法,網上很多文章都說

[mysqld]

log-bin=/logs/mysql-binlog/mysql-bin

這樣配置其實沒有問題,但是由于mysql是以mysql使用者運作的,如果沒有/logs/mysql-binlog/目錄的權限,重新開機的時候會報錯

執行下面的指令,親測可行

sudo chown -R mysql mysql-binlog

sudo vim /etc/apparmor.d/usr.sbin.mysqld

添加 /logs/** rwk,

/etc/init.d/apparmor restart

2.常用指令

show [master|slave] status      //檢視目前的binlog日志狀态(這指令應該和主從複制有關)

show master logs     //檢視所有的日志檔案

flush logs  //生成一個新的日志檔案

reset master    //清空之前的日志,生成一個新的日志

show binlog events in 'mysql-bin.000002'        //檢視日志中記錄的事件

#################下面是非mysql指令###################

mysqlbinlog --no-defaults --base64-output=decode-rows -v  mysql-bin.000002     //檢視日志内容

mysqlbinlog --no-defaults --start-position=4 --stop-position=1009 mysql-bin.000002 | mysql -udebian-sys-maint -p1111 test      //start-position和stop-position可以通過  show binlog events in 'mysql-bin.000002'擷取

3.利用mysqldump和binlog恢複資料

定期備份,并且用binlog記錄下對資料庫的更改,就可以實作資料的恢複

備份前先flush logs,産生一個新的binlog日志檔案,鎖住需要備份的所有的表,并手動記錄下這一次備份和備份後産生的這個bin-log日志檔案之間的關系

mysqldump -udebian-sys-maint -p1111 [dbname] -F > '[輸出的檔案路徑]'     //指令預設會鎖住所有的表,-F表示重新整理日志

這樣當資料遭到嚴重破壞的時候,就可以先利用備份腳本恢複資料,然後找到備份後的position到出錯前的position,執行這之間的操作即可

但是如果某次大面積的誤更新操作後,沒有及時發現,在錯誤資料的基礎上又産生了很多新的資料,也隻有恢複到誤更新之前,然後手動修複其餘的資料

繼續閱讀