精华内容
下载资源
问答
  • 数据类型 Mysql 5.7 innodb表 数据大小 user表 5MB 故障检测 误删除了表记录。 客户要求 恢复全部的删除记录。 修复结果 frm ibd文件发来,使用极佳innodb反删除记录恢复工具,成功恢复466条删除记录。 客户...
    数据类型 Mysql 5.7 innodb表
     
    数据大小 user表 5MB
     
    故障检测 误删除了表记录。
     
    客户要求 恢复全部的删除记录。
     
    修复结果 frm ibd文件发来后,使用极佳innodb反删除记录恢复工具,成功恢复466条删除记录。
     
    客户满意 是100%恢复

    展开全文
  • mysql误操作删除数据后数据恢复

    千次阅读 2018-09-17 09:06:17
    关于误操作删除数据数据恢复,一定要有安全意识,MySQL数据的找回,一定要在配置bin-log,否则数据丢失将无法恢复:  在MySQL的my.ini(或my.cnf,视操作系统不同而不同)添加:  [mysqld]  log-bin=binlog...

     

    关于误操作删除数据和数据恢复,一定要有安全意识,MySQL数据的找回,一定要在配置bin-log,否则数据丢失将无法恢复: 
    在MySQL的my.ini(或my.cnf,视操作系统不同而不同)添加: 

    [mysqld] 
    log-bin=binlog(名字随便取) 


    然后需要重启MySQL服务才能生效 ,
    可以通过命令“show binlog events;”查看配置是否成功 。


    通过mysqlbinlog恢复MySQL数据的两种方法: 
    (1)时间date 
    通过cmd运行到binlog所在的目录,再录入: 

    mysqlbinlog –stop-date=”2011-02-27 12:12:59″ jbms_binlog.000001 | mysql -uroot -proot

    (回车) 
    恢复到2011-02-27 12:12:59之前的数据,如果是start-date,即从该时间点后的开始算起 


    (2)位置position: 
    先将binlog日志转换成txt: 

    mysqlbinlog –start-date=”2011-02-27 13:10:12″ –stop-date=”2011-02-27 13:47:21″ jbms_binlog.000002 > temp/002.txt 

    功能是将时间段内的日志文件转换成txt,注意binlog和temp文件夹是同一目录下。 


    查看生成的txt文件,获取编辑位置和时间等数据,然后通过命令: 

    mysqlbinlog –stop-position=”98″ jbms_binlog.000002 | mysql -uroot -proot 


    即可恢复位置为“98”处操作的数据,其中stop也可以换成start。 


    注意:如果通过drop table name;将表删除,要想恢复数据,必须建立一个表名、字段和数据类型相一致的空表,否则数据无法恢复,报表不存在的错误。 

     

     

    展开全文
  • mysql删除数据恢复

    万次阅读 2019-04-28 11:37:07
    实验模拟 该实验必须是mysql开启了binlog的情况。 binlog日志,即binary log,是二进制日志文件。...我们可以通过binlog日志恢复数据 查看mysql是否开启binlog语句 mysql> show variables like '...

    实验模拟

    该实验必须是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 恢复删除数据

    千次阅读 2017-10-14 21:18:31
    在数据库日常维护中,开发人员是最让人头痛的,很多时候都会由于SQL语句写的有问题导致服务器出问题,导致资源耗尽。最危险的操作就是在做DML操作的时候忘... update 忘加where条件误操作恢复数据(binglog格式必须是RO

        在数据库日常维护中,开发人员是最让人头痛的,很多时候都会由于SQL语句写的有问题导致服务器出问题,导致资源耗尽。最危险的操作就是在做DML操作的时候忘加where条件,导致全表更新,这是作为运维或者DBA的我们改如何处理呢?下面我分别针对update和delete操作忘加where条件导致全表更新的处理方法。

    一. update 忘加where条件误操作恢复数据(binglog格式必须是ROW)

    1.创建测试用的数据表

    复制代码

    mysql> create table t1 (
        -> id int unsigned not null auto_increment,
        -> name char(20) not null,
        -> sex enum('f','m') not null default 'm',
        -> address varchar(30) not null,
        -> primary key(id)
        -> );
    Query OK, 0 rows affected (0.31 sec)
    mysql
    >

    复制代码

    2.插入测试数据

    复制代码

    mysql> insert into t1 (name,sex,address)values('daiiy','m','guangzhou');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into t1 (name,sex,address)values('tom','f','shanghai');   
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into t1 (name,sex,address)values('liany','m','beijing'); 
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into t1 (name,sex,address)values('lilu','m','zhuhai');  
    Query OK, 1 row affected (0.05 sec)
    
    mysql> 

    复制代码

    3.现在需要将id等于2的用户的地址改为zhuhai,update时没有添加where条件

    复制代码

    mysql> select * from t1;+----+-------+-----+-----------+| id | name  | sex | address   |+----+-------+-----+-----------+|  1 | daiiy | m   | guangzhou ||  2 | tom   | f   | shanghai  ||  3 | liany | m   | beijing   ||  4 | lilu  | m   | zhuhai    |+----+-------+-----+-----------+4 rows in set (0.01 sec)
    
    mysql> update t1 set address='zhuhai';
    Query OK, 3 rows affected (0.09 sec)
    Rows matched: 4  Changed: 3  Warnings: 0mysql> select * from t1;              +----+-------+-----+---------+| id | name  | sex | address |+----+-------+-----+---------+|  1 | daiiy | m   | zhuhai  ||  2 | tom   | f   | zhuhai  ||  3 | liany | m   | zhuhai  ||  4 | lilu  | m   | zhuhai  |+----+-------+-----+---------+4 rows in set (0.00 sec)
    
    mysql> 

    复制代码

    4.开始恢复,在线上的话,应该比较复杂,要先进行锁表,以免数据再次被污染。(锁表,查看正在写哪个二进制日志)

    复制代码

    mysql> lock tables t1 read ;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show master status;+------------------+----------+--------------+------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000024 |     1852 |              |                  |+------------------+----------+--------------+------------------+1 row in set (0.00 sec)
    
    mysql> 

    复制代码

    5.分析二进制日志,并且在其中找到相关记录,在更新时是address='zhuhai',我们可以在日志中过滤出来。

    [root@localhost mysql]# mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin.000024 | grep -B 15 'zhuhai'

    复制代码

    # at 1629# at 1679#140305 10:52:24 server id 1  end_log_pos 1679  Table_map: `db01`.`t1` mapped to number 38#140305 10:52:24 server id 1  end_log_pos 1825  Update_rows: table id 38 flags: STMT_END_F
    ### UPDATE db01.t1
    ### WHERE
    ###   @1=1 /* INT meta=0 nullable=0 is_null=0 */###   @2='daiiy' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=2 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='guangzhou' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */### SET
    ###   @1=1 /* INT meta=0 nullable=0 is_null=0 */###   @2='daiiy' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=2 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='zhuhai' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */### UPDATE db01.t1
    ### WHERE
    ###   @1=2 /* INT meta=0 nullable=0 is_null=0 */###   @2='tom' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='shanghai' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */### SET
    ###   @1=2 /* INT meta=0 nullable=0 is_null=0 */###   @2='tom' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='zhuhai' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */### UPDATE db01.t1
    ### WHERE
    ###   @1=3 /* INT meta=0 nullable=0 is_null=0 */###   @2='liany' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=2 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='beijing' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */### SET
    ###   @1=3 /* INT meta=0 nullable=0 is_null=0 */###   @2='liany' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=2 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='zhuhai' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */

    复制代码

    可以看见里面记录了每一行的变化,这也是binglog格式要一定是row才行的原因。其中@1,@2,@3,@4,分别对应表中id,name,sex,address字段。相信大家看到这里有点明白了吧,对,没错,你猜到了,我们将相关记录转换为sql语句,重新导入数据库。

    6.处理分析处理的二进制日志

    复制代码

    [root@localhost mysql]# mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin.000024 | sed -n '/# at 1679/,/COMMIT/p' > t1.txt  
    [root@localhost mysql]# cat t1.txt 
    # at 1679#140305 10:52:24 server id 1  end_log_pos 1679  Table_map: `db01`.`t1` mapped to number 38#140305 10:52:24 server id 1  end_log_pos 1825  Update_rows: table id 38 flags: STMT_END_F
    ### UPDATE db01.t1
    ### WHERE
    ###   @1=1 /* INT meta=0 nullable=0 is_null=0 */###   @2='daiiy' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=2 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='guangzhou' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */### SET
    ###   @1=1 /* INT meta=0 nullable=0 is_null=0 */###   @2='daiiy' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=2 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='zhuhai' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */### UPDATE db01.t1
    ### WHERE
    ###   @1=2 /* INT meta=0 nullable=0 is_null=0 */###   @2='tom' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='shanghai' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */### SET
    ###   @1=2 /* INT meta=0 nullable=0 is_null=0 */###   @2='tom' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='zhuhai' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */### UPDATE db01.t1
    ### WHERE
    ###   @1=3 /* INT meta=0 nullable=0 is_null=0 */###   @2='liany' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=2 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='beijing' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */### SET
    ###   @1=3 /* INT meta=0 nullable=0 is_null=0 */###   @2='liany' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=2 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='zhuhai' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */# at 1825#140305 10:52:24 server id 1  end_log_pos 1852  Xid = 26COMMIT/*!*/;
    [root@localhost mysql]# 

    复制代码

    这里sed有点复杂,需要童鞋们好好自己研究研究,这里我就不多说了。

    [root@localhost mysql]# sed '/WHERE/{:a;N;/SET/!ba;s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}' t1.txt | sed -r '/WHERE/{:a;N;/@4/!ba;s/###   @2.*//g}' | sed 's/### //g;s/\/\*.*/,/g' | sed '/WHERE/{:a;N;/@1/!ba;s/,/;/g};s/#.*//g;s/COMMIT,//g' | sed '/^$/d' > recover.sql 

    复制代码

    [root@localhost mysql]# cat recover.sql 
    UPDATE db01.t1
    SET
      @1=1 ,
      @2='daiiy' ,
      @3=2 ,
      @4='guangzhou' ,
    WHERE
      @1=1 ;
    UPDATE db01.t1
    SET
      @1=2 ,
      @2='tom' ,
      @3=1 ,
      @4='shanghai' ,
    WHERE
      @1=2 ;
    UPDATE db01.t1
    SET
      @1=3 ,
      @2='liany' ,
      @3=2 ,
      @4='beijing' ,
    WHERE
      @1=3 ;
    [root@localhost mysql]# 

    复制代码

    将文件中的@1,@2,@3,@4替换为t1表中id,name,sex,address字段,并删除最后字段的","号

    复制代码

    [root@localhost mysql]# sed -i 's/@1/id/g;s/@2/name/g;s/@3/sex/g;s/@4/address/g' recover.sql
    [root@localhost mysql]# sed -i -r 's/(address=.*),/\1/g' recover.sql
    [root@localhost mysql]# cat recover.sql 
    UPDATE db01.t1
    SET
      id=1 ,
      name='daiiy' ,
      sex=2 ,
      address='guangzhou' WHERE
      id=1 ;
    UPDATE db01.t1
    SET
      id=2 ,
      name='tom' ,
      sex=1 ,
      address='shanghai' WHERE
      id=2 ;
    UPDATE db01.t1
    SET
      id=3 ,
      name='liany' ,
      sex=2 ,
      address='beijing' WHERE
      id=3 ;
    [root@localhost mysql]# 

    复制代码

    7.到这里日志就处理好了,现在导入即可(导入数据后,解锁表);

    复制代码

    mysql> source recover.sql;
    Query OK, 1 row affected (0.12 sec)
    Rows matched: 1  Changed: 1  Warnings: 0Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0Query OK, 1 row affected (0.01 sec)
    Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from t1;+----+-------+-----+-----------+| id | name  | sex | address   |+----+-------+-----+-----------+|  1 | daiiy | m   | guangzhou ||  2 | tom   | f   | shanghai  ||  3 | liany | m   | beijing   ||  4 | lilu  | m   | zhuhai    |+----+-------+-----+-----------+4 rows in set (0.00 sec)
    
    mysql> 

    复制代码

    可以看见数据已经完全恢复,这种方法的优点是快速,方便。

     

    二. delete 忘加where条件误删除恢复(binglog格式必须是ROW)

    其实这和update忘加条件差不多,不过这处理更简单,这里就用上面那张表做测试吧

    1.模拟误删除数据

    复制代码

    mysql> select * from t1;+----+-------+-----+-----------+| id | name  | sex | address   |+----+-------+-----+-----------+|  1 | daiiy | m   | guangzhou ||  2 | tom   | f   | shanghai  ||  3 | liany | m   | beijing   ||  4 | lilu  | m   | zhuhai    |+----+-------+-----+-----------+4 rows in set (0.00 sec)
    
    mysql> delete from t1;
    Query OK, 4 rows affected (0.03 sec)
    
    mysql> select * from t1;
    Empty set (0.00 sec)
    
    mysql> 

    复制代码

    2.在binglog中去查找相关记录

    复制代码

    [root@localhost mysql]# mysqlbinlog --no-defaults --base64-output=decode-rows -v -v mysql-bin.000024 | sed -n '/### DELETE FROM db01.t1/,/COMMIT/p' > delete.txt
    [root@localhost mysql]# cat delete.txt 
    ### DELETE FROM db01.t1
    ### WHERE
    ###   @1=1 /* INT meta=0 nullable=0 is_null=0 */###   @2='daiiy' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=2 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='guangzhou' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */### DELETE FROM db01.t1
    ### WHERE
    ###   @1=2 /* INT meta=0 nullable=0 is_null=0 */###   @2='tom' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='shanghai' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */### DELETE FROM db01.t1
    ### WHERE
    ###   @1=3 /* INT meta=0 nullable=0 is_null=0 */###   @2='liany' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=2 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='beijing' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */### DELETE FROM db01.t1
    ### WHERE
    ###   @1=4 /* INT meta=0 nullable=0 is_null=0 */###   @2='lilu' /* STRING(60) meta=65084 nullable=0 is_null=0 */###   @3=2 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */###   @4='zhuhai' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */# at 2719#140305 11:41:00 server id 1  end_log_pos 2746  Xid = 78COMMIT/*!*/;
    [root@localhost mysql]# 

    复制代码

    3.将记录转换为SQL语句

    复制代码

    [root@localhost mysql]# cat delete.txt | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;' | sed -r 's/(@4.*),/\1;/g' | sed 's/@[1-9]=//g' > t1.sql
    [root@localhost mysql]# cat t1.sql 
    INSERT INTO db01.t1
    SELECT
      1 ,
      'daiiy' ,
      2 ,
      'guangzhou' ;
    INSERT INTO db01.t1
    SELECT
      2 ,
      'tom' ,
      1 ,
      'shanghai' ;
    INSERT INTO db01.t1
    SELECT
      3 ,
      'liany' ,
      2 ,
      'beijing' ;
    INSERT INTO db01.t1
    SELECT
      4 ,
      'lilu' ,
      2 ,
      'zhuhai' ;
    [root@localhost mysql]# 

    复制代码

    4.导入数据,验证数据完整性

    复制代码

    mysql> source t1.sql;
    Query OK, 1 row affected (0.00 sec)
    Records: 1  Duplicates: 0  Warnings: 0Query OK, 1 row affected (0.02 sec)
    Records: 1  Duplicates: 0  Warnings: 0Query OK, 1 row affected (0.02 sec)
    Records: 1  Duplicates: 0  Warnings: 0Query OK, 1 row affected (0.01 sec)
    Records: 1  Duplicates: 0  Warnings: 0mysql> select * from t1;
    ERROR 1046 (3D000): No database selected
    mysql> select * from db01.t1;+----+-------+-----+-----------+| id | name  | sex | address   |+----+-------+-----+-----------+|  1 | daiiy | m   | guangzhou ||  2 | tom   | f   | shanghai  ||  3 | liany | m   | beijing   ||  4 | lilu  | m   | zhuhai    |+----+-------+-----+-----------+4 rows in set (0.00 sec)
    
    mysql> 

    复制代码

    到这里数据就完整回来了。将binglog格式设置为row有利有弊,好处是记录了每一行的实际变化,在主从复制时也不容易出问题。但是由于记录每行的变化,会占用大量磁盘,主从复制时带宽占用会有所消耗。到底是使用row还是mixed,需要在实际工作中自己去衡量,但从整体上来说,binglog的格式设置为row,都是不二的选择。

    总结:

    所以在数据库操作的过程中我们需要格外小心,当然开发那边我们需要做好权限的控制,不过有一个参数可以解决我们的问题,让我们不用担心类似的问题发生:

    在[mysql]段落开启这个参数:

    safe-updates

    这样当我们在做DML操作时忘记加where条件时,mysqld服务器是不会执行操作的:

    复制代码

    mysql> select *  from t1;+----+------------------+| id | name             |+----+------------------+|  1 | yayun            ||  2 | atlas            ||  3 | mysql            ||  6 | good yayun heheh |+----+------------------+4 rows in set (0.00 sec)
    
    mysql> delete from t1;
    ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY columnmysql> 

    展开全文
  • 数据库环境部署与故障原因: 本次恢复的数据库安装在客户本地服务器上,服务器...导致数据丢失的原因是由于人为误操作使用Delete命令进行删除数据时未添加where子句进行筛选导致全表数据删除删除后未对该表进...
  • mysql删除后恢复

    千次阅读 2019-04-27 16:46:53
    mysql没有开启binglog日志的情况下删除数据恢复 https://www.cnblogs.com/ziroro/p/9829669.html
  • 【用户单位】 某客户 【数据恢复故障描述】 ...Myisam引擎,所以数据删除后无法100%恢复,每条记录会丢失前面几个字段。   【数据恢复过程】  1、对ka_tan.myd文件结构进行分析  2、分析原数据存储的结构.
  • mysql删除数据恢复

    千次阅读 2017-04-01 16:03:43
    mysql删除数据恢复 1.首先确认误删除了那些表的数据以及什么时间执行的删除操作 2.根据上面的时间去mysql服务器下载二进制日志 3.把下载的二进制日志文件上传到本地数据库服务器上,执行如下命令分析 ...
  • mysql数据库误删除后数据恢复方法

    千次阅读 2019-03-02 23:25:41
    在日常运维工作中,对于mysql数据库的...下面,就mysql数据库误删除后恢复方案进行说明。 一、工作场景 (1)MySQL数据库每晚12:00自动完全备份。 (2)某天早上上班,9点的时候,一同事犯晕drop了一个数据库! ...
  • 在日常运维工作中,对于mysql数据库的...下面,就mysql数据库误删除后恢复方案进行说明。 一、工作场景 (1)MySQL数据库每晚12:00自动完全备份。 (2)某天早上上班,9点的时候,一同事犯晕drop了一个数据库! ...
  • mysql 删除数据库恢复

    千次阅读 2018-02-05 16:39:05
    这几天看到几篇关于数据恢复的文件,没有实际操作过,先留着,关键时候可以保命。 原文:https://dba.stackexchange.com/questions/23251/is-there-a-way-to-recover-a-dropped-mysql-database 链接: ...
  • 昨天,我不小心,在没有完全沟通的情况下,直接删除了一个库,导致同事辛苦了一周...1. 首先,我慌的不行,还好有人提醒我还有binlog日志可以恢复数据,我才恍然大悟,以前没发生过这种事,还没遇到过,环境如下: ...
  • 在日常运维工作中,对于mysql数据库的...下面,就mysql数据库误删除后恢复方案进行说明。 一、工作场景(1)MySQL数据库每晚12:00自动完全备份。 (2)某天早上上班,9点的时候,一同事犯晕drop了一个数据库! (...
  • MySQL误操作删除后,怎么恢复数据

    千次阅读 2018-11-20 11:41:00
    MySQL误操作删除后,怎么恢复数据?登陆查数据库mysql> select * from abc.stad;+----+-----------+| id | name |+----+-----------+| 1 | abc1 || 2 | abc2 |+----+-----------+ 0点全量备份[root@M ~]# mkdir ...
  • 宝塔mysql通过binlog恢复删除数据

    千次阅读 2020-01-10 09:45:13
    找到项目下的server/data目录 ...看一下日期需要恢复到那个日期 /www/server/mysql/bin/mysqlbinlog mysql-binlog.000001 --start-position 594 --stop-position 1237 | mysql -u root -p test Enter password: ...
  • Mysql的Bin log数据恢复:不小心删除数据库 前言:因为不小心删除了测试机器上Mysql的一整个数据库Schema,因为是测试机所以没有做备份,现在通过MySQL的Bin log方式恢复删除以前的数据库。 当然做Bin log的...
  • 详解Mysql数据库恢复删除数据

    千次阅读 2019-03-04 09:26:53
    直接上操作步骤及恢复思路(友情提示:数据库的任何操作都要提前做好备份),以下是Mysql数据后的恢复过程: 1. 找到binlog 恢复数据的前提是必须开启Mysql的binlog日志,如果binlog日志没开启,请忽略此篇文档。...
  • mysql误删后数据恢复

    千次阅读 2018-03-22 19:57:28
    今天误删了mysql,只剩下/var/lib/mysql 里面的ib_logfile0、ib_logfile1、ibdata1! 然后yum install mysql失败,原因是require的 ...原因是源不对所以先删除最开始的源,然后rpm -ivh MySQL-server-4.0.14-0.i386....
  • Mysql通过binlog恢复数据

    千次阅读 2020-07-11 11:44:08
    背景: 前段时间公司搞项目,本来是开发测试共用一个数据库,测试大姐不肯,说要...我们可以通过它来对误操作的数据进行恢复,当然还可以用来进行主从数据库的同步操作。 binlog的三种模式: ①statement:记...
  • mysql删除数据恢复 实验模拟 该实验必须是mysql开启了binlog的情况。 binlog日志,即binary log,是二进制日志文件。它有两个作用,一是增量备份,即只备份新增的内容;二是用于主从复制等,即主节点维护了一...
  • MySQL删除表的内容恢复数据

    千次阅读 2018-12-12 15:41:06
     升级配置文件配置错误,kafka地址指向的是测试环境,同步脚本拉取测试环境数据把线上环境的topic和flume相关信息删除。系统没有全备份但是二进制日志是全的; 问题定位: 1、mysql没有general log 2、查看前一个...
  • MySQL日志文件恢复数据

    千次阅读 2017-03-03 17:40:18
    查看MySQL日志文件存储位置 show variables like ‘%query%’; 查看二进制文件状态 show variables like ‘%bin%’ show master status;导出二进制文件 采用从节点4开始到3000结束C:\Program Files\MySQL\MySQL ...
  • 很久之前的事了,用navicat删除数据库中的入侵数据,导致删顺手了,把一些看似重复数据的重要数据在表中直接右键删除掉了(13条数据),而该数据库没有做这些数据的备份,同时没有开启日志,常规的恢复方法彻底走入...
  • window下Mysql 恢复Delete删除数据

    千次阅读 2019-11-27 12:22:46
    本机用的Navicat连mysql测试DB又连了正式DB,因为本地与正式要频繁操作所以都打开了很多查询,...共删除了325条数据,然后在网上找恢复数据的办法,一定要是DELETE删除的,如果用的是drop table删除表是没办法恢...
  • mysql数据库通过日志恢复数据

    万次阅读 2018-11-12 08:49:12
    大家应该知道mysql通过备份恢复文件的方法,其实用日志其实也可以恢复数据,方法如下 1.找到my.ini文件 (方法:先到mysql安装目录找my.ini文件如果此安装目录没有找到该文件,则此文件一般在C盘下的ProgramData...
  • mysql数据库被误删除数据恢复记录

    千次阅读 2019-03-13 18:55:59
    在部署实施过程工作中,我经常采取的是全量备份数据量或者增量备份数据库,对于mysql...下面,就mysql数据库误删除后恢复方案进行说明。 一、工作场景 (1)MySQL数据库每晚12:00自动完全备份。 (2)某天早上上班...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 110,277
精华内容 44,110
关键字:

mysql删除后恢复数据

mysql 订阅