<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[静怡家园]]></title> 
<link>http://www.zhanghaijun.com/index.php</link> 
<description><![CDATA[书山有路勤为径，学海无涯苦作舟！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[静怡家园]]></copyright>
<item>
<link>http://www.zhanghaijun.com/post//</link>
<title><![CDATA[通过mysql二进制binlog恢复数据]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[数据库类]]></category>
<pubDate>Fri, 25 Jan 2013 03:05:15 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post//</guid> 
<description>
<![CDATA[ 
	事情的起因是本月某日程序员一时操作失误删除了某表id大于或等于216内容，需要恢复到当天的数据，以免影响用户使用，这种恢复也很简单，通过mysql的二进制文件就可以，前提是你的mysql配置已经开启了二进制日志功能。<br/><br/>开始提取二进制日志，首先把某库22日00时开始的SQL语句提取出来，首先提取binlog.002895的某库SQL语句，mysql的二进制日志不是按天创建的，在my.cnf的配置文件有设置max_binlog_size最大值，日志的大小达到你设置的值时，mysql才会创建一个新的日志文件，如果大小达到设置的值了，最后的执行语句很长时会等到语句执行完毕，才会新建一个日志文件。<br/><br/>-rw-rw---- 1 mysql mysql 1073764199 Jan 20 09:55 binlog.002892<br/>-rw-rw---- 1 mysql mysql 1073769146 Jan 20 20:43 binlog.002893<br/>-rw-rw---- 1 mysql mysql 1073760451 Jan 21 10:39 binlog.002894<br/>-rw-rw---- 1 mysql mysql 1073745436 Jan 21 17:31 binlog.002895<br/>-rw-rw---- 1 mysql mysql 1073742546 Jan 22 05:28 binlog.002896<br/>-rw-rw---- 1 mysql mysql 1073758697 Jan 22 13:44 binlog.002897<br/>-rw-rw---- 1 mysql mysql 1073742021 Jan 22 21:27 binlog.002898<br/><br/>#/usr/local/webserver/mysql/bin/mysqlbinlog --no-defaults --database=testdb --start-datetime='2013-01-22 00:00:00' /home/mysql/binlog/binlog.002895 > log2895.txt<br/>#/usr/local/webserver/mysql/bin/mysqlbinlog --no-defaults --database=testdb&nbsp;&nbsp;/home/mysql/binlog/binlog.002896 > log2896.txt<br/>#/usr/local/webserver/mysql/bin/mysqlbinlog --no-defaults --database=testdb&nbsp;&nbsp;/home/mysql/binlog/binlog.002897 > log2897.txt<br/>#/usr/local/webserver/mysql/bin/mysqlbinlog --no-defaults --database=testdb&nbsp;&nbsp;/home/mysql/binlog/binlog.002898 > log2898.txt<br/><br/>现在已经把那个时间段的某库（这里使用testdb）的sql语句全部提取出来了，我们现在只需要恢复被误删的那个库那段时间的数据，并不需要恢复整个数据库，所以接下来进行第二次提取sql内容。<br/><br/>#grep userlist log2895.txt> log2895-userlist.txt<br/>#grep userlist log2896.txt> log2896-userlist.txt<br/>#grep userlist log2897.txt> log2897-userlist.txt<br/>#grep userlist log2898.txt> log2898-userlist.txt<br/><br/>现在提取出来的文件就只有对userlist表操作的SQL语句了，这里有两个需要注意的地方，一个是你需要把最后一个log2898-userlist.txt文件中程序员误操作的那个删除的SQL语句删除掉，一个是提取出来的SQL语句是每行一条，行尾没有“;”号，要在每个行SQL语句行尾加“;”使用vi编辑器打开SQL文件:%s/$/;即可在每行行尾加上“;”符号。<br/><br/>登陆MYSQL命令行，执行<br/>mysql > source /home/dbbak/log2895-userlist.txt;<br/>mysql > source /home/dbbak/log2896-userlist.txt;<br/>mysql > source /home/dbbak/log2897-userlist.txt;<br/>mysql > source /home/dbbak/log2898-userlist.txt;<br/>执行完毕，该表的数据就恢复到当天误删除之前的状态了。<br/>Tags - <a href="http://www.zhanghaijun.com/tags/mysql/" rel="tag">mysql</a> , <a href="http://www.zhanghaijun.com/tags/binlog/" rel="tag">binlog</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post//#blogcomment</link>
<title><![CDATA[[评论] 通过mysql二进制binlog恢复数据]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>