您的位置:首页 > 数据库 > MySQL

开启mysql的binlog日志&查看$备份

2019-01-12 11:23 447 查看

1、5.7版本前

 修改my.cnf文件,添加log-bin=my-bin(my.cnf的位置根据自己安装的路径查看)
# vi /usr/local/mysql/my.cnf
log-bin=my-bin            #my-bin就是bin-log文件的名字,可以根据各自情况自定义文件名

log_bin是生成的bin-log的文件名,后缀则是6位数字的编码,从000001开始,按照上面的配置,生成的文件则为: my_bin.000001 my_bin.000002 ......

或自定义存放bin-log的位置,默认情况下是在mysql data目录下,如
log-bin=/mysql/data/my-bin
注意:/mysql/data文件夹的权限需要mysql的。
修改后需要重启mysql
# service mysql restart

查看是否开启
mysql> show variables like 'log_bin%';


2、5.7及以后的版本 

在5.6的版本情况下需要多添加一个参数
server-id=123456789        #123456789是唯一的值就好

3、查看日志文件

(1)查看所有日志文件:
mysql> show binary logs;   或show master logs;

(2)查看正在写入的日志文件:
mysql> show master status;

(3)查看当前binlog文件内容:
mysql> show binlog events;  #可以格式化输出 show binlog events\G; 或指定日志文件查看show binlog events in 'my-bin.000001';

注:
Log_name:此条log存在哪个文件中 
Pos:log在bin-log中的开始位置 
Event_type:log的类型信息 
Server_id:可以查看配置中的server_id,表示log是哪个服务器产生 
End_log_pos:log在bin-log中的结束位置 
Info:log的一些备注信息,可以直观的看出进行了什么操作 
(4)手动启用新的日志文件,一般备份完数据库后执行
 mysql> show master status; 


mysql> flush logs; #结束正在写入日志文件

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
(5)删除所有二进制日志,并从新开始记录
mysql> show master status;

1 row in set (0.00 sec)
mysql> reset master; #重新开始
c)
mysql> show master status;

还有:
mysql> purge master logs to 'mysql-bin.000002';  #是将'mysql-bin.000002'编号之前的所有日志进行删除
mysql> purge master logs before 'yyyy-mm-dd hh:mm:ss' #是将在'yyyy-mm-dd hh:mm:ss'时间之前


4.二进制日志文件导出

# mysqlbinlog  binlog.000001 >1.sql #到处成sql格式
# mysqlbinlog --start-datetime="2018-03-20 11:25:56" --stop-datetime="2018-03-20 14:20:10" mysql-bin.000001 > /data/test01.log #按时间点导出
# mysqlbinlog --start-position=203  --stop-position=203 mysql-bin.000001 > /data/test02.log #按事件位置导出

5.恢复数据

 强烈建议:做任何恢复之前都给数据库做一个完整备份,新建库进行恢复。
恢复
 bin-log是记录着mysql所有事件的操作,可以通过bin-log做完整恢复,基于时间点的恢复,和基于位置的恢复
(1)基于时间点的恢复,如果确认误操作时间点为2018-03-20 10:00:00执行如下
# mysqlbinlog --stop-date='2018-03-02 9:59:59' mysql-bin.000001 | mysql -uroot -p
然后跳过误操作的时间点,继续执行后面的binlog
# mysqlbinlog --start-date='2018-03-20 10:01:00' mysql-bin.000001 | mysql -uroot -p
其中--stop-date='2018-03-20 9:59:59' 和 --start-date='2018-03-20 10:01:00' 
取两时间点
# mysqlbinlog --start-datetime="2018-03-20 11:25:56" --stop-datetime="2018-03-20 14:20:10" mysql-bin.000001 | mysql -u root -p
#注:其中的时间是你误操作的时间,而且这个时间点还可能涉及到的不只是误操作,也有可能有正确的操作也被跳过去了。那么执行位置恢复
基于位置恢复,通过查看日志文件信息,确认6259-6362为误操作点
# mysqlbinlog --stop-position=6259 mysql-bin.000001 | mysql -uroot -p #从1开始至6259的事件读,不包括6259事件
# mysqlbinlog --start-position=6363 mysql-bin.000001 | mysql -uroot -p #从6259的事件开始读
# 取两事件点
mysqlbinlog --start-position=5786 --stop-position=6254 mysql-bin.000001 | mysql -uroot -p
到此为止基本就可以恢复被误删的数据了。
当然我们平时还是要管理好数据库权限,避免萌新们误删数据带来不必要的麻烦。当我们操作生产环境上的正式数据库时候一点要在操作之前先备份,提前做好准备。避免给正式数据库造成不必要的数据污染。
 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: