根据二进制日志恢复

目的:恢复数据,根据二进制日志将数据恢复到今天任意时刻
增量恢复,回滚恢复

如果有备份好的数据,将备份好的数据导入新数据库时,会随着产生二进制日志

先准备一台初始化的数据库

mysqld --initialize --user =mysql --basedir=/usr/local/mysql --datadir=/data/mysql/

启动数据库

service mysqld start

因为数据库版本为5.7,初始化启动后新密码会在mysql-error.log文件中

2018-08-02T11:59:01.189981+08:00 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 63baed5c-9608-11e8-b7c6-525400b807c2.
2018-08-02T11:59:01.193712+08:00 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2018-08-02T11:59:01.197445+08:00 1 [Note] A temporary password is generated for root@localhost: pVwD<NQ:i85z
2018-08-02T11:59:02.323852+08:00 1 [Warning] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode.
2018-08-02T11:59:02.323876+08:00 1 [Warning] 'user' entry 'mysql.session@localhost' ignored in --skip-name-resolve mode.

创建数据,我在这创建了4个空的库

MySQL [mysql]> create database t1;
Query OK, 1 row affected (0.00 sec)

MySQL [mysql]> create database t2;
Query OK, 1 row affected (0.00 sec)

MySQL [mysql]> create database t3;
Query OK, 1 row affected (0.00 sec)

MySQL [mysql]> create database t4;
Query OK, 1 row affected (0.00 sec)

MySQL [mysql]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| t1 |
| t2 |
| t3 |
| t4 |
+--------------------+
8 rows in set (0.00 sec)

刷新二进制日志

MySQL [mysql]> flush logs;
Query OK, 0 rows affected (0.01 sec)
查看对应二进制日志(查看时建议导出,vim功能定位方便)

mysqlbinlog --no-defaults mysql-bin.000009 >/data/000009.log

# at 219
#180802 17:56:31 server id 48184 end_log_pos 310 CRC32 0x98636c54 Query thread_id=10589 exec_time=0 error_code=0
SET TIMESTAMP=1533203791/*!*/;
SET @@session.pseudo_thread_id=10589/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1075838976/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=224,@@session.collation_connection=224,@@session.collation_server=224/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
create database ku1
/*!*/;
# at 310
#180802 17:56:34 server id 48184 end_log_pos 375 CRC32 0xfb9a2910 Anonymous_GTID last_committed=1 sequence_number=2 rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 375
#180802 17:56:34 server id 48184 end_log_pos 466 CRC32 0x8d2da46b Query thread_id=10589 exec_time=0 error_code=0
SET TIMESTAMP=1533203794/*!*/;
create database ku2
/*!*/;
# at 466
#180802 17:56:36 server id 48184 end_log_pos 531 CRC32 0x33111aad Anonymous_GTID last_committed=2 sequence_number=3 rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 531
#180802 17:56:36 server id 48184 end_log_pos 622 CRC32 0x74d93a38 Query thread_id=10589 exec_time=0 error_code=0
SET TIMESTAMP=1533203796/*!*/;
create database ku3
/*!*/;
# at 622
#180802 17:56:50 server id 48184 end_log_pos 687 CRC32 0xe71ae53e Anonymous_GTID last_committed=3 sequence_number=4 rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 687
#180802 17:56:50 server id 48184 end_log_pos 770 CRC32 0xc0d9aa6d Query thread_id=10589 exec_time=0 error_code=0
SET TIMESTAMP=1533203810/*!*/;
drop database ku1
/*!*/;
# at 770
#180802 17:56:53 server id 48184 end_log_pos 835 CRC32 0xbb65a7c2 Anonymous_GTID last_committed=4 sequence_number=5 rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 835
#180802 17:56:53 server id 48184 end_log_pos 918 CRC32 0x2b0760b0 Query thread_id=10589 exec_time=0 error_code=0
SET TIMESTAMP=1533203813/*!*/;
drop database ku2
/*!*/;
# at 918
#180802 17:56:59 server id 48184 end_log_pos 965 CRC32 0xd3f06efa Rotate to mysql-bin.000010 pos: 4
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
回滚恢复数据

我创建了ku1,ku2,ku3三个数据库,然后删除了ku1和ku2两个库,现在需要恢复ku1
根据标记恢复,创建ku1的标记为at219,结束标记为end_log_pos 310,如果有commit标记,需要将commit包含在恢复的范围内!

mysqlbinlog --no-defaults --start-position="219" --stop-position="310" /data/mysql/mysql-bin.000009 | mysql -uroot -p
总结

数据的恢复本质是执行sql语句,需要恢复哪部分数据就去选择二进制日志中记录这部分语句的标记
数据往后追加,不能逆向删除。

mysql根据二进制日志恢复数据/公司事故实战经验的更多相关文章

  1. mysql使用二进制日志恢复数据

    一.恢复到某个二进制文件 1.开启二进制日志 在mysqld的配置节点下添加如下配置 log-bin="E:/Mysql57BinLog/binlog"(windows下的路径,l ...

  2. 如何通过Mysql的二进制日志恢复数据库数据

    经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响.所以本文我们将和大家一起分享学习下如何通过Mysql的二机制日志(binlo ...

  3. Mysql利用binlog日志恢复数据操作(转)

    a.开启binlog日志:1)编辑打开mysql配置文件/etc/mys.cnf[root@vm-002 ~]# vim /etc/my.cnf在[mysqld] 区块添加 log-bin=mysql ...

  4. MySQL通过binlog日志恢复数据

    一.查看下自己的MySQL是否开启了binlog日志 # 是否启用binlog日志 OFF:关闭 ON:开启 show variables like 'log_bin'; 二.开启binlog日志 在 ...

  5. MySQL使用二进制日志恢复数据库

    一.二进制日志简介 MySQL有不同类型的日志,其中二进制文件记录了所有对数据库的修改,如果数据库因为操作不当或其他原因丢失了数据,可以通过二进制文件恢复. 在my.ini文件中设置了log-bin, ...

  6. MySQL 数据库通过日志恢复

    http://blog.csdn.net/hanxin1987216/article/details/5976856 要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名.一般可以从选 ...

  7. mysql学习------二进制日志管理

    MySQL二进制日志(Binary Log)   a.它包含的内容及作用如下:    包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)    包含关于每个更新数据库( ...

  8. MySQL二进制binlog日志说明以及利用binlog日志恢复数据

    MySQL的binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全量备份+binlog日志恢复增量数据部分). 一.关于 ...

  9. 解说mysql之binlog日志以及利用binlog日志恢复数据

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

随机推荐

  1. Siebel计划和实施

    1.计划: 自上而下计划配置项目 1)首先,确定UI和应用产品功能 2)然后,确定为实现UI功能而需要在业务层所做的更改 3)最后,确定为实现业务层更改而需要在数据层所做的更改---尽可能少做更改 如 ...

  2. ubuntu怎么关防火墙

    1.关闭ubuntu的防火墙 ufw disable2.卸载了iptables apt-get remove iptables 1.用iptables -F这个命令来关闭防火墙,但是使用这个命令前,千 ...

  3. Struts的学习-eclipse与idea与struts的连接

    1.建立一个空白工程(里面是没有文件的). 可以在文件放置找到项目文件夹 2.点击托管项目到码云 (ps:没有码云帐号的自己注册) 3.按快捷键:ctrl+alt+shift+s 呼出项目结构管理器, ...

  4. Ubuntu 14.04默认以字符界面启动

    在windows上跑虚拟机比较资源,特别当以图形界面启动时,如果宿主机性能不好,就相当卡. 让Ubuntu 14.04默认以字符界面启动的方法: 编辑文件:etc/default/grub 将  GR ...

  5. selenium+python 连接数据库

    import MySQLdb connet=MySQLdb.connect(  host='localhost',  port='8808',  user='amdin',  password='** ...

  6. git作业

    第一部分 我的地址:https://github.com/Tohsaka-Rin-ZYJ/123/tree/master 第二部分 我对git的认识: Git是一个开源的分布式版本控制系统,用以有效. ...

  7. 【[SDOI2013]随机数生成器】

    题目 来画柿子吧 我们要求的是 \[f(x)\equiv t(mod\ \ p)\] 其中\(f(1)=x_0,f(x)=af(x-1)+b\) 我们来写几项柿子看看 \[f(1)=x_0\] \[f ...

  8. 效率对比:各种语言构造100W个时间对象

    原本是用perl写了一个通过给定的时间范围来筛选一个比较大的日志文件.但是测试发现筛选130W行日志需要2分多钟,对其中几个低效率函数单独进行了效率测试,发现构造100W个时间对象所花时间也是个大户. ...

  9. Visual Studio 2010 RDLC 报表简单使用

    原文:Visual Studio 2010 RDLC 报表简单使用 RDLC(Report Definition Language Client-side Processing)是Visual Stu ...

  10. How to Create a Basic Plugin

    Sometimes you want to make a piece of functionality available throughout your code. For example, per ...