查看binlog状态(off是关闭,on是启动):
show variables like 'log_bin'; #默认是off
开启binlog
修改/etc/my.cnf
文件,在[mysqlId]
下面加入:
log_bin = /var/lib/mysql/bin-log # 日志文件名的位置和前缀
log_bin_index = /var/lib/mysql/mysql-bin.index #这个文件存放所有日志文件名列表
expire_logs_days = 7
server_id = 0002 # 集群下用到,一般别写server_id=1就行
binlog_format = ROW
保存后,重启mariadb:
systemctl restart mariadb
再次查看binlog状态, on表示启动了:
show variables like 'log_bin';
操作日志
查看日志列表:
show binary logs; #或者 show master logs
查看某个日志:
show binlog events; #查看第一个log文件
show binlog events in 'bin-log.000001'; #查看 bin-log.000001 的内容
查看当前写入的是哪个日志文件:
show master status; #如返回bin-log.000003
清空日志:
flush logs; #新建立一个日志文件,用show binlog events; 看是否多了个文件
清空所有日志文件:
reset master; #或者flush master; 清空所有日志文件,用show binlog events; 看会发现还有一个bin-log.000001,是因为清空之后,自动会新建一个
查看日志具体内容
查看文件内容:
mysqlbinlog '/var/lib/mysql/bin-log.000001';
时间范围内的文件内容:
mysqlbinlog --start-datetime='2019-02-17 00:00:00' --stop-datetime='2019-02-19 01:01:01' '/var/lib/mysql/bin-log.000001';
游标范围内的文件内容:
mysqlbinlog --start-position=1 --stop-position=1000 '/var/lib/mysql/bin-log.000001'; #游标一定不要选过程中的游标,要用已存在的游标
查看详细内容(操作语句等默认不显示,要显示在文件名前加-vv
):
mysqlbinlog -vv '/var/lib/mysql/bin-log.000001';
flush logs; #新建一个日志文件 或者用reset master;(这个删除全部,并新建一个日志文件)
show master log;
如下输出(说明当前日志文件是bin-log.000003,position是245):
MariaDB [(none)]> show master logs;
+----------------+-----------+
| Log_name | File_size |
+----------------+-----------+
| bin-log.000001 | 795 |
| bin-log.000002 | 6541 |
| bin-log.000003 | 245 |
+----------------+-----------+
3 rows in set (0.00 sec)
查看bin-log.000003文件(不加--stop-position
表示直到文件尾部):
mysqlbinlog --start-position=245 /var/lib/mysql/bin-log.000003
导出到文件(这样就可以用vim来打开,更好找内容):
mysqlbinlog --start-position=245 -vv /var/lib/mysql/bin-log.000003 > /root/bin-log.000003
vim打开 /root/bin-log.000003
,输入 /DELETE
, 按回车找到第一个DELETE,比对时间看是否和误删时间一致,如图:
要恢复数据,只要找到删除之前的状态即可,执行命令(删除动作的节点是1011
):
mysqlbinlog --start-position=245 --stop-position=1011 /var/lib/mysql/bin-log.000003 |mysql -uroot -p1234