1.開啟binlog
安裝了mysql後,binlog預設是關閉的
show variables like '%log_bin%'
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,執行這之間的操作即可
但是如果某次大面積的誤更新操作後,沒有及時發現,在錯誤資料的基礎上又産生了很多新的資料,也隻有恢複到誤更新之前,然後手動修複其餘的資料