<
>

mysql删除表数据如何恢复

2022-11-12 21:21:50 来源:易采站长站 作者:

目录
实验模拟恢复实战常用参数选项解释不常用选项 

实验模拟

该实验必须是mysql开启了binlog的情况。

binlog日志,即binary>

    一是增量备份,即只备份新增的内容;二是用于主从复制等,即主节点维护了一个binlog日志文件,从节点从binlog中同步数据。

    我们可以通过binlog日志恢复数据

    查看mysql是否开启binlog语句

    mysql> show variables like 'log_bin';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | log_bin       | OFF   |
    +---------------+-------+
    1 row in set (0.01 sec)

    如果是OFF,则说明没有开启binlog。可以使用如下方法开启binlog

    编辑/etc/my.cnf文件,在文件后面增加如下两行代码即可

    server-id=1
    log-bin=/var/lib/mysql/mysql-bin

    server-id表示单个结点的id,这里由于只有一个结点,所以可以把id随机指定为一个数,这里将id设置成1。若集群中有多个结点,则id不能相同

    第二句是指定binlog日志文件的名字为mysql-bin,以及其存储路径

    重启让配置生效。

    [root@localhost ~]# systemctl stop mysqld.service
    [root@localhost ~]# systemctl start mysqld.service
    mysql> show variables like 'log_bin';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | log_bin       | ON    |
    +---------------+-------+
    1 row in set (0.01 sec)

    创建数据库,即相关表

    CREATE DATABASE `hbk`  DEFAULT CHARACTER SET utf8 ;
    use hbk;
    CREATE TABLE `t_delete_test` (
      `id` int(11) NOT NULL,
      `name` varchar(30) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    插入相关测试数据,在这里,我使用客户端工具插入的,也可以使用手工执行insert into语句。

    模拟数据库误删除操作,把id从1-4的数据不小心删除,只留唐僧师徒4人,然后如何恢复所有数据。

    mysql> delete from t_delete_test where id<=4;
    Query OK, 4 rows affected (0.01 sec)
    
    mysql> commit;
    Query OK, 0 rows affected (0.00 sec)

    恢复实战

    由于在/etc/my.cnf配置了binlog,这个日志会存储插入,删除,修改的日志信息

    mysql > show binlog events in 'mysql-bin.000001'\G

    在3101的时刻进行了delete操作,从704建表之后的操作开始恢复

    [root@localhost mysql]# /usr/bin/mysqlbinlog  /var/lib/mysql/mysql-bin.000001 --start-position=704 --stop-position=3101 |mysql -uroot -p hbk 

    执行之后,成功恢复了之前删除的数据。

    常用参数选项解释

      --start-position=875>--stop-position=954 结束pos点--start-datetime="2016-9-25 22:01:08" 起始时间点--stop-datetime="2019-9-25 22:09:46" 结束时间点--database=zyyshop 指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)

      不常用选项 

        -u> 连接到远程主机的用户名-p --password[=name] 连接到远程主机的密码-h --host=name 从远程主机上获取binlog日志--read-from-remote-server 从某个MySQL服务器上读取binlog日志

        a)查询第一个(最早)的binlog日志:

        mysql> show binlog events\G;

        b)指定查询 mysql-bin.000002这个文件:

        mysql> show binlog events in 'mysql-bin.000002'\G;

        c)指定查询 mysql-bin.000002这个文件,从pos点:624开始查起:

        mysql> show binlog events in 'mysql-bin.000002' from 624\G;

        d)指定查询 mysql-bin.000002这个文件,从pos点:624开始查起,查询10条(即10条语句)

        mysql> show binlog events in 'mysql-bin.000002' from 624 limit 10\G;

        e)指定查询 mysql-bin.000002这个文件,从pos点:624开始查起,偏移2行(即中间跳过2个),查询10条

        mysql> show binlog events in 'mysql-bin.000002' from 624 limit 2,10\G;

        以上为个人经验,希望能给大家一个参考,也希望大家多多支持易采站长站。

暂时禁止评论

微信扫一扫

易采站长站微信账号