不小心删除数据--MySQL数据恢复

这篇教程详细介绍了在Windows系统中如何进行MySQL数据库的操作,包括创建数据库、表,插入数据,删除数据,查看binlog恢复数据。同时,也演示了mysqldump进行数据库备份及恢复的过程,并给出了在Linux环境下进行相同操作的步骤。强调了数据库操作中的备份重要性和正确做法。
摘要由CSDN通过智能技术生成

一、windows系统搭建的数据库:

第一步:cmd 登陆mysql

mysql -uroot -p

第二步:选择一个数据库lxq

mysql> use  lxq;

第三步:创建一个表:sn_test

mysql> CREATE TABLE  `lxq`.`sn_test` ( `name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `age` INT( 3 ) NOT NULL ) ENGINE = MYISAM;

第四步:插入表:sn_test 数据

INSERT INTO `lxq`.`sn_test` (`name`, `age`) VALUES ('lxq1', '1');
INSERT INTO `lxq`.`sn_test` (`name`, `age`) VALUES ('lxq2', '2'); 
INSERT INTO `lxq`.`sn_test` (`name`, `age`) VALUES ('lxq3', '3'); 
INSERT INTO `lxq`.`sn_test` (`name`, `age`) VALUES ('lxq4', '4');

第五步:查看数据并删除

mysql> select * from sn_test;
mysql> delete from sn_test;
mysql> select * from sn_test;

第六步:查看自己的操作被记录在了那个binlog文件中(一般存放在标号最大的ID下)

1.查询所有日志 Position 值;

mysql> show master logs;   
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       790 |
| mysql-bin.000002 |       126 |
| mysql-bin.000003 |       126 |
| mysql-bin.000004 |       126 |
| mysql-bin.000757 |       126 |
| mysql-bin.000758 |       126 |
| mysql-bin.000759 |       150 |
| mysql-bin.000760 |      2073 |
| mysql-bin.000761 |       107 |
+------------------+-----------+

2.查询最近一次也就是当前日志的 Position 值;(这步操作适用于刚刚删除数据 )

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000761 |     1151 |              |                  |
+------------------+----------+--------------+------------------+

第七步:拿最新日志文件做案例,查看 mysql-bin.000761 这个日志文件中记录了那些操作执行:

mysql> show binlog events in 'mysql-bin.000761';
| mysql-bin.000761 |  390 | Query       |         1 |         593 | use `lxq`; CREATE TABLE  `lxq`.`sn_test` ( `name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8
_bin NOT NULL , `age` INT( 3 ) NOT NULL ) ENGINE = MYISAM |
| mysql-bin.000761 |  593 | Query       |         1 |         660 | BEGIN
                                                          |
| mysql-bin.000761 |  660 | Query       |         1 |         786 | use `lxq`; INSERT INTO `lxq`.`sn_test` (`name`, `age`) VALUES ('lxq1', '1')
                                                          |
| mysql-bin.000761 |  786 | Query       |         1 |         854 | COMMIT
                                                          |
| mysql-bin.000761 |  854 | Query       |         1 |         921 | BEGIN
                                                          |
| mysql-bin.000761 |  921 | Query       |         1 |        1047 | use `lxq`; INSERT INTO `lxq`.`sn_test` (`name`, `age`) VALUES ('lxq2', '2')
                                                          |
| mysql-bin.000761 | 1047 | Query       |         1 |        1115 | COMMIT
                                                          |
| mysql-bin.000761 | 1115 | Query       |         1 |        1182 | BEGIN
                                                          |
| mysql-bin.000761 | 1182 | Query       |         1 |        1308 | use `lxq`; INSERT INTO `lxq`.`sn_test` (`name`, `age`) VALUES ('lxq3', '3')
                                                          |
| mysql-bin.000761 | 1308 | Query       |         1 |        1376 | COMMIT
                                                          |
| mysql-bin.000761 | 1376 | Query       |         1 |        1443 | BEGIN
                                                          |
| mysql-bin.000761 | 1443 | Query       |         1 |        1569 | use `lxq`; INSERT INTO `lxq`.`sn_test` (`name`, `age`) VALUES ('lxq4', '4')
                                                          |
 mysql-bin.000761 | 1704 | Query       |         1 |        1785 | use `lxq`; delete from sn_test
                                                          

第八步: 从上面查询结果中找到被删除的表在创建时的sql 语句的 position值 593 和 删除数据时候的sql语句前一个 position 值 1569 。下面开始最重要的一步使用 mysqlbinlog 进行恢复数据操作, 需要在路径 D:\BtSoft\WebSoft\mysql\MySQL5.5\data\ 下执行:

D:\BtSoft\WebSoft\mysql\MySQL5.5\data\ >  mysqlbinlog mysql-bin.000761 --start-position 593 --stop-position 1569 |mysql -u root -p

第九步:输入mysql数据库密码:

****

第十步:重新登录,查看数据,OK,已经成功恢复了。

mysql> select * from sn_test;
+------+-----+
| name | age |
+------+-----+
| lxq1 |   1 |
| lxq2 |   2 |
| lxq3 |   3 |
| lxq4 |   4 |
+------+-----+

注意:
对于数据库操作,应该注意如下问题:
1、要常备份(全备,增量备份),出了问题可以最快恢复数据;
2、操作数据库前,要把需要操作的数据库或者表dump出来;
3、需要把bin-log打开,就算没有做上面的两步,也可以通过日志恢复数据(不小心删除恢复操作);

二、windows利用mysqldump 备份所建立数据库 'lxq' 的所有表

1.备份。把数据库lxq备份到windows 系统路径:D:\下,命名为:test.sql

C:\ User\Administrator>   mysqldump -u root -p lxq >"D:\test.sql"

2.删除数据库lxq

mysql>  drop databse lxq;

3.恢复。先在数据库创建库名lxq ,然后在路劲:D:\ cmd 下恢复数据库数据:

D:\>mysql -uroot -p lxq < test.sql

三、Linux系统数据库恢复:

1.备份

[root@mysql /]  mysqldump -u root -p lxq > / test.sql

2.删除数据库lxq

mysql>  drop database lxq;

3.创建数据库lxq

mysql>  create database lxq;

4.恢复

/ mysql -uroot -p lxq < / test.sql

四 、mysql查询表创建的时间

#进入information_schema

mysql>   use information_schema;

#查询表 sn_test 的信息

mysql>  SELECT *  FROM `information_schema`.`TABLES` where TABLE_NAME='sn_test'\G
*************************** 1. row ***************************
  TABLE_CATALOG: def
   TABLE_SCHEMA: lxq
     TABLE_NAME: sn_test
     TABLE_TYPE: BASE TABLE
         ENGINE: MyISAM
        VERSION: 10
     ROW_FORMAT: Dynamic
     TABLE_ROWS: 4
 AVG_ROW_LENGTH: 20
    DATA_LENGTH: 80
MAX_DATA_LENGTH: 281474976710655
   INDEX_LENGTH: 1024
      DATA_FREE: 0
 AUTO_INCREMENT: NULL
    CREATE_TIME: 2021-04-13 20:27:45
    UPDATE_TIME: 2021-04-14 20:06:16
     CHECK_TIME: NULL
TABLE_COLLATION: latin1_swedish_ci
       CHECKSUM: NULL
 CREATE_OPTIONS:
  TABLE_COMMENT:

本文参考链接:
https://blog.csdn.net/weixin_41513917/article/details/89207475?utm_source=app
https://blog.csdn.net/jh1141233305/article/details/105198911?utm_source=app
http://blog.chinaunix.net/uid-26602509-id-4102099.html
https://blog.csdn.net/weixin_39214481/article/details/90690659
https://blog.csdn.net/weixin_44090237/article/details/115707225?spm=1001.2014.3001.5501

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值