<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[实践OK]清理关闭MySQL的bin-log二进制日志，mysql日志进行操作的总结包括 启用，过期自动删除，清除n天以前的日志文件以及mysql-bin文件。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Sun, 26 Feb 2012 14:19:18 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：十进制日志是用来恢复数据用的，但是呢，往往我们是想通过看二进制日志进行看慢sql。<br/><br/>284M&nbsp;&nbsp;&nbsp;&nbsp;/data/mysql/mysql-bin.000023<br/>674M&nbsp;&nbsp;&nbsp;&nbsp;/data/mysql/mysql-bin.000024<br/>831M&nbsp;&nbsp;&nbsp;&nbsp;/data/mysql/mysql-bin.000022<br/>mysql-bin.0000* 这些是mysql运行过程中的操作日志。<br/>保留的话：当你数据丢失可用来恢复数据，当你需要主从复制时需要靠这些文件。<br/>不保留的话：节省空间，加快mysql速度。<br/>关闭办法：<br/>找到my.cnf或者my.ini文件，把 “ log-bin= ” 这个参数用#号注释掉，然后重启mysql就可以。<br/>折中办法：<br/>在my.cnf或者my.ini文件中，log-bin参数后面，加入expire_logs_days=15。意思就是日志保留15天。然后重启mysql就可以。<br/>把现有的log-bin清了：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;purge master logs before now()<br/><textarea name="code" class="php" rows="15" cols="100">
mysql&gt;&nbsp;&nbsp;purge master logs before now();
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:&nbsp;&nbsp;&nbsp;&nbsp;16
Current database: *** NONE ***

Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql&gt; show binary logs;
+------------------+-----------+
&#124; Log_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; File_size &#124;
+------------------+-----------+
&#124; mysql-bin.000361 &#124;&nbsp;&nbsp;&nbsp;&nbsp; 22137 &#124;
+------------------+-----------+
1 row in set (0.01 sec)
</textarea><br/><br/>#log_bin = mysql-bin<br/>#binlog_format = mixed<br/>#expire_logs_days = 1<br/><br/>http://outofmemory.cn/code-snippet/4291/clear-mysql-bin-with-mysql-command-reset-master<br/>0） mysql bin-log 主从配置：<br/>http://blog.csdn.net/zbfaaadjl/article/details/18557975<br/><br/>一）浅析MySql二进制日志的应用：<br/>http://www.blogjava.net/dongbule/archive/2010/09/04/331050.html<br/>log-bin=/data/db/binLogs<br/>binlog_format=mixed <br/>#log-bin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp; mysql-bin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #打开日志(主机需要打开)，这个mysql-bin也可以自定义，这里也可以加上路径，如：/home/www/mysql_bin_log/mysql-bin<br/>expire_logs_days&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 自动清理 2 天前的log文件，可根据需要修改 <br/><textarea name="code" class="php" rows="15" cols="100">
log-bin=/data/db/binLogs&nbsp;&nbsp;&nbsp;&nbsp; #这个mysql-bin也可以自定义，这里也可以加上路径
binlog_format=mixed 
expire_logs_days&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; 2&nbsp;&nbsp;# 自动清理 2 天前的log文件，可根据需要修改 
</textarea><br/>启动后是这样的：<br/>[root@localhost db]# ls /data/db/<br/>binLogs&nbsp;&nbsp;binLogs.000001&nbsp;&nbsp;binLogs.000002&nbsp;&nbsp;binLogs.index&nbsp;&nbsp;mysql<br/>所以，得修改成如下所示：<br/><textarea name="code" class="php" rows="15" cols="100">
log-bin=/data/db/binLogs/mysql-bin&nbsp;&nbsp;&nbsp;&nbsp; #这个mysql-bin也可以自定义，这里也可以加上路径
binlog_format=mixed 
expire_logs_days&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; 2&nbsp;&nbsp;# 自动清理 2 天前的log文件，可根据需要修改 
</textarea><br/>于是关闭重启也就对了（关闭mysql的方法：http://jackxiang.com/post/3531/），如下：<br/>ls /data/db/binLogs/<br/>mysql-bin.000001&nbsp;&nbsp;mysql-bin.index<br/>二）对mysql日志进行操作的总结包括 启用，过期自动删除 等：<br/>http://www.cnblogs.com/cocos/archive/2010/12/22/1913557.html<br/><br/>三）清除mysql的log-bin日志，mysql5.6 log-bin操作：<br/>http://blog.163.com/zjc_8886/blog/static/2408175201411394628257/<br/>查看mysql是否开启log-bin日志：show variables like&nbsp;&nbsp;&#039;%log%&#039;<br/>默认开启log-bin日志，默认安装路径为C:&#92;ProgramData&#92;MySQL&#92;MySQL Server 5.6。<br/>修改该目录下my.ini文件，把log-bin前面的#去掉，<br/>后面是存储log-bin的日志位置。<br/>log-bin=C:/ProgramData/MySQL/MySQL Server 5.6/mylog-bin.log<br/>查看mysql bin-log日志命令：show binary logs<br/>产生新的bin-log日志文件命令：flush logs<br/>删除bin-log日志文件命令：purge binary logs to &#039;mysql-bin.000018&#039;; mysql-bin.000018为文件名称。<br/>全部删除bin-log日志命令：reset master<br/>查看日志事件命令为：show binlog events;<br/>或查看某个日志详细信息：show binlog events in &#039;mysql_bin.000001&#039;&#92;G <br/>通过bin-log恢复数据：mysqlbinlog mysql_bin.000001 &#124; mysql -uroot -proot<br/>mysqlbinlog后可以跟（--start-date=&quot;&quot; --stop-date=&quot;&quot; ，或--start-positon=&quot;100&quot; --stop-postion=&quot;200&quot;）<br/>也可以直接导出sql文件：&nbsp;&nbsp; mysqlbinlog&nbsp;&nbsp;mysql_bin.000001 &gt;d:&#92;my.sql&nbsp;&nbsp;通过source d:&#92;my.sql 导入数据库。<br/>可以查看表是否为分区表 ：SHOW TABLE STATUS <br/>查看表中最新bin-log信息 ：SHOW master STATUS <br/>.frm 代表表中的结构，.MYD代表表中的数据，.MYI代表表中的索引。<br/><br/>四）脚本清除n天以前的日志文件以及mysql-bin文件：<br/>http://blog.chinaunix.net/uid-11121450-id-335163.html<br/><br/>PURGE &#123;MASTER &#124; BINARY&#125; LOGS TO &#039;log_name&#039;&nbsp;&nbsp; --用于删除指定的日志<br/>PURGE &#123;MASTER &#124; BINARY&#125; LOGS BEFORE &#039;date&#039;&nbsp;&nbsp;--用于删除日期之前的日志，BEFORE变量的date自变量可以为&#039;YYYY-MM-DD hh:mm:ss&#039;格式<br/>如：（MASTER 和BINARY 在这里都是等效的）<br/>PURGE MASTER LOGS TO &#039;test-bin.000001&#039;;&nbsp;&nbsp;//后面脚本会用到。<br/>PURGE MASTER LOGS BEFORE &#039;2011-01-0100:00:00&#039;;<br/>——————————————————————————————————————————<br/>MySQL运行时间长了之后，二进制日志会占用大量硬盘空间，清楚这些日志的命令如下：<br/><textarea name="code" class="html" rows="15" cols="100">
show binary logs;
purge master logs before now();
</textarea><br/>我把这个日志给停了：<br/>mysql&gt; show binary logs;<br/>ERROR 1381 (HY000): You are not using binary logging<br/><br/>来自：http://rashost.com/blog/remove-mysql-bin-log<br/><br/><br/>——————————————————————————————————————————<br/><br/>前些日子，系统上线了，发现tomcat 下的日志增长得挺快的，写了个脚本清除n天以前的日志<br/>web_def_tomcat_log_path=/Application/tomcat/log<br/>$web_def_tomcat_log_expire_days=7<br/>if [ &quot;$web_def_tomcat_log_expire_days&quot; -gt 0 ]<br/>then<br/>echo &quot;find $web_def_tomcat_log_path -follow -mtime +$web_def_tomcat_log_expire_days -name &#039;*.log&#039; -exec rm -f &#123;&#125; &#92;;&quot;<br/>find $web_def_tomcat_log_path -follow -mtime +$web_def_tomcat_log_expire_days -name &#039;*.log&#039; -exec rm -f &#123;&#125; &#92;;<br/>fi<br/>由于web的mysql下面挂的同步太多了，每天产生1-2G的mysql-bin文件，因此也写了个清除mysql-bin的文件，这个文件会至少保留最新的一个mysql-bin.0*文件<br/>web_def_host=&quot;1.2.3.4&quot; #mysql的ip<br/>web_def_port=3306 #mysql的端口<br/>web_def_username=&quot;tester&quot; #mysql的用户<br/>web_def_password=&quot;123&quot; #mysql的密码<br/>web_def_mysql_expire_logs_days=7 #删除7天以前的mysql-bin，但是最后至少保留一个文件<br/>mysql_exe=&quot;mysql -h $web_def_host -P $web_def_port -u $web_def_username --password=$web_def_password -e &quot;<br/>if [ &quot;$web_def_mysql_expire_logs_days&quot; -gt 0 ]<br/>then<br/>#获取n天以前被修改的mysql-bin文件,<br/>logFileName=`find $web_def_mysql_data_path -follow -atime -$web_def_mysql_expire_logs_days -name &#039;mysql-bin.0*&#039; &#124;sort&#124;head -1`<br/>if [ &quot;$logFileName&quot; != &quot;&quot; ]<br/>then<br/>logFileName=`basename $logFileName`<br/>echo $mysql_exe &quot;&#92;&quot;PURGE MASTER LOGS TO &#039;$logFileName&#039;&#92;&quot;&quot;<br/>$mysql_exe &quot;PURGE MASTER LOGS TO &#039;$logFileName&#039;&quot;;<br/>fi<br/>fi<br/>上面这两个脚本，需要在crontab 里每天执行一次，定时删除n天以前的日志文件<br/><br/>end<br/><br/><br/>shell入门的拦路虎：syntax error: unexpected end of file，把上面的代码转一下就Ok了，原因是&#92;r&#92;n&#92;r&#92;n的问题：<br/>http://www.2cto.com/os/201302/191298.html<br/><br/>实践Ok如下：<br/><textarea name="code" class="php" rows="15" cols="100">
web_def_host=&quot;localhost&quot; #mysql的ip
web_def_port=3306 #mysql的端口
web_def_username=&quot;root&quot; #mysql的用户
web_def_password=&quot;&quot; #mysql的密码
web_def_mysql_data_path=&quot;/data/db/binLogs&quot;&nbsp;&nbsp;#bin log位置
web_def_mysql_expire_logs_days=3 #删除3天以前的mysql-bin，但是最后至少保留一个文件&nbsp;&nbsp;#log-bin=/data/db/binLogs&nbsp;&nbsp;&nbsp;&nbsp; #这个mysql-bin也可以自定义，这里也可以加上路径
mysql_exe=&quot;mysql -h $web_def_host -P $web_def_port -u $web_def_username --password=$web_def_password -e &quot;
if [ &quot;$web_def_mysql_expire_logs_days&quot; -gt 0 ]
then
#获取n天以前被修改的mysql-bin文件,
logFileName=`find $web_def_mysql_data_path -follow -atime -$web_def_mysql_expire_logs_days -name &#039;mysql-bin.0*&#039; &#124;sort&#124;head -1`
if [ &quot;$logFileName&quot; != &quot;&quot; ]
then
logFileName=`basename $logFileName`
echo $mysql_exe &quot;&#92;&quot;PURGE MASTER LOGS TO &#039;$logFileName&#039;&#92;&quot;&quot;
$mysql_exe &quot;PURGE MASTER LOGS TO &#039;$logFileName&#039;&quot;;
fi
fi
</textarea><br/>原理就是查找到文件后，去mysql终端里给用命令删除掉：<br/> find /data/db/binLogs/ -follow -atime -1 -name &#039;mysql-bin.0*&#039;&#124;sort&#124;head -1<br/>/data/db/binLogs/mysql-bin.000001<br/><br/>[root@localhost scripts]# dos2unix ./clearMySqlsBinLogFile.sh&nbsp;&nbsp; <br/>dos2unix: converting file ./clearMySqlsBinLogFile.sh to UNIX format ...<br/><br/>删除bin-log日志：http://laowafang.blog.51cto.com/251518/790929
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]清理关闭MySQL的bin-log二进制日志，mysql日志进行操作的总结包括 启用，过期自动删除，清除n天以前的日志文件以及mysql-bin文件。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>