mysql删除表数据如何恢复

 更新时间:2022年11月09日 16:45:50   作者:黄宝康  
这篇文章主要介绍了mysql删除表数据如何恢复,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

实验模拟

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

binlog日志,即binary log,是二进制日志文件。它有两个作用,

  • 一是增量备份,即只备份新增的内容;
  • 二是用于主从复制等,即主节点维护了一个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 起始pos点
  • --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 --user=name 连接到远程主机的用户名
  • -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;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL系列数据库设计三范式教程示例

    MySQL系列数据库设计三范式教程示例

    这篇文章主要为大家介绍了MySQL系列之数据库设计三范式的教程示例讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • 解决mysql报错ERROR 1049 (42000): Unknown database ‘数据库‘的问题

    解决mysql报错ERROR 1049 (42000): Unknown dat

    对于错误代码1049(42000):Unknown database ‘数据库‘,这个错误通常表示您正在尝试访问一个不存在的数据库,本文给出了解决方法,您可以按照文中步骤进行操作,需要的朋友可以参考下
    2024-01-01
  • 区别于Oracle的MySQL insert会阻塞update

    区别于Oracle的MySQL insert会阻塞update

    这篇文章主要介绍了区别于Oracle的MySQL insert会阻塞update的问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • MySQL中使用binlog时格式该如何选择

    MySQL中使用binlog时格式该如何选择

    这篇文章主要给大家介绍了关于MySQL中使用binlog时格式该如何选择的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • MySQL内部临时表的具体使用

    MySQL内部临时表的具体使用

    MySQL临时表在很多场景中都会用到,比如用户自己创建的临时表用于保存临时数据,以及MySQL内部在执行复杂SQL时,需要借助临时表进行分组、排序、去重等操作,本文就来详细的介绍一下MySQL内部临时表
    2021-10-10
  • MySQL必备的常见知识点汇总整理

    MySQL必备的常见知识点汇总整理

    这篇文章主要介绍了MySQL必备的常见知识点,结合实例形式汇总整理了mysql各种常见知识点,包括登录、退出、创建、增删改查、事务等知识点与操作注意事项,需要的朋友可以参考下
    2020-05-05
  • mysql odbc字符集设置(中文显示乱码)

    mysql odbc字符集设置(中文显示乱码)

    mysql odbc字符集设置(中文显示乱码),碰到这个问题的朋友可以参考下。
    2011-08-08
  • CentOS7环境下MySQL8常用命令小结

    CentOS7环境下MySQL8常用命令小结

    在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,下面这篇文章主要给大家介绍了关于CentOS7环境下MySQL8常用命令的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • 详解MySQL实时同步到Oracle解决方案

    详解MySQL实时同步到Oracle解决方案

    这篇文章主要介绍了详解MySQL实时同步到Oracle解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • MySQL使用Partition功能实现水平分区的策略

    MySQL使用Partition功能实现水平分区的策略

    这篇文章主要介绍了MySQL使用Partition功能实现水平分区,给大家提到了水平分区的5种策略,通过sql语句给大家介绍的非常详细,需要的朋友可以参考下
    2021-12-12

最新评论