mysql根据二进制日志恢复数据/公司事故实战经验
根据二进制日志恢复
目的:恢复数据,根据二进制日志将数据恢复到今天任意时刻
增量恢复,回滚恢复
如果有备份好的数据,将备份好的数据导入新数据库时,会随着产生二进制日志
先准备一台初始化的数据库
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根据二进制日志恢复数据/公司事故实战经验的更多相关文章
- mysql使用二进制日志恢复数据
一.恢复到某个二进制文件 1.开启二进制日志 在mysqld的配置节点下添加如下配置 log-bin="E:/Mysql57BinLog/binlog"(windows下的路径,l ...
- 如何通过Mysql的二进制日志恢复数据库数据
经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响.所以本文我们将和大家一起分享学习下如何通过Mysql的二机制日志(binlo ...
- Mysql利用binlog日志恢复数据操作(转)
a.开启binlog日志:1)编辑打开mysql配置文件/etc/mys.cnf[root@vm-002 ~]# vim /etc/my.cnf在[mysqld] 区块添加 log-bin=mysql ...
- MySQL通过binlog日志恢复数据
一.查看下自己的MySQL是否开启了binlog日志 # 是否启用binlog日志 OFF:关闭 ON:开启 show variables like 'log_bin'; 二.开启binlog日志 在 ...
- MySQL使用二进制日志恢复数据库
一.二进制日志简介 MySQL有不同类型的日志,其中二进制文件记录了所有对数据库的修改,如果数据库因为操作不当或其他原因丢失了数据,可以通过二进制文件恢复. 在my.ini文件中设置了log-bin, ...
- MySQL 数据库通过日志恢复
http://blog.csdn.net/hanxin1987216/article/details/5976856 要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名.一般可以从选 ...
- mysql学习------二进制日志管理
MySQL二进制日志(Binary Log) a.它包含的内容及作用如下: 包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE) 包含关于每个更新数据库( ...
- MySQL二进制binlog日志说明以及利用binlog日志恢复数据
MySQL的binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全量备份+binlog日志恢复增量数据部分). 一.关于 ...
- 解说mysql之binlog日志以及利用binlog日志恢复数据
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
随机推荐
- Ruby系列文章之1---开发者应该熟悉的10个工具
1. Git Git是进入Ruby这个生态圈首先最应该学会的工具.几乎所有以Ruby开发出来的套件都放在Github上.也就是不管你要下载或修改协作都需要透过Git. 2. RVM Ruby有很多种i ...
- 网络防火墙之iptables的前世今生和归宿
任何事物都有一个从无到有,再归于无的过程.是的,我这里用了一个绝对词:任何. 防火墙 在计算机领域中,防火墙(英文:Firewall)是一项协助确保信息安全的设备,会依照特定的规则,允许或是限制传输的 ...
- 用 dbgrid 或 dbgrideh 如何让所显示数据自动滚动
procedure TForm1.Timer1Timer(Sender: TObject);varm:tmessage;begin m.Msg:=WM_VSCROLL; m.WParamLo:=SB_ ...
- March 10 2017 Week 10 Friday
If you love life, life will love you back. 爱生活,生活也会爱你. Love life, and it will love you back. All thi ...
- HTTPS科普(转)
为什么需要https HTTP是明文传输的,也就意味着,介于发送端.接收端中间的任意节点都可以知道你们传输的内容是什么.这些节点可能是路由器.代理等. 举个最常见的例子,用户登陆.用户输入账号,密码, ...
- 站在巨人肩膀上的牛顿:Kubernetes和SAP Kyma
这周Jerry在SAP上海研究院参加了一个为期4天的Kubernetes培训,度过了忙碌而又充实的4天.Jason,Benny和Peng三位大神的培训干货满满,借此机会,Jerry和过去的两位老领导P ...
- JDK下载
1.进入Java官网,方式不限,如百度“Java 官网”,www.oracle.com,找到Java SE -> download.链接如下: http://www.oracle.com/tec ...
- 正则匹配之replace方法
在我印象中,replace方法就是一个正则匹配,然后一股脑的替换掉匹配到的内容的一个方法. 在一次任务需求中,有这么一个需求,一行字符串里面,替换相应字符串,具体就是匹配到‘A’然后把‘A’替换成‘a ...
- 三角测量(Triangulation)
三角测量(Triangulation)是视觉定位中,已知多个相机位置和空间中一点的投影点,进一步求该点3D位置的方法.三角测量是Pose Estimation的相反过程,求出相机位置后,图像中其它特征 ...
- 深入浅出C指针
http://bbs.9ria.com/blog-164422-18039.html 初学者在学习C语言时,通常会遇到两个瓶颈,一个是“递归”,一个是“指针”.大学老师在讲述这两个知识点时通常都是照本 ...