• mysql 开启binlog日志,恢复误删的表、数据、mysql库


    (希望大家在工作中永远不要用到)执行什么命令都要对自己负责具备工匠精神

    linux下开启mysql的binlog日志功能

    1.配置mysql配置文件my.cnf(内容如下)。

      #配置文件储存的位置
      log-bin=mysql-bin
      #5.7以及以上版本需要配置这一行(保证唯一性,可随意输入)
      server-id=123
      #binlog的格式 :statement(保存语句)、row(保存执行后的结果)、mixed(同时保存语句和结果)
      binlog-format=ROW
      #表示每执行一次就同步
      sync-binlog=1

    2.重启mysql服务后。查看日志功能是否正常开启

       mysql> show variables like 'log_%';

    恢复数据

    创建新的日志控制开始点(创建新的日志文件) mysql

      mysql> flush logs;

    查看创建的日志文件(如下图最新生成的mysql-bin.00003) mysql

      mysql> show master status;

    创建数据库 mysql

      DROP DATABASE IF EXISTS `study1`; CREATE DATABASE `study1`;

    创建数据表 mysql

      DROP TABLE IF EXISTS `study1`.`tb_class`;
      CREATE TABLE `study1`.`tb_class` (
        `id` int(11) NOT NULL,
        `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
        `score` int(255) NULL DEFAULT NULL,
        `grade` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
        PRIMARY KEY (`id`) USING BTREE
        ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

    插入数据 mysql

      INSERT INTO `study1`.`tb_class` VALUES (1, 'a', 10, 'a');
      INSERT INTO `study1`.`tb_class` VALUES (2, 'a', 10, 'a');
      INSERT INTO `study1`.`tb_class` VALUES (3, 'a', 10, 'cc');
      INSERT INTO `study1`.`tb_class` VALUES (4, 'a', 10, 'dd');
      INSERT INTO `study1`.`tb_class` VALUES (5, 'a', 10, 'ee');
      INSERT INTO `study1`.`tb_class` VALUES (6, 'a', 10, 'ff');

    删除表数据,插入新数据 mysql

      DELETE from `study1`.`tb_class`;
      INSERT INTO `study1`.`tb_class` VALUES (99999, 'a', 10, 'a');
      INSERT INTO `study1`.`tb_class` VALUES (999995, 'a', 10, 'b');
      INSERT INTO `study1`.`tb_class` VALUES (999996, 'a', 10, 'c');
    查找恢复点,即删除数据之前的备份点(mysql-bin.000003为上面生成的日志文件) linux

      /usr/bin/mysqlbinlog --no-defaults  -v  --start-datetime="2022-06-08 10:00:00" --stop-datetime="2022-06-09 17:35:00"   /var/lib/mysql/mysql-bin.000003  (可以使用find命令查找mysqlbinlog、mysql-bin.000003路径) 

    • --no-defaults 读取没有选项的文件, 指定的原因是由于 mysqlbinlog 无法识别 BINLOG 中的 default-character-set=utf8 指令
    • --start-datetime="2022-06-08 10:00:00" 开始时间
    • --stop-datetime="2022-06-09 17:35:00" 结束时间
    • | grep XXXX   进行过滤

    恢复数据(恢复点如上截图,此处找到删除前备份点为2766) linux

      /usr/bin/mysqlbinlog --no-defaults -v /var/lib/mysql/mysql-bin.000003  --stop-position=2766 -v | mysql -uroot -p密码

    可以看到已经恢复的数据

     删除表 mysql

      DROP TABLE IF EXISTS `study1`.`tb_class`;

    恢复 linux

      /usr/bin/mysqlbinlog --no-defaults -v /var/lib/mysql/mysql-bin.000003 --stop-position=2766 -v | mysql -uroot -p密码

    删库 mysql

      DROP DATABASE `study1`;

    恢复 linux

      /usr/bin/mysqlbinlog --no-defaults -v /var/lib/mysql/mysql-bin.000003 --stop-position=2766 -v | mysql -uroot -p密码

    总结

    日志恢复过程中,主要靠备份点进行备份还原,如果遇到报错表已存在库、已存在表时因为建库建表时没规范的执行一次库、表的判断删除

      DROP DATABASE IF EXISTS `库名`;

      DROP TABLE IF EXISTS `库名`.`表名`;

     

  • 相关阅读:
    量变引起质变:安卓改多了,就是自己的OS
    TDengine3.0 基础操作
    LeetCode 0938.二叉搜索树的范围和:深度优先搜索(可中序遍历)
    DNS大全
    SpringMVC拦截器
    东方博易OJ——1005 - 【入门】已知一个圆的半径,求解该圆的面积和周长
    47、以Orienmask实例分割算法为例子,学习TensorRT的Python和C++开发
    I2C 子系统(二):I3C spec
    SSM整合-异常处理器及项目异常处理方案
    SpringBoot常用注解
  • 原文地址:https://www.cnblogs.com/ganfd/p/16355853.html