mysql使用binlog日志和增量备份(这里用的是linux环境下的mariadb)

查看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';

结果如图:
mysql使用binlog日志和增量备份(这里用的是linux环境下的mariadb)_第1张图片
模拟恢复数据的操作

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)

插入2条数据,如图:
在这里插入图片描述
然后不小心删除了这2条。

查看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,比对时间看是否和误删时间一致,如图:mysql使用binlog日志和增量备份(这里用的是linux环境下的mariadb)_第2张图片
要恢复数据,只要找到删除之前的状态即可,执行命令(删除动作的节点是1011):

mysqlbinlog --start-position=245 --stop-position=1011 /var/lib/mysql/bin-log.000003 |mysql -uroot -p1234

然后看数据库,发现数据恢复了,如图:
在这里插入图片描述

你可能感兴趣的:(mysql)