[实践OK]清理关闭MySQL的bin-log二进制日志,mysql日志进行操作的总结包括 启用,过期自动删除,清除n天以前的日志文件以及mysql-bin文件。

jackxiang 2012-2-26 22:19 | |
背景:十进制日志是用来恢复数据用的,但是呢,往往我们是想通过看二进制日志进行看慢sql。

284M    /data/mysql/mysql-bin.000023
674M    /data/mysql/mysql-bin.000024
831M    /data/mysql/mysql-bin.000022
mysql-bin.0000* 这些是mysql运行过程中的操作日志。
保留的话:当你数据丢失可用来恢复数据,当你需要主从复制时需要靠这些文件。
不保留的话:节省空间,加快mysql速度。
关闭办法:
找到my.cnf或者my.ini文件,把 “ log-bin= ” 这个参数用#号注释掉,然后重启mysql就可以。
折中办法:
在my.cnf或者my.ini文件中,log-bin参数后面,加入expire_logs_days=15。意思就是日志保留15天。然后重启mysql就可以。
把现有的log-bin清了:      purge master logs before now()


#log_bin = mysql-bin
#binlog_format = mixed
#expire_logs_days = 1

http://outofmemory.cn/code-snippet/4291/clear-mysql-bin-with-mysql-command-reset-master
0) mysql bin-log 主从配置:
http://blog.csdn.net/zbfaaadjl/article/details/18557975

一)浅析MySql二进制日志的应用:
http://www.blogjava.net/dongbule/archive/2010/09/04/331050.html
log-bin=/data/db/binLogs
binlog_format=mixed
#log-bin                =   mysql-bin           #打开日志(主机需要打开),这个mysql-bin也可以自定义,这里也可以加上路径,如:/home/www/mysql_bin_log/mysql-bin
expire_logs_days       =   2                   # 自动清理 2 天前的log文件,可根据需要修改

启动后是这样的:
[root@localhost db]# ls /data/db/
binLogs  binLogs.000001  binLogs.000002  binLogs.index  mysql
所以,得修改成如下所示:

于是关闭重启也就对了(关闭mysql的方法:http://jackxiang.com/post/3531/),如下:
ls /data/db/binLogs/
mysql-bin.000001  mysql-bin.index
二)对mysql日志进行操作的总结包括 启用,过期自动删除 等:
http://www.cnblogs.com/cocos/archive/2010/12/22/1913557.html

三)清除mysql的log-bin日志,mysql5.6 log-bin操作:
http://blog.163.com/zjc_8886/blog/static/2408175201411394628257/
查看mysql是否开启log-bin日志:show variables like  '%log%'
默认开启log-bin日志,默认安装路径为C:\ProgramData\MySQL\MySQL Server 5.6。
修改该目录下my.ini文件,把log-bin前面的#去掉,
后面是存储log-bin的日志位置。
log-bin=C:/ProgramData/MySQL/MySQL Server 5.6/mylog-bin.log
查看mysql bin-log日志命令:show binary logs
产生新的bin-log日志文件命令:flush logs
删除bin-log日志文件命令:purge binary logs to 'mysql-bin.000018'; mysql-bin.000018为文件名称。
全部删除bin-log日志命令:reset master
查看日志事件命令为:show binlog events;
或查看某个日志详细信息:show binlog events in 'mysql_bin.000001'\G
通过bin-log恢复数据:mysqlbinlog mysql_bin.000001 | mysql -uroot -proot
mysqlbinlog后可以跟(--start-date="" --stop-date="" ,或--start-positon="100" --stop-postion="200")
也可以直接导出sql文件:   mysqlbinlog  mysql_bin.000001 >d:\my.sql  通过source d:\my.sql 导入数据库。
可以查看表是否为分区表 :SHOW TABLE STATUS
查看表中最新bin-log信息 :SHOW master STATUS
.frm 代表表中的结构,.MYD代表表中的数据,.MYI代表表中的索引。

四)脚本清除n天以前的日志文件以及mysql-bin文件:
http://blog.chinaunix.net/uid-11121450-id-335163.html

PURGE {MASTER | BINARY} LOGS TO 'log_name'   --用于删除指定的日志
PURGE {MASTER | BINARY} LOGS BEFORE 'date'  --用于删除日期之前的日志,BEFORE变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式
如:(MASTER 和BINARY 在这里都是等效的)
PURGE MASTER LOGS TO 'test-bin.000001';  //后面脚本会用到。
PURGE MASTER LOGS BEFORE '2011-01-0100:00:00';
——————————————————————————————————————————
MySQL运行时间长了之后,二进制日志会占用大量硬盘空间,清楚这些日志的命令如下:

我把这个日志给停了:
mysql> show binary logs;
ERROR 1381 (HY000): You are not using binary logging

来自:http://rashost.com/blog/remove-mysql-bin-log


——————————————————————————————————————————

前些日子,系统上线了,发现tomcat 下的日志增长得挺快的,写了个脚本清除n天以前的日志
web_def_tomcat_log_path=/Application/tomcat/log
$web_def_tomcat_log_expire_days=7
if [ "$web_def_tomcat_log_expire_days" -gt 0 ]
then
echo "find $web_def_tomcat_log_path -follow -mtime +$web_def_tomcat_log_expire_days -name '*.log' -exec rm -f {} \;"
find $web_def_tomcat_log_path -follow -mtime +$web_def_tomcat_log_expire_days -name '*.log' -exec rm -f {} \;
fi
由于web的mysql下面挂的同步太多了,每天产生1-2G的mysql-bin文件,因此也写了个清除mysql-bin的文件,这个文件会至少保留最新的一个mysql-bin.0*文件
web_def_host="1.2.3.4" #mysql的ip
web_def_port=3306 #mysql的端口
web_def_username="tester" #mysql的用户
web_def_password="123" #mysql的密码
web_def_mysql_expire_logs_days=7 #删除7天以前的mysql-bin,但是最后至少保留一个文件
mysql_exe="mysql -h $web_def_host -P $web_def_port -u $web_def_username --password=$web_def_password -e "
if [ "$web_def_mysql_expire_logs_days" -gt 0 ]
then
#获取n天以前被修改的mysql-bin文件,
logFileName=`find $web_def_mysql_data_path -follow -atime -$web_def_mysql_expire_logs_days -name 'mysql-bin.0*' |sort|head -1`
if [ "$logFileName" != "" ]
then
logFileName=`basename $logFileName`
echo $mysql_exe "\"PURGE MASTER LOGS TO '$logFileName'\""
$mysql_exe "PURGE MASTER LOGS TO '$logFileName'";
fi
fi
上面这两个脚本,需要在crontab 里每天执行一次,定时删除n天以前的日志文件

end


shell入门的拦路虎:syntax error: unexpected end of file,把上面的代码转一下就Ok了,原因是\r\n\r\n的问题:
http://www.2cto.com/os/201302/191298.html

实践Ok如下:

原理就是查找到文件后,去mysql终端里给用命令删除掉:
find /data/db/binLogs/ -follow -atime -1 -name 'mysql-bin.0*'|sort|head -1
/data/db/binLogs/mysql-bin.000001

[root@localhost scripts]# dos2unix ./clearMySqlsBinLogFile.sh  
dos2unix: converting file ./clearMySqlsBinLogFile.sh to UNIX format ...

删除bin-log日志:http://laowafang.blog.51cto.com/251518/790929

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/5023/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2015-10-2 14:59
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]