mysql binary logs_mysql 使用binary logs 恢复数据

一、使用mysqlbinlog命令管理binlog或者relaylog1、mysqlbinlog命令常用选项-d | --database:从二进制日志文件中过滤出某个库的日记信息--base64-output=decode-rows:将row格式日志进行解码,否则看到的是乱码,因为rows格式是加密的--start-datetime=:指定时间节点,同理还有--stop-datetime指定结束时间--start-position=:指定位置节点,同理还有--stop-position指定结束位置-v|-vv|-vvv:详细的信息更详细2、mysqlbinlog命令示例1、显示某binlog或relaylog所有内容,并且对rows格式的日志解码1mysqlbinlog-vvv --base64-output=decode-rows master.bin.000003#将rows的日志内容解码,可用于数据恢复时查找正确的操作2、显示指定日期范围内的binlog或relaylog,并且对rows格式的日志解码1mysqlbinlog-vvv --base64-output=decode-rows --start-datetime='2018-02-13 11:37:00' --stop-datetime='2018-02-15 12:00:00' master-bin.000001

3、显示指定position范围内的binlog或relaylog,并且对rows格式的日志解码1mysqlbinlog-vvv --base64-output=decode-rows --start-position=3052 master-bin.000002#显示从3052开始的所有内容2mysqlbinlog-vvv --base64-output=decode-rows --start-position=3052 --stop-position=3849 master-bin.000002 #显示3052-3849的内容4、显示指定某个库的binlog或relaylog,并且对rows格式的日志解码1mysqlbinlog-vvv --base64-output=decode-rows --start-datetime='2018-10-12 14:42:00' --stop-datetime='2018-10-12 14:45:00' --database=test_database mysql-bin.000008 > /tmp/bin.sql5、gtid模式下,导出多个binlog或relaylog文件中的数据1mysqlbinlog--include-gtids='yourgtid:1-100' mysql-bin.00001 mysql-bin.00002 mysql-bin.00003 mysql-bin.00004 > /tmp/gtid.sql #假设101的GTID为drop table,就截取到100即可

二、使用show binlog events查看事件(适用于relaylog)1mysql>show master logs; #显示当前主库所有二进制日志情况2mysql>show binary logs; #和上面作用一样3mysql>flush logs; #刷新并生成新的二进制日志文件4mysql> show binlog | relaylog events in 'master-bin.000002'; #显示二进制日志的内容5mysql> show binlog | relaylog events in 'master-bin.000002'limit5; #只显示5条6mysql> show binlog | relaylog events in 'master-bin.000002' from 3390limit5; #从3390位置开始显示5条7mysql> purge master logs to 'master-bin.000002'; #删除指定的二进制日志8mysql> purge master logs before '2018-02-17 10:30:00';

使用show binlog event命令时关注Event_type为Query的语句,这些就是引起数据库内容变化的SQL,Pos和End_log_pos字段内容是语句的开始和结束位置,具体的SQL在Info字段中。由于每个DDL本身就是一个事件,所以能直接在Info中看到,而DML语句都是由BEGIN开头,COMMIT结束,所以Pos信息应该以Begin为准,End_log_pos则是看COMMIT的。

企业微信截图_20181012115349.png

三、删除binlog日志的正确方法

由于二进制日志会随着数据库操作的增多而不断增长,在一段时间后需要删除一些无用的二进制日志,由于直接rm删除可能会破话binlog的文件索引文件,所以需要用purge命令来操作(reset master虽然也可以清空日志文件,但会导致从库出错)1mysql> PURGE {MASTER | BINARY} LOGS TO 'xxxxx-bin.00000X'#删除日志文件到指定的文件为止2mysql> PURGE {MASTER | BINARY} LOGS BEFORE 'date'#删除某个日期之前的文件

四、使用binlog进行数据恢复

如果不小心删错了库或表,可以使用历史备份与备份之后的binlog日志进行数据的恢复。建议找一台机器恢复数据后再导出到生产环境中

模拟事故过程1、建立一个数据库,并在其中创建一张表并插入数据1mysql>create database student;2mysql>use student;3mysql> create table student(id int,name varchar(10),age int);4mysql> insert into student values ('1','tanglu','28'),('2','zouxiaolu','28'),('3','beibei','28');2、进行完整的备份,这样之前的数据已经有了备份1mysqldump-u root -p --master-data=2 student >student.sql3、再次插入三条数据1mysql> insert into student values('4','doudou','8');2Query OK,1 row affected (0.01sec)3

4mysql> insert into student values('5','mengmeng','28');5Query OK,1 row affected (0.00sec)6

7mysql> insert into student values('6','haha','10');8Query OK,1 row affected (0.01sec)4、模拟误操作,删除之前表格中的所有数据1mysql> delete fromstudent ;

恢复数据过程1、重启数据库或者执行flush-logs来获得一个新的二进制日志文件,这样故障操作日志都在之前的binlog文件里1mysql>flush logs;2、用完整备份恢复数据,这样前面3条数据就恢复成功1mysql-u root -p student server2.sql2# mysqlbinlog--database=linuxe --start-datetime="" --stop-datetime="" mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 >xxxx.sql #以时间为维度一次性从多个binlog中恢复数据的办法,如果同一秒有多个的话需要将start改为position4、恢复数据1mysql> set sql_log_bin=0#临时关闭binlog,避免导入时生成重复binlog2mysql> source /tmp/binlog.sql

根据提供的引用内容,mysql内存参数"binlog_expire_logs_auto_purge"用于控制自动清理(binlog)日志的功能。该参数的作用是设置binlog日志的自动清理功能是否开启。默认情况下,该参数的值为"ON",表示开启自动清理功能。当开启自动清理功能后,系统将会根据"binlog_expire_logs_seconds"参数的设置来自动清理过期的binlog日志。 需要注意的是,在MySQL 8.0以下版本中,binlog日志的保存时效是以天为单位,通过"expire_logs_days"参数来设置,默认为0,表示永不过期。而在MySQL 8.0以上版本中,binlog日志的保存时效是以秒为单位,通过"binlog_expire_logs_seconds"参数来设置,默认为2592000秒(30天)。 要对binlog日志进行手动清理,有几种常用的方法。一种是使用"PURGE BINARY LOGS"语句,可以清理指定的binlog文件之前的所有binlog日志。例如: PURGE BINARY LOGS TO 'mysql-bin.000035'; 另一种是使用"PURGE MASTER LOGS"语句,可以清理指定时间点之前的所有binlog日志。例如: PURGE MASTER LOGS BEFORE '2019-09-09 13:00:00'; 通过这些方法,可以手动清理过期的binlog日志,从而释放数据库的存储空间。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [mysql8.0设置binlog保存时间,并清除过期日志释放空间](https://blog.csdn.net/Qingyunya/article/details/128395035)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Mysql数据库清理binlog日志命令详解](https://download.csdn.net/download/weixin_38687277/14907673)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值