使用mysqlbinlog工具进行基于日志的恢复实例分析

分类:编程技术 时间:2024-02-20 15:46 浏览:0 评论:0
0
本文将详细讲解基于mysqlbinlog工具进行日志恢复的实例分析。小编觉得还是比较实用的,所以分享给大家,作为参考。希望您读完本文后有所收获。



1)RESET MASTER
日志所在文件夹中,二进制日志命名格式为 mysql-bin .* ,*代表日志的序号,序号是递增的,mysql-bin.index是日志的索引文件,记录了日志的最大序号
我们执行RESET MASTER删除所有日志



查看删除的日志



可以看到之前的日志都已经被删除了清除并从 00001 开始的新日志

2)PURGEMASTER LOGS TO & PURGE MASTERLOGS BEFORE
执行 PURGE MASTER LOGS TO'mysql -bin.** ****'命令是删除'******'号之前的所有日志
执行PURGE MASTER LOGS BEFORE'yyyy-mm-dd hh:mm:ss'命令删除删除'yyyy-mm-dd hh:mm:ss'时间之前的所有日志

3)-EXPIRE_LOGS_DAYS
该参数是设置日志的过期天数,过期的日志会被自动删除,这样有利于减少我们管理日志的工作量。我们需要修改my.cnf


这里我们设置日志保存3天,3天后过期的日志会自动删除

恢复
bin-log是记录所有mysql事件的操作。当mysql发生灾难性错误时,可以使用bin-log进行完全恢复、时间点恢复和基于位置的恢复


完全恢复、假设我们每天凌晨2点使用mysqldump备份数据库,但是第二天早上9点由于数据库故障导致数据无法访问,需要恢复数据,先使用昨天早上备份的文件来恢复到凌晨2点的状态n 使用mysqlbinlog恢复mysqldump备份以来的binlog
mysql localhost mysql-bin.000001 | mysql -uroot-p
这个数据库可以完全恢复到崩溃前的完整状态

根据时间点恢复
由于误操作,比如删除表,导致数据库崩溃上面说的完全恢复是没有用的,因为日志里还有误操作语句。我们需要的是恢复到误操作之前的状态,然后跳过误操作语句,然后恢复后面的语句。假设我们删除一个表。误操作发生在上午10:00。我们可以使用下面的语句通过备份和binlog将数据恢复到故障前

mysqlbinlog --stop-date='2010-09-04 9:59:59' /var/log/ mysql-bin.000001 | mysql -uroot -p


然后跳过误操作的时间点,继续执行后续的binlog

mysqlbinlog --start-date='2010-09- 04 10:01:00' /var/log/mysql-bin.04 10:01:00' /var/log/mysql-bin.000001 | mysql -uroot -p


其中--stop-date='2010-09-049:59:59'和--start-date='2010-09-04 10: 01:00' 该时间为您误操作的时间点。当然,这个时间点需要自己计算,而这个时间点不仅可能涉及到误操作,还可能涉及到被跳过的正确操作。

基于位置的恢复 如上所述,使用时间点恢复可能会发生,并且在某个时间点可能存在误操作和其他正确操作,因此我们需要更准确的恢复方法
使用mysqlbinlog查看二进制,可以看到



误操作drop表test1的end_log_pos为8879917,经过几个点击这个ID,我们得到前后操作的ID分别是8879916和8879918
我们将进行位置恢复操作

mysqlbinlog --stop-position='8879916' /var /log/mysql-bin.000001 | /log/mysql-bin.000001 | mysql -uroot -p

mysqlbinlog --start-position='8879918' /var/log/mysql-bin.000001 | -start-position='8879918' /var/log/mysql-bin.000001 | mysql -uroot -p

服务器生成的二进制日志文件以二进制格式写入。要检查这些文本格式的文件,应使用 mysqlbinlog 实用程序。
mysqlbinlog 应该这样调用:
shell> mysqlbinlog[options] 日志文件 例如,要显示二进制日志binlog.000003的内容,使用以下命令:
shell> mysqlbinlogbinlog.0000003输出包含在内binlog.000003 中的所有语句,以及其他信息,例如每个语句所花费的时间、客户端发出的线程 ID、线程发出时的时间戳等。
通常,可以使用 mysqlbinlog直接读取二进制日志文件并将其与本地MySQL服务器一起使用。还可以使用 --read-from-remote-server 选项从远程服务器读取二进制日志。
读取远程二进制日志时,您可以使用连接参数选项来指示如何连接到服务器,但它们通常会被忽略,除非您还指定了 --read-from-remote-server 选项。选项包括 –host、–password、–port、–protocol、–socket 和 –user。
您还可以使用mysqlbinlog读取从服务器在此过程中写入的Relay日志文件。中继日志格式与二进制日志文件相同。

mysqlbinlog支持以下选项:
·
—help,-?
显示帮助消息并退出。
·
—database=db_name, -d db_name
仅列出该数据库的条目(仅使用本地日志)。
·
–force-read, -f
使用此选项,如果 mysqlbinlog 读取它无法识别的二进制日志事件,它将打印警告并忽略该事件并继续。如果没有这个选项,mysqlbinlog如果读取到这样的事件就会停止。
·
–hexdump, -H
在注释中显示日志的十六进制转储。此输出有助于复制期间的调试。该选项是在 MySQL 5.1.2 中添加的。
·
–host=host_name, -h host_name
获取给定主机上 MySQL 服务器的二进制日志。
·
–local-load=path, -l <​​em>pat

预处理指定目录下LOADDATA INFILE的本地临时文件。
·
–offset=N, -o N
跳过前N个条目。
·
–password[=密码], -p[密码]
连接到服务器时使用的密码。如果使用短选项形式 (-p),则选项和密码之间不能有空格。如果命令行上的 –password 或 -p 选项后没有密码值,系统将提示您输入密码。
·
–port=port_num, -P port_num
用于连接到远程服务器的 TCP/IP 端口号。
·
–position=N, -j N>
已弃用,您应该使用 –start-position。
·
–协议={TCP |插座|管道| -position

使用的连接协议。
·
–read-from-remote-server, -R
从MySQL服务器读取二进制日志。如果未给出此选项,则任何连接参数选项都将被忽略。选项包括 –host、–password、–port、–protocol、–socket 和 –user。
·
–result-file=name,-r name
直接输出到给定文件。
·
–short-form,-s
只显示日志中包含的语句,不显示其他信息。
·
--socket=path, -S path
用于连接的套接字文件。
·
–start-datetime=datetime
从二进制日志中,第一个日期时间等于或晚于datetime参数。开始阅读。 日期时间值相对于运行mysqlbinlog的计算机上本地时区。值格式应符合 DATETIME 或 TIMESTAMP 数据类型。例如:
shell> mysqlbinlog–start-datetime=”2004-12-25 11:25:56″ binlog.000003这个选项可以帮助点对点恢复。
·
–stop-datetime=datetime
从二进制日志中,第一个日期时间等于或晚于datetime参数。开始和停止阅读。有关日期时间值的说明,请参阅 –start-datetime 选项。此选项可以帮助及时恢复。
·
–start-position=N
当二进制日志中的第一个位置等于N时开始读取事件> 参数。
·
–stop-position=N
二进制日志中的第一个位置等于或大于N时的事件参数开始和停止读取。
·
–to-last-logs, -t
在MySQL服务器中请求的二进制日志结束时不停止,而是继续打印直到最后一个二进制日志结束。如果输出是发送到同一个MySQL服务器,会造成死循环。此选项需要 --read-from-remote-server。
·
–disable-logs-bin, -D
禁用二进制日志。如果使用 --to-last-logs 选项将输出发送到同一台 MySQL 服务器,则可以避免无限循环。此选项在崩溃恢复期间也很有用,以避免复制已记录的语句。 注意:此选项需要超级权限。
·
–user=user_name, -u user_name
连接远程服务器时使用的 MySQL 用户名。
·
–version,-V
显示版本信息并退出。

这篇关于《基于日志恢复的Mysqlbinlog工具示例分析》的文章就分享到这里。希望以上内容能够给大家带来一些帮助,让大家能够学到更多的知识,如果您觉得文章不错,请分享出去,让更多的人看到。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 使用mysqlbinlog工具进行基于日志的恢复实例分析

用户评论