对mysqlbinlog日志进行操作的总结包括 启用,过期自动删除

操作命令:

show binlog events in ‘binlog.000016‘ limit 10;

reset master 删除所有的二进制日志

flush logs  产生一个新的binlog日志文件

show master logs; / show binary logs; 查看二进制文件列表和文件大小

./mysqlbinlog --start-datetime="2012-05-21 15:30:00" --stop-datetime="2012-05-21 16:40:00" /var/mysql/binlog/binlog.000005 > a.log

近段时间一直在研究mysql的日志系统,在网上看了N多mysql日志操作的文章,但都过于零乱,为了让自己以后不再搞忘,特作出以下总结:

1. 以前我错误的认为mysql的日志可以恢复到任何时间的状态,其实并不是这样,这个恢复是有前提的,就是你至少得有一个从日志记录开始后的数据库备份,通过日志恢复数据库实际上只是一个对以前操作的回放过程而已,不用想得太复杂,既然是回放你就得注意了,如果你执行了两次恢复那么就相当于是回放了两次,后果如何你自己应该清楚了吧。[1:恢复前务必先备份数据.2:由于二进制文件多,并且需要恢复的数据跨度大,可以考虑将 日志文件合并在恢复.]

2. 要想通过日志恢复数据库,在你的my.cnf文件里应该有如下的定义,log-bin=mysql-bin,这个是必须的.binlog-do-db=db_test,这个是指定哪些数据库需要日志,如果有多个数据库就每行一个,如果不指定的话默认就是所有数据库.
[mysqld]
log-bin=mysql-bin
binlog-do-db=db_test
binlog-do-db=db_test2

3.删除二进制日志:
a.mysql> system ls -ltr /var/lib/mysql/bintest*;
mysql>reset master(清空所有的二进制日志文件)
b.purge master logs to ‘bintest.000006′;(删除bintest.000006之前的二进制日志文件)
c.purge master logs before ’2007-08-10 04:07:00′(删除该日期之前的日志)
d.在my.cnf 配置文件中[mysqld]中添加:
expire_logs_day=3设置日志的过期天数,过了指定的天数,会自动删除

4.下面就是恢复操作了
特别提示,mysql每次启动都会重新生成一个类似mysql-bin.000003的文件,如果你的mysql每天都要重新启动一次的话,这时候你就要特别注意不要选错日志文件了。

(注意:下面有一些技巧,这些东西才是最宝贵的哟,普通的东东手册上都有,这可是我摸索出来的哟,别人我都不告诉他。

技巧1 :
在下面你将看到 mysqlbinlog –stop-date=”2005-04-20 9:59:59″ /var/log/mysql/mysql-bin.000001  | mysql -u root -pmypwd 类似的语句,但是它一次只能操作一个日志文件,如果你变通一下变成这样 mysqlbinlog –stop-date=”2005-04-20 9:59:59″/var/log/mysql/mysql-bin.0* | mysql -u root -pmypwd 那么它基本上就会表示出的所有的日志文件了,这样可解决你忘记在哪一个日志文件中的问题,当然你也可以用这种写法更完美,mysqlbinlog –stop-date=”2005-04-20 9:59:59″/var/log/mysql/mysql-bin.[0-9]* | mysql -u root -pmypwd  ,看到[0-9]*这个东东了吧,它表示以数字开头的任何字符,方便吧!

技巧2:
你可以通过–one-database 参数选择性的恢复单个数据库,example在下面,爽吧。
mysqlbinlog –stop-date=”2005-04-20 9:59:59″ /var/log/mysql/mysql-bin.000001  | mysql -u root -pmypwd–one-database db_test

技巧3:
如果你老人家已经使用过 /usr/local/mysql5/bin/mysqlbinlog –start-date=”2005-04-20 9:55:00″ /var/data/mysql5/mysql-bin.0* > /home/db/tt.sql 类似的语句将日志导成了ASCII文本文件,那么你就可以直接在phpmyadmin或者其它什么乱七糟八的的客户端里执行这个文件文件就行了[source *.sql],因为它本身就是一个标准的sql文件,比如想让文件里面的某些语句不执行,OK,it’s easy,找到它们删除即可,然后再放进去执行就OK滴啦!这个可是灰常灰常的爽哟。。。。。。

技巧4:
我来给大家讲一下,下面这条语句都做了什么
mysqlbinlog –stop-date=”2005-04-20 9:59:59″ /var/log/mysql/mysql-bin.000001  | mysql -u root -pmypwd –one-database db_test
这是把mysql-bin.000001这个二进制文件里的内容转换成ASCII文件(也就是sql语句),直接通过管道操作符”|”传输给 mysql这个程序,然后过滤掉其它数据库的语句,只在db_test里执行。

技巧5:
着了,多打了一个技巧,现在暂时没内容,等以后再加吧!!!
)

下面部份摘录自网上。

如果MySQL服务器启用了二进制日志,你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如,从你最后一次备份)直到现在或另一个指定的时间点的数据。关于启用二进制日志的信息,参见5.11.3节,“二进制日志”。对于 mysqlbinlog的详细信息,参见mysql手册8.6节,“mysqlbinlog:用于处理二进制日志文件的实用工具”。

要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini,取决于你的系统)中找到路径。如果未包含在选项文件中,当服务器启动时,可以在命令行中以选项的形式给出。启用二进制日志的选项为– log-bin。要想确定当前的二进制日志文件的文件名,输入下面的MySQL语句:

SHOW BINLOG EVENTS G

你还可以从命令行输入下面的内容:

mysql –user=root -pmy_pwd -e ‘SHOW BINLOG EVENTS G’

将密码my_pwd替换为服务器的root密码。

1. 指定恢复时间

对于MySQL 4.1.4,可以在mysqlbinlog语句中通过–start-date和–stop-date选项指定DATETIME格式的起止时间。举例说明,假设在今天上午10:00(今天是2005年4月20日),执行SQL语句来删除一个大表。要想恢复表和数据,你可以恢复前晚上的备份,并输入:

mysqlbinlog –stop-date=”2005-04-20 9:59:59″ /var/log/mysql/mysql-bin.000001  | mysql -u root -pmypwd

该命令将恢复截止到在–stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句,可能你想要恢复后面发生的活动。根据这些,你可以用起使日期和时间再次运行mysqlbinlog:

mysqlbinlog –start-date=”2005-04-20 10:01:00″ /var/log/mysql/mysql-bin.000001  | mysql -u root -pmypwd

在该行中,从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。

2. 指定恢复位置

也可以不指定日期和时间,而使用mysqlbinlog的选项–start-position和–stop-position来指定日志位置。它们的作用与起止日选项相同,不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法,特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号,可以运行mysqlbinlog寻找执行了不期望的事务的时间范围,但应将结果重新指向文本文件以便进行检查。操作方法为:

mysqlbinlog –start-date=”2005-04-20 9:55:00″ –stop-date=”2005-04-20 10:05:00″
/var/log/mysql/mysql-bin.000001 > /tmp/mysql_restore.sql

该命令将在/tmp目录创建小的文本文件,将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件,寻找你不要想重复的语句。如果二进制日志中的位置号用于停止和继续恢复操作,应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了以前的备份文件后,你应从命令行输入下面内容:

mysqlbinlog –stop-position=”368312″ /var/log/mysql/mysql-bin.000001 | mysql -u root -pmypwd
mysqlbinlog –start-position=”368315″ /var/log/mysql/mysql-bin.000001 | mysql -u root -pmypwd

上面的第1行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。因为mysqlbinlog的输出包括每个SQL语句记录之前的SET TIMESTAMP语句,恢复的数据和相关MySQL日志将反应事务执行的原时间。

转自:http://blog.csdn.net/bopzhou/article/details/8330610

时间: 2024-10-06 16:13:30

对mysqlbinlog日志进行操作的总结包括 启用,过期自动删除的相关文章

mysql-binlog日志恢复数据库

binlog日志用于记录所有更新了数据或者已经潜在更新了数据的所有语句.语句以“事件”的形式保存,它描述数据更改.当我们因为某种原因导致数据库出现故障时,就可以利用binlog日志来挽回(前提是已经配置好了binlog),接下来我们来配置 一.开启mysql-binlog日志 在mysql配置文件my.cnf加上如下配置 [mysqld] log-bin=mysql-bin 重启mysql service mysqld restart 二.备份数据库 1)先查看一下当前数据库情况 mysql>

MySQLbinlog日志04binlog日志字节码解析之二Write_Rows事件

本系列博客主要介绍MySQL数据库的binlog日志的相关内容,这个系列的主题包括: MySQLbinlog日志01binlog日志基本操作 MySQLbinlog日志02binlog日志用于数据恢复 MySQLbinlog日志03binlog日志字节码解析 MySQLbinlog日志04binlog日志字节码解析之二Write_Rows事件 前一篇博客介绍了 MySQLbinlog日志03binlog日志字节码解析 本篇博客将接着介绍Write Rows事件的字节码解析. 7.Write ro

MySQLbinlog日志03binlog日志字节码解析

本系列博客主要介绍MySQL数据库的binlog日志的相关内容,这个系列的主题包括: MySQLbinlog日志01binlog日志基本操作 MySQLbinlog日志02binlog日志用于数据恢复 MySQLbinlog日志03binlog日志字节码解析 MySQLbinlog日志04binlog日志字节码解析之二Write_Rows事件 本博客主要内容包括: binlog事件类型 binlog事件头部结构 binlog字节码分析的准备工作 binlog日志文件MAGIC代码 Format 

传递给数据库 'master' 中的日志扫描操作的日志扫描号无效

错误:连接数据库的时候提示:SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确 C:\Documents and Settings\Administrator>"C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Release\setup.exe" /q /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS

Linux下logrotate日志轮转操作梳理

对于Linux系统安全来说,日志文件是极其重要的工具.logrotate程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用.可以节省磁盘空间.下面就对logrotate日志轮转操作做一梳理记录: 1)配置文件介绍Linux系统默认安装logrotate工具,它默认的配置文件在:/etc/logrotate.conf/etc/logrotate.d/ logrotate.conf 才主要的配置文件,logrotate.d 是一个目录,该目

传递给数据库 'model' 中的日志扫描操作的日志扫描号无效

原因分析: 对于在Windows 8 Modern风格(注:即原Metro风格)的开始菜单界面,可以通过对磁贴进行固定或取消操作.如果仅仅对某个磁贴如“桌面”进行取消,那仍然可以进入所有应用中选中然后再重新固定即可.具体请阅读操作步骤. 解决方案: 1. 在开始菜单界面的空白处,点击鼠标右键.然后底部将会弹出“所有应用”的提示,鼠标左键单击; 2. 在所有应用列表中,找到“桌面”图标并在上面单击鼠标“右键”,然后再点击左下角的“固定到开始屏幕”; 3. 此操作后将重新在开始屏幕固定“桌面”磁贴;

python(13)---发邮件、写日志、操作redis数据库

一.写邮件 import yagmail user = '[email protected]' password = 'rtcxbuejmqrdgjcd' #不是qq密码,是邮件授权码 在qq邮箱,设置--账户--开启POP3/SMTP服务,获得授权码 m=yagmail.SMTP(host='smtp.qq.com',user=user,password=password) #host-- 163邮箱用 tp.163.com m.send(to=['[email protected]','xx

【Python】[技术博客] 一些使用Python编写获取手机App日志的操作

一些使用Python编写获取手机App日志的操作 如何获取手机当前打开的App的包名 如何获取当前App进程的PID 如何查看当前App的日志 如何将日志保存到文件 如何关闭进程 如何不显示命令行窗口 1.如何获取手机当前打开的App的包名 可以直接在命令行中输入adb shell dumpsys window | findstr mCurrentFocus 以手机QQ为例,读取到的mCurrentFocus的信息为 mCurrentFocus=Window{cb7270e u0 com.ten

linux自动删除n天前日志

linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天惦记着是否需要清理日志,不用每天收到硬盘空间不足的报警短信,想好好休息的话,让我们把这个事情交给机器定时去执行吧. 1.删除文件命令: find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 实例命令: find /opt/soft/log/ -mtime +30