根据二进制日志恢复

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

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

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

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. Chrome+ProxySwitchySharp+Putty

    好不容易写一个不编程的随笔了. 题目写出来,目的就已经很明确了,我就不详细解释原因了. 其实一年前多就已经配置成功了,写这篇随笔主要是给自己做一个备份,如果顺便能帮助其他人,也算功德无量了. 我就从最 ...

  2. C#发送电子邮件 (异步) z

    ///验证电子邮件的正则表达式   string emailStr = @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([ ...

  3. 【Spring实战】—— 11 通过AOP为特定的类引入新的功能

    如果有这样一个需求,为一个已知的API添加一个新的功能. 由于是已知的API,我们不能修改其类,只能通过外部包装.但是如果通过之前的AOP前置或后置通知,又不太合理,最简单的办法就是实现某个我们自定义 ...

  4. 笔记本win8系统共享wifi上网方法

    华硕笔记本电脑,安装了win8系统,使用wifi上网,由于连接无线路由的机器太多,超过路由连接数上限,因此转为使用笔记本共享wifi方式给手机上网. 最终上网方式为: 笔记本网卡接入无线路由器上网,笔 ...

  5. Linux下apt-get的软件一般安装路径

    apt-get安装目录和安装路径:apt-get 下载后,软件所在路径是:/var/cache/apt/archivesubuntu 默认的PATH为PATH=/home/brightman/bin: ...

  6. GetClassLoader和GetCallerClass的使用

    GetClassLoader是JAVA中用来得到ClassLoader的 JAVA中有以下几种ClassLoader. 1.  Bootstrap ClassLoader - GetClassLoad ...

  7. PAT1089. Insert or Merge

    PAT1089. Insert or Merge 题目大意 给定一个初始序列src, 一个排序当中的序列tar, 问排序方式是 Insert Sort, 或者 Merge Sort. 并输出下一次迭代 ...

  8. 使用Mosh,本地Mac locale与Remote Debian locale不一致的问题

    事实上, 你并不需要安装语言包, 只需安装中文字体并将/etc/locale.gen 中zh_CN.UTF-8 前的注释符号去掉, 执行sudo locale-gen 然后重启即可.

  9. logistic regression svm hinge loss

    二类分类器svm 的loss function 是 hinge loss:L(y)=max(0,1-t*y),t=+1 or -1,是标签属性. 对线性svm,y=w*x+b,其中w为权重,b为偏置项 ...

  10. java的引用总结

    四种引用:强弱软虚 强引用:使用强引用,在内存不足的时候垃圾处理器也不会回收他,哪怕导致程序崩溃 例如: A a=new A() 软引用:内存不足的时候会被回收(软引用可以和一个引用队列(Refere ...