• 【转】【MySQL】mysql 通过bin-log恢复数据方法详解


    mysql中bin-log在mysql默认状态下是没有打开的,我们要先打开mysql 开启bin-log功能,然后再通过备份的bin-log进行数据库恢复了。

    具体的操作是通过mysqlbinlog这个指令来完成的

    /mysql/bin/mysqlbinlog --database=fox --start-date="2013-01-22 5:00:00"  --stop-date="2013-01-22 9:00:00" /mysql/data/mysql-bin.000001 | /mysql/bin/mysql -u root -p123456 -f 

    具体的参数看下名字就能明白

    database:指定具体的数据库
    start-date:开始时间
    stop-date:结束时间
    /mysql/data/mysql-bin.000001:

    指定的日志文件

    如果你没有备份数据的话,你就必须通过日志文件一个一个还原,记得顺序不能乱。如果你没有备份数据,日志又被部分删除的话,那么就悲剧了。因此,还原只是一种方法,最重要的还是定期备份数据。只要备份数据在,日志文件在,东西都可以解决。
    同时记录一些操作日志的方法
    查看所有日志:

    show master logs;

    当前使用的binlog文件

    show binlog events g; 

    产生一个新的binlog日志文件

    flush logs;

    删除所有二进制日志,并从新开始记录

    flush logs;  
    reset master;

    这里突然有一种想法,是否每次备份完数据以后就把之前的日志清理下,这样一旦发生问题,就可以从最近的日志开始还原。这个只是我的一种想法,有什么问题请指正。
    同时大家如果希望不在错误操作delete这个可以在mysql启动的时候加入-U这个参数
    启动MySQL的时候加上参数 -U

    -U, –safe-updates Only allow UPDATE and DELETE that uses keys.

    他的作用是防止执行delete的时候没带有条件语句,如果没加上where则语句不执行。

    一次完整的Mysqlbin-log日志恢复过程实例

    1).创建一个表:

    mysql>usetest;
    mysql>createtable t1(id int);
    mysql>showtables;

    2).添加两行数据:

    mysql>insertinto t1 values(1);
    mysql>insertinto t1 values(2);
    mysql>select *from t1;

    3).备份现有数据(09:30):

    #mysqldump -uroot-p123456 test -l -F > /tmp/test.sql

    4).在备份完后再添加三行数据(记录):

    mysql>insertinto t1 values(3);
    mysql>insertinto t1 values(4);
    mysql>insertinto t1 values(5);

    5).此时突然数据库损损坏或者认为删除:

    mysql>droptable t1;

    6).用已备份的test.sql来恢复数据库:

    #mysql -uroot-p123456 test < test.sql

    7).从bin-log日志恢复:

    #/usr/local/mysql/bin/mysqlbinlog–no-defaults mysql-bin.000006|more//查看bin-log日志,在我的虚力机上bin-log日志从mysql-bin.000005开始
    #/usr/local/mysql/bin/mysqlbinlog--no-defaults --stop-position=”272” mysql-bin.000006 |/usr/local/mysql/bin/mysql -uroot -p123456 //恢复bin-log日志

    如果你没有开启bin日志我们可参考正同方法开启

    一、 Mysqlbin-log 日志

    1.开启Mysqlbin-log 日志

    #vi/etc/my.cnf

    [client]
    #password =your_password
    port =3306
    socket =/tmp/mysql.sock
    default-character-set-utf8
    .......
    [mysqld]
    port= 3306
    socket= /var/lib/mysql/mysql.sock
    log-slow-queries=mysql-slowlog
    log-error=mysql.err
    log=mysql.log
    log-bin=mysql-bin//删除#符号

     2.查看二进制文件(mysql-bin.******)

    #cd/usr/local/mysql/bin/ && ls

     3.查看mysqbinlog日志是否开启

    mysql>showvariables like%log-bin%;

     4.与Mysqlbin-log有关的日志操作

    mysql>flushlogs;//此时就会多一个最新的bin-log日志
    mysql>showmaster status;//查看最后一个bin日志
    mysql>resetmaster;//清空所有的bin-log日志
    mysql>mysqlbinlog–no-defaults mysql-bin.******|more//查看bin-log日志

    扫码关注微信公众号

    微信公众号

    原文地址:http://www.android100.org/html/201406/20/28082.html

  • 相关阅读:
    Ubuntu 18.04安装gcc、g++ 4.8
    Java 接口返回值集合防止空指针
    Linux CentOS7.9环境下搭建Java Web 环境
    Springboot集成UReport2
    linux 环境中 单独执行 python 脚本
    sql 注入的问题
    检验上传文件的大小
    Gunicorn使用讲解
    CentOS下安装部署对象存储服务MinIO
    阿里云CentOS7安装MySQL
  • 原文地址:https://www.cnblogs.com/mqxs/p/6020341.html
Copyright © 2020-2023  润新知