zoukankan      html  css  js  c++  java
  • mysqlbinlog工具基于日志恢复详细解释

    如果每天都会生成大量的二进制日志,这些日志长时间不清理的话,将会对磁盘空间带来很大的浪费,所以定期清理日志是DBA维护mysql的一个重要工作

    1)RESET MASTER
    在上面查看日志存放的文件夹中,二进制日志命名的格式是以mysql-bin.*,*代表日志的序号,序号是递增的,其中还有mysql-bin.index是日志的索引文件,记录了日志的最大序号
    我们执行RESET MASTER命名删除全部日志



    查看删除后的日志



    可以看到,以前的日志全部被清空,新的日志从00001开始

    2)PURGE MASTER LOGS TO & PURGE MASTER LOGS BEFORE
    执行PURGE MASTER LOGS TO 'mysql-bin.******'命令,是将'******'编号之前的所有日志进行删除
    执行PURGE MASTER LOGS BEFORE 'yyyy-mm-dd hh:mm:ss'命令,是将在'yyyy-mm-dd hh:mm:ss'时间之前的所有日志进行删除

    3)-EXPIRE_LOGS_DAYS
    此参数是设置日志的过期天数,过期的日志将会被自动删除,这有利于减少我们管理日志的工作量,需要修改my.cnf


    这里我们设定保存日志为3天,3天之后过期的日志将被自动删除

    恢复
     bin-log是记录着mysql所有事件的操作,当mysql发生灾难性错误时,可以通过bin-log做完整恢复,基于时间点的恢复,和基于位置的恢复


    完整恢复,假定我们每天凌晨2点都会使用mysqldump备份数据库,但在第二天早上9点由于数据库出现了故障,数据无法访问,需要恢复数据,先使用昨天凌晨备份的文件进行恢复到凌晨2点的状态,在使用mysqlbinlog恢复自mysqldump备份以来的binlog
    mysql localhost mysql-bin.000001 | mysql -uroot -p
    这样数据库就可以完全的恢复到崩溃前的完全状态

    基于时间点的恢复
    ,由于误操作,比如说删除了一张表,这时使用上面讲的完全恢复是没有用的,因为日志里面还存在误操作的语句,,我们需要的是恢复到误操作前的状态,然后跳过误操作的语句,再恢复后面操作的语句,假定我们删除了一张表的误操作发生在10:00这个时间点,我们可以使用下面的语句用备份和binlog将数据恢复到故障前

    mysqlbinlog --stop-date='2010-09-04 9:59:59' /var/log/mysql-bin.000001 | mysql -uroot -p


    然后跳过误操作的时间点,继续执行后面的binlog

    mysqlbinlog --start-date='2010-09-04 10:01:00' /var/log/mysql-bin.000001 | mysql -uroot -p


    其中--stop-date='2010-09-04 9:59:59' 和 --start-date='2010-09-04 10:01:00' 其中的时间是你误操作的时间点,当然了,这个时间点你需要你自己计算的,而且这个时间点还可以涉及到的不只是误操作,还可以有正确的操作也被跳过去了。

    基于位置恢复,由于上面提到的,使用基于时间点的恢复可能出现,在一个时间点里面可能存在误操作和其他正确的操作,所以我们需要一种更为精确的恢复方式
    使用mysqlbinlog查看二进制,可看到



    其中drop tables test1这个误操作的end_log_pos为8879917,几下这个id,得出它前后操作的id分别为8879916,8879918
    我们将进行位置恢复操作

    mysqlbinlog --stop-position='8879916' /var/log/mysql-bin.000001 | mysql -uroot -p

    mysqlbinlog --start-position='8879918' /var/log/mysql-bin.000001 | mysql -uroot -p

    服务器生成的二进制日志文件写成二进制格式。要想检查这些文本格式的文件,应使用mysqlbinlog实用工具。
    应这样调用mysqlbinlog
    shell> mysqlbinlog [options] log-files例如,要想显示二进制日志binlog.000003的内容,使用下面的命令:
    shell> mysqlbinlog binlog.0000003输出包括在binlog.000003中包含的所有语句,以及其它信息例如每个语句花费的时间、客户发出的线程ID、发出线程时的时间戳等等。
    通常情况,可以使用mysqlbinlog直接读取二进制日志文件并将它们用于本地MySQL服务器。也可以使用–read-from-remote-server选项从远程服务器读取二进制日志。
    当读取远程二进制日志时,可以通过连接参数选项来指示如何连接服务器,但它们经常被忽略掉,除非你还指定了–read-from-remote-server选项。这些选项是–host、–password、–port、–protocol、–socket和–user。
    还可以使用mysqlbinlog来读取在复制过程中从服务器所写的中继日志文件。中继日志格式与二进制日志文件相同。

    mysqlbinlog支持下面的选项:
    ·
    —help,-?
    显示帮助消息并退出。
    ·
    —database=db_name,-d db_name
    只列出该数据库的条目(只用本地日志)。
    ·
    –force-read,-f
    使用该选项,如果mysqlbinlog读它不能识别的二进制日志事件,它会打印警告,忽略该事件并继续。没有该选项,如果mysqlbinlog读到此类事件则停止。
    ·
    –hexdump,-H
    在注释中显示日志的十六进制转储。该输出可以帮助复制过程中的调试。在MySQL 5.1.2中添加了该选项。
    ·
    –host=host_name,-h host_name
    获取给定主机上的MySQL服务器的二进制日志。
    ·
    –local-load=path,-l pat
    为指定目录中的LOAD DATA INFILE预处理本地临时文件。
    ·
    –offset=N,-o N
    跳过前N个条目。
    ·
    –password[=password],-p[password]
    当连接服务器时使用的密码。如果使用短选项形式(-p),选项和 密码之间不能有空格。如果在命令行中–password或-p选项后面没有 密码值,则提示输入一个密码。
    ·
    –port=port_num,-P port_num
    用于连接远程服务器的TCP/IP端口号。
    ·
    –position=N,-j N
    不赞成使用,应使用–start-position。
    ·
    –protocol={TCP | SOCKET | PIPE | -position

    使用的连接协议。
    ·
    –read-from-remote-server,-R
    从MySQL服务器读二进制日志。如果未给出该选项,任何连接参数选项将被忽略。这些选项是–host、–password、–port、–protocol、–socket和–user。
    ·
    –result-file=name, -r name
    将输出指向给定的文件。
    ·
    –short-form,-s
    只显示日志中包含的语句,不显示其它信息。
    ·
    –socket=path,-S path
    用于连接的套接字文件。
    ·
    –start-datetime=datetime
    从二进制日志中第1个日期时间等于或晚于datetime参量的事件开始读取。datetime值相对于运行mysqlbinlog的机器上的本地时区。该值格式应符合DATETIME或TIMESTAMP数据类型。例如:
    shell> mysqlbinlog –start-datetime=”2004-12-25 11:25:56″ binlog.000003该选项可以帮助点对点恢复。
    ·
    –stop-datetime=datetime
    从二进制日志中第1个日期时间等于或晚于datetime参量的事件起停止读。关于datetime值的描述参见–start-datetime选项。该选项可以帮助及时恢复。
    ·
    –start-position=N
    从二进制日志中第1个位置等于N参量时的事件开始读。
    ·
    –stop-position=N
    从二进制日志中第1个位置等于和大于N参量时的事件起停止读。
    ·
    –to-last-logs,-t
    在MySQL服务器中请求的二进制日志的结尾处不停止,而是继续打印直到最后一个二进制日志的结尾。如果将输出发送给同一台MySQL服务器,会导致无限循环。该选项要求–read-from-remote-server。
    ·
    –disable-logs-bin,-D
    禁用二进制日志。如果使用–to-last-logs选项将输出发送给同一台MySQL服务器,可以避免无限循环。该选项在崩溃恢复时也很有用,可以避免复制已经记录的语句。注释:该选项要求有SUPER权限。
    ·
    –user=user_name,-u user_name
    连接远程服务器时使用的MySQL用户名。
    ·
    –version,-V
    显示版本信息并退出。

  • 相关阅读:
    Swift入门篇-Hello World
    Swift入门篇-swift简介
    Minecraft 插件 world edit 的cs 命令
    搭建本地MAVEN NEXUS 服务
    MC java 远程调试 plugin 开发
    企业内部从零开始安装docker hadoop 提纲
    javascript 命令方式 测试例子
    ca des key crt scr
    JSF 抽象和实现例子 (函数和属性)
    form 上传 html 代码
  • 原文地址:https://www.cnblogs.com/archoncap/p/5035698.html
Copyright © 2011-2022 走看看