使用mysqlbinlog工具的基础上及时恢复数据的位置或点
使用mysqlbinlog工具的基础上及时恢复的位置或点
MySQL备份一般采取完全备份的形式加日志备份。让我们运行一个完整备份,每天。每小时运行二进制日志备份。
这样在MySQL Server故障后能够使用全备份和日志备份将数据恢复到最后一个二进制日志备份前的任何位置或时间。
用来进行全备和日志备的工具各种各样,各有其特色,在这里不做描写叙述。本文主要解说一下在回复全然备份后,怎样应用备份的二进制日志来将数据恢复到指定的位置或时间点。
这里有个十分重要的工具——mysqlbinlog,专门用来查看二进制日志。我们以一些列子来说明问题:
先看看怎样在MySQL Server中直接查看有哪些二进制日志文件及文件里包括哪些事件。
先清空MySQL Server上的全部二进制日志
mysql> reset master;
Query OK, 0 rows affected (0.00 sec)
查看MySQL Server上的二进制日志
mysql> show binary logs;
+---------------------+-----------+
| Log_name | File_size |
+---------------------+-----------+
| VMS00781-bin.000001 | 120 |
+---------------------+-----------+
查看二进制日志中的事件
mysql>show binlog events;
+---------------------+-----+-------------+-----------+-------------+---------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------------+-----+-------------+-----------+-------------+---------------------------------------+
| VMS00781-bin.000001 | 4 | Format_desc | 36 | 120 | Server ver: 5.6.12-log, Binlog ver: 4 |
+---------------------+-----+-------------+-----------+-------------+---------------------------------------+
运行一些DML操作
mysql> delete from ab limit 2;
Query OK, 2 rows affected (1.01 sec)
又一次開始一个新的日志文件
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)
运行一些DML操作
mysql> delete from ab limit 1;
Query OK, 1 row affected (0.00 sec)
mysql> delete from ab limit 2;
Query OK, 2 rows affected (0.01 sec)
查看MySQL Server上的二进制日志
mysql> show binary logs;
+---------------------+-----------+
| Log_name | File_size |
+---------------------+-----------+
| VMS00781-bin.000001 | 372 |
| VMS00781-bin.000002 | 515 |
+---------------------+-----------+
查看二进制日志中的事件
mysql> show binlog events;
+---------------------+-----+-------------+-----------+-------------+---------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------------+-----+-------------+-----------+-------------+---------------------------------------+
| VMS00781-bin.000001 | 4 | Format_desc | 36 | 120 | Server ver: 5.6.12-log, Binlog ver: 4 |
| VMS00781-bin.000001 | 120 | Query | 36 | 192 | BEGIN |
| VMS00781-bin.000001 | 192 | Table_map | 36 | 238 | table_id: 204 (test.ab) |
| VMS00781-bin.000001 | 238 | Delete_rows | 36 | 291 | table_id: 204 flags: STMT_END_F |
| VMS00781-bin.000001 | 291 | Xid | 36 | 322 | COMMIT /* xid=289981 */ |
| VMS00781-bin.000001 | 322 | Rotate | 36 | 372 | VMS00781-bin.000002;pos=4 |
+---------------------+-----+-------------+-----------+-------------+---------------------------------------+
默认显示可找到的第一个二进制日志文件里的事件,包括了事件的開始位置、结束位置、事件类型、信息等内容。能够看到,第一个事件为格式描写叙述事件。第二个为查询事件,事务開始;第三个为表映射事件,第四个为我们运行的删除操作。第五个为Xid时间是自己主动提交事务的动作,第六个为日志轮换事件,是我们运行flush logs开启新日志文件引起的。
查看指定的二进制日志中的事件
mysql> show binlog events in 'VMS00781-bin.000002';
+---------------------+-----+-------------+-----------+-------------+---------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------------+-----+-------------+-----------+-------------+---------------------------------------+
| VMS00781-bin.000002 | 4 | Format_desc | 36 | 120 | Server ver: 5.6.12-log, Binlog ver: 4 |
| VMS00781-bin.000002 | 120 | Query | 36 | 192 | BEGIN |
| VMS00781-bin.000002 | 192 | Table_map | 36 | 238 | table_id: 204 (test.ab) |
| VMS00781-bin.000002 | 238 | Delete_rows | 36 | 282 | table_id: 204 flags: STMT_END_F |
| VMS00781-bin.000002 | 282 | Xid | 36 | 313 | COMMIT /* xid=290004 */ |
| VMS00781-bin.000002 | 313 | Query | 36 | 385 | BEGIN |
| VMS00781-bin.000002 | 385 | Table_map | 36 | 431 | table_id: 204 (test.ab) |
| VMS00781-bin.000002 | 431 | Delete_rows | 36 | 484 | table_id: 204 flags: STMT_END_F |
| VMS00781-bin.000002 | 484 | Xid | 36 | 515 | COMMIT /* xid=290005 */ |
| VMS00781-bin.000002 | 515 | Query | 36 | 593 | flush slow logs |
| VMS00781-bin.000002 | 593 | Query | 36 | 671 | flush slow logs |
+---------------------+-----+-------------+-----------+-------------+---------------------------------------+
该命令还包括其它选项以便灵活查看
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
mysql> show binlog events in 'VMS00781-bin.000002' from 120 limit 2,3;
+---------------------+-----+-------------+-----------+-------------+---------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------------+-----+-------------+-----------+-------------+---------------------------------+
| VMS00781-bin.000002 | 238 | Delete_rows | 36 | 282 | table_id: 204 flags: STMT_END_F |
| VMS00781-bin.000002 | 282 | Xid | 36 | 313 | COMMIT /* xid=290004 */ |
| VMS00781-bin.000002 | 313 | Query | 36 | 385 | BEGIN |
+---------------------+-----+-------------+-----------+-------------+---------------------------------+
SHOW BINARY LOGS 等价于 SHOW MASTER LOGS
PURGE BINARY LOGS用于里二进制日志。如:
PURGE BINARY LOGS TO 'mysql-bin.010';
PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26';
RESET MASTER 与 RESET SLAVE
前者清空index文件里列出的全部二进制日志,重置index文件为空。并创建一个新的二进制日志文件,一般用于MASTER首次启动时。后者使SLAVE忘记其在MASTER二进制日志文件里的复制位置,它会删除master.info、relay-log.info 和全部中继日志文件并開始一个新的中继日志文件。以便于開始一个干净的复制。
在使用RESET SLAVE前需先关闭 SLAVE复制线程。
上述方式能够查看到server上存在的二进制日志文件及文件里的事件,可是想查看到文件里详细的内容并应于恢复场景还得借助mysqlbinlog这个工具。
查看:
shell> mysqlbinlog [options] log_file ...
比方:
mysqlbinlog [options] VMS00781-bin.000001
输出内容会因日志文件的格式以及mysqlbinlog工具使用的选项不同而略不同。二进制日志文件里详细内容的含义以及mysqlbinlog的可用选项可參考相关手冊。这里就一些须要特别注意的情况进行说明。
二进制日志文件的格式包括行模式、语句模式和混合模式(也即有server决定在什么情况下记录什么类型的日志)。基于语句的日志中事件信息包括运行的语句等,基于行的日志中事件信息包括的是行的变化信息等。混合模式的日志中两种类型的事件信息都会记录。为了便于查看记录了行变化信息的事件在当时具体运行了什么样的SQL语句能够使用mysqlbinlog工具的-v(--verbose)选项,该选项会将行事件重构成被凝视掉的伪SQL语句,假设想看到更具体的信息可
以将该选项给两次如-vv,这样能够包括一些数据类型和元信息的凝视内容,如
mysqlbinlog -v VMS00781-bin.000001
mysqlbinlog -vv VMS00781-bin.000001
另外mysqlbinlog和能够通过--read-from-remote-server选项从远程服务器读取二进制日志文件,这时须要一些而外的连接參数。如--host,--password ,--port,--user,--socket。--protocol等。这些參数仅在指定了--read-from-remote-server后有效。
不管是本地二进制日志文件还是远程server上的二进制日志文件,不管是行模式、语句模式还是混合模式的二进制日志文件,被mysqlbinlog工具解析后都可直接应用与MySQL Server进行基于时间点、位置或数据库的恢复。
比方:
mysqlbinlog VMS00781-bin.000001 | mysql -uusername -p
或者先将二进制日志写到.sql文件里。然后在mysqlclient运行这些文件,比方:
mysqlbinlog VMS00781-bin.000001 > /tmp/VMS00781-bin.000001.sql
mysql>source /tmp/VMS00781-bin.000001.sql
这里有几个比較关键的參数:
--database=db_name, -d db_name
该參数使mysqlbinlog仅从本地二进制日志中输出指定的db_name被use命令选作默认数据库时产生的日志事件。行为类似于mysqld的--binlog-do-db命令。若该參数指定了多次那么仅仅有最后一次指定的内容有效。
參数详细的影响依赖于二进制日志格式,仅仅有在使用行模式的日志格式时该參数才干保证一致性。基于语句或混合模式的二进制日志格式中由于可能存在跨库的更新导致--database參数表现不同的行为,从而不能保证数据一致性。
mysqlbinlog VMS00781-bin.000001 -d testDB | mysql -uusername -p
--force-read, -f
使用了该參数后mysqlbinlog工具在读取到不能识别的日志事件时会打印出warning,忽略事件并继续运行。没有此參数的情况下mysqlbinlog会停止。
mysqlbinlog VMS00781-bin.000001 -d testDB -f | mysql -uusername -p
--no-defaults
阻止mysqlbinlog工具从不论什么配置文件读取參数, .mylogin.cnf除外(以便于安全的保存password)
mysqlbinlog VMS00781-bin.000001 -d testDB -f --no-defaults| mysql -uusername -p
--start-datetime=datetime
--stop-datetime=datetime
上边一组參数用于指定恢复開始时间点和结束时间点。能够一起或单独给出,也可与--start-position,--stop-position混用
mysqlbinlog VMS00781-bin.000001 -d testDB -f --no-defaults --start-datetime=datetime --stop-position=NNNNNN | mysql -uusername -p
--start-position=N, -j N
--stop-position=N
上边一组參数用于指定恢复開始位置和结束位置,能够一起或单独给出也可与--start-datetime。--stop-datetime混用
mysqlbinlog VMS00781-bin.000001 -d testDB -f --no-defaults --start-position=NNNNNN --stop-datetime=datetime | mysql -uusername -p
须要还原的二进制日志文件通常不止一个,那么要是有多个二进制日志文件须要还原呢,该注意些什么?
首先。能够选择上述直接重定向到mysqlclient的方法或先导入到.sql文件然后运行.sql文件的方式逐个应用二进制日志文件。
可是这里存在一个隐患。及,假设二进制日志中记录有使用暂时表的情况,那么当上一个日志应用完,在新连接中应用下一个二进制日志时暂时表就会丢失,引起错误。所以。安全的方式是多个二进制文件同一时候运行。
如:
mysqlbinlog VMS00781-bin.000001 VMS00781-bin.000002 VMS00781-bin.000003 --start-position=NNNNNN --stop-datetime=datetime | mysql -uusername -p
或mysqlbinlog VMS00781-bin.00000[1-3] --start-position=NNNNNN --stop-datetime=datetime | mysql -uusername -p
当多个二进制日志文件同一时候运行时。--start-position和--stop-position分别仅仅应用于第一个列出的二进制日志文件和最后一个列出的二进制日志文件
当然也能够先将多个二输出二进制日志文件相同.sql最后,运行该文件.sql文件(它适用于少量的日志的情况下)
版权声明:本文博客原创文章,博客,未经同意,不得转载。
使用mysqlbinlog工具的基础上及时恢复数据的位置或点的更多相关文章
- 利用IDM工具下载ESA上的Sentinel数据
由于美国政府关门,NASA,USGS,NOAA等机构中的非核心部门也都放假了,暂时无法提供Sentinel数据下载,而直接从ESA下载数据比蜗牛上山都慢,幸好发现了IDM工具. 利用浏览器或wget工 ...
- 数据误操作,删库跑路?教你使用ApexSQLLog工具从 SQLServer日志恢复数据!
前几天同事不小心误操作,将SQLServer库的一张表的一个状态字段给刷成了一个统一状态,由于是update执行所以原来的相关状态无法确定.发生这种事情的时候我的小伙伴背后 一凉,估计心里里面想这怕是 ...
- ORACLE11g 没有控制文件如何通过rman备份恢复数据的详细实战过程
1.副总裁需要裸恢复的严峻现实 集团总部的信息部负责人给我打电话说为了找一年前的记录,所以需要对一年前2015年5月1日的数据进行恢复.而2016年初因为进行迁移,所以有些文件可能丢失,手上只有rma ...
- 从WEB SERVICE 上返回大数据量的DATASET
前段时间在做一个项目的时候,遇到了要通过WEB SERVICE从服务器上返回数据量比较大的DATASET,当然,除了显示在页面上以外,有可能还要用这些数据在客户端进行其它操作.查遍了网站的文章,问了一 ...
- xtrbackup备份,及恢复数据
模拟定时任务周日备份数据,周一数据变化,周一crontab定时任务增量备份,周二数据变化,周二crontabl增量备份,然后有人删库,我们进行恢复数据 模拟crontab 里的定时任务周日全备 [ro ...
- mysqlbinlog工具基于日志恢复详细解释
如果每天都会生成大量的二进制日志,这些日志长时间不清理的话,将会对磁盘空间带来很大的浪费,所以定期清理日志是DBA维护mysql的一个重要工作 1)RESET MASTER在上面查看日志存放的文件夹中 ...
- MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库【转载】
转自 MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库 - _安静 - 博客园http://www.cnblogs.com/xionghui/archive/2012/ ...
- [转] 使用 MYSQLBINLOG 来恢复数据
使用 MYSQLBINLOG 来恢复数据 2009-04-05 12:47:05 标签:mysql mysqlbinlog 恢复 数据库 数据 原创作品,允许转载,转载时请务必以超链接形式标明文章 ...
- 使用mysqlbinlog工具进行基于位置或时间点的数据恢复
使用mysqlbinlog工具进行基于位置或时间点的恢复 MySQL备份一般采取全备份加日志备份的方式,比如每天执行一次全备份,每小时执行一次二进制日志备份.这样在MySQL Server故障后可以使 ...
随机推荐
- BGP的状态机制
Idle 状态:即空闲状态,不接受任何BGP的连接,等待Start事件的产生,如果有start事件产生,若有start事件产生,系统开启ConnectRetry定时器,向邻居发起TCP连接,并将状态变 ...
- pygame在安装过程中无法找到videodev.h错误
首先参考<ubuntu 安装 pygame 非常好玩的东西>.在运行sudo python setup.py时.出现 linux/videodev.h:No such file or di ...
- spring 普通类获取四大作用域request、applicationContext、session、page
几乎所有web应用容器都提供了四种类似Map的结构:application session request page,Jsp或者Servlet通过向着这四个对象放入数据,从而实现Jsp和Servlet ...
- WPF疑难杂症会诊
原文:WPF疑难杂症会诊 为什么图片像素是模糊的? 容器边框设为非整数时,其内容中的像素图片会产生模糊,即使设置SnapsToDevicePixels="True"也无效. 以下是 ...
- 【JAVA得知】struts2 于 Actionsupport 任务
尊重原创:http://xumiao900.iteye.com/blog/469760 Action 跟 Actionsupport 的差别 当我们在写action的时候,能够实现A ...
- HDU 1164 Eddy's research I【素数筛选法】
思路:将输入的这个数分成n个素数的相乘的结果,用一个数组存储起来.之后再输出就能够了 Eddy's research I Time Limit: 2000/1000 MS (Java/Others) ...
- 一类斜率优化的dp(特有性质:只能连续,不能交叉)
hdu3480 给定一个有n个数的集合,将这个集合分成m个子集,要求子集的并等于全集求花费最小. 花费为该子集的(最大数-最小数)的平方. 我们将n个数排序, a < b < c < ...
- Apple Watch视频教程(连载)
发展Apple Watch 必须Xcode 6.2上述号码,所有视频.课件.Demo须要的能够加我私人微信 wanghj29(扫描头像也能够),在微信里面给我发email,我都发过去,另外也提供在线播 ...
- 间隔DP基础 POJ2955——Brackets
取血怒.first blood,第一区间DP,这样第一次没有以某种方式在不知不觉中下降~~~ 题目尽管是鸟语.但还是非常赤裸裸的告诉我们要求最大的括号匹配数.DP走起~ dp[i][j]表示区间[i, ...
- svn创建并应用补丁
有时,我们不能提交临时局部变化,而我们需要回滚到svn最新的版本号.然,这些变化,我们要保持.提交或发送给其他同事的未来review. 怎么做?非常easy,只需要两个步骤: (1)创建一个补丁文件并 ...