正确删除MySQL log bin 日志操作记录
=============================================
#如要修改my.cnf ,正确操作是先关闭mysql stop服务后,再修改!!!!!!!。
#log-bin=mysql-bin
#log-slow-queries=slowquery.log
#long_query_time=3
####binary logging format - mixed recommended
#binlog_format=mixed
如关闭log-bin记录,则上述选项全部需关闭,
否则开启MYSQL 会有binlog_format 初始化,找不到LOG-BIN,MYSQL开不起来,停N久都停不了,只能用kill ID 。
100805 21:03:18 [ERROR] You need to use --log-bin to make --binlog-format work.
关闭上述4个参数后。mysql start 后再执行:
SHOW MASTER LOGS;
错误码: 1381
You are not using binary logging
RESET MASTER;
错误码: 1186
Binlog closed, cannot RESET MASTER
综合上述过程。正确的删除MySQL log bin 日志操作如下
1.SHOW MASTER LOGS;
2.RESET MASTER;
3.service mysql stop
4.关闭4个参数。
#log-bin=mysql-bin
#log-slow-queries=slowquery.log
#long_query_time=3
#binlog_format=mixed
5.service mysql start
删除前
-rw-rw---- 1 mysql mysql 154M Aug 5 20:55 mysql-bin.000003
-rw-rw---- 1 mysql mysql 307M Aug 5 20:46 mysql-bin.000002
-rw-rw---- 1 mysql mysql 608 Aug 5 20:45 slowquery.log
-rw-rw---- 1 mysql mysql 65K Aug 5 20:33 mysql-bin.000001
RESET MASTER; 后
-rw-rw---- 1 mysql mysql 106 Aug 5 21:17 mysql-bin.000001 <--只有一个文件了^^
-rw-rw---- 1 mysql mysql 608 Aug 5 20:45 slowquery.log
=============================================
[保留] mysql bin日志文件清除sh
#!/bin/sh
## 2007-11-6
DELLOG="/usr/local/logs/del-sqlbin.log.`date +%d`"
DELTMP="/usr/local/logs/del-sqlbin.tmp"
MAIL_ADDR="[email protected]"
exec &>$DELLOG
DT=`date +'%Y-%m-%d %T'`
SINGLE=0
sleep 30
hostname
echo `date +'%Y-%m-%d %T'`
echo "EXEC>>"
echo "PURGE MASTER LOGS BEFORE '$DT';"
echo "PURGE MASTER LOGS BEFORE '$DT';" >$DELTMP
mysql -uroot -pxxx <$DELTMP
if [ $? = 0 ];then
echo "Purge master logs sucess!"
else
echo "Purge master logs failure!"
SINGLE=1
fi
echo "--------------------------------"
echo
if [ $SINGLE = 1 ];then
mail -s "Purge_master_logs_err" $MAIL_ADDR <$DELLOG
fi
==============================================================
想把自己所有的数据打个包,结果才发现,原来我的目录居然有30多G,把曾给卖给别人的空间中的19G数据清除后,发现还有12G的软件数据,惊讶的要死,去看了一下,用的是懒宝宝的告诉我的命令:du -sh /xxxxx/
发现mysql/data下的数据居然有12G,想着怎么也不可能会有这么大的数据啊?仔细一看,原来这12G全是log文件。找了一些资料,才把这个log清除掉。。
方法如下:
第一种技巧:
XML/HTML代码
1. 1 查询musql-bin,mysql操作日志
2. mysql> show master logs;
3.
4. 2 删除,保留最新
5. mysql>purge master logs to 'mysql-bin.00001'; <-----用这个删除不掉!!!!。。
6.
7. 3 my.cnf中去掉log-bin就可不让生成这些日志文件了。
第二种技巧:
XML/HTML代码
1. 清理mysql的日志文件
2. 发现var/db/mysql目录下有这么多
3. mysql-bin.000001
4. …
5. mysql-bin.000023
6. mysql-bin.index
7. 而且比较大
8.
9. 数据库的操作日志
10. mysql> reset master; <-----用这个可以删除掉。重启后只有'mysql-bin.00001' 一个文件鸟^_^。。
11. 可以清理这些文件。
这两种情况都可以,比较偏 向于第一种,但我是因为要备份就直接用的第二种了。反正数据也没有出错过,资料来自于:http://www.tech-q.cn/thread-3198-1-1.html
=================
如何清除mysql的mysql-bin日志
1查询musql-bin,mysql操作日志
mysql> show master logs;
2删除,保留最新
mysql>purge master logs to 'mysql-bin.00001';
3my.cnf中去掉log-bin就可不让生成这些日志文件了。
=========================
也没啥用就干掉吧
数据库的操作日志
mysql-bin.000001
mysql-bin.000002
mysql-bin.000003
等等好多日志文件都10多G了我mysql总数据库加起来都不到1G
这些可以清理掉的。
输入mysql -u root -p然后输入密码
成功进去后输入reset master;记得这个;啊!
mysql> reset master;
Query OK, 0 rows affected, 1 warning (0.20 sec)
就可以清空mysql日志了,世界都清爽了...
如果不想mysql记录日志可以在my.ini中关闭掉
找到my.ini打开它 找到log-bin=mysql-bin然后注释掉就可以了
#log-bin=mysql-bin
==============
mysql二进制日志文件恢复记录和清除二进制日志文件
在5.11.3节,“二进制日志”中详细讨论了二进制日志。
要想检查这些文本格式的文件,应使用mysqlbinlog实用工具。调用方法:
shell> mysqlbinlog [options] log-files...
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 pat
为指定目录中的LOAD DATA INFILE预处理本地临时文件。
· --offset=N,-o N
跳过前N个条目。
· --password[=password],-p[password]
当连接服务器时使用的密码。如果使用短选项形式(-p),选项和 密码之间不能有空格。如果在命令行中--password或-p选项后面没有 密码值,则提示输入一个密码。
· --port=port_num,-P port_num
用于连接远程服务器的TCP/IP端口号。
· --position=N,-j N
不赞成使用,应使用--start-position。
· --protocol={TCP | SOCKET | PIPE | -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
从二进制日志中第1个日期时间等于或晚于datetime参量的事件开始读取。datetime值相对于运行mysqlbinlog的机器上的本地时区。该值格式应符合DATETIME或TIMESTAMP数据类型。例如:
shell> mysqlbinlog --start-datetime="2004-12-25 11:25:56" binlog.000003
该选项可以帮助点对点恢复。
· --stop-datetime=datetime
从二进制日志中第1个日期时间等于或晚于datetime参量的事件起停止读。关于datetime值的描述参见--start-datetime选项。该选项可以帮助及时恢复。
· --start-position=N
从二进制日志中第1个位置等于N参量时的事件开始读。
· --stop-position=N
从二进制日志中第1个位置等于和大于N参量时的事件起停止读。
· --to-last-logs,-t
在MySQL服务器中请求的二进制日志的结尾处不停止,而是继续打印直到最后一个二进制日志的结尾。如果将输出发送给同一台MySQL服务器,会导致无限循环。该选项要求--read-from-remote-server。
· --disable-logs-bin,-D
禁用二进制日志。如果使用--to-last-logs选项将输出发送给同一台MySQL服务器,可以避免无限循环。该选项在崩溃恢复时也很有用,可以避免复制已经记录的语句。注释:该选项要求有SUPER权限。
· --user=user_name,-u user_name
连接远程服务器时使用的MySQL用户名。
· --version,-V
显示版本信息并退出。
还可以使用--var_name=value选项设置下面的变量:
· open_files_limit
指定要保留的打开的文件描述符的数量。
举例:当只是需要恢复部分记录的时候,可以使用时间点或位置点来定位
shell> mysqlbinlog --start-date="2009-04-20 9:01:00" --stop-date="2009-04-20 10:00:01" mysql-bin.000001 | mysql -uUser -pUserPWD
shell> mysqlbinlog --start-position="368301" --stop-position="368312" mysql-bin.000001 | mysql -uUser -pUserPWD
如果MySQL服务器上有多个要执行的二进制日志,安全的方法是在一个连接中处理它们。原因:假设第1个日志文件包含一个CREATE TEMPORARY TABLE语句,第2个日志文件包含一个使用该临时表的语句,则会造成问题。
恢复多个二进制日志文件的方法:
shell> mysqlbinlog hostname-bin.000001 hostname-bin.000002 | mysql -uUser -pUserPWD
shell> ls -t -r -1 hostname-bin* | xargs mysqlbinlog | mysql -uUser -pUserPWD
另一个方法:
shell> mysqlbinlog hostname-bin.000001 > /tmp/statements.sql
shell> mysqlbinlog hostname-bin.000002 >> /tmp/statements.sql
shell> mysql -uUser -pUserPWD -e "source /tmp/statements.sql"
连接mysql服务器查看和删除二进制日志文件
查看二进制日志文件
mysql> SHOW BINLOG EVENTS \G;
mysql> SHOW MASTER LOGS;
清除二进制日志文件
mysql> PURGE { MASTER|BINARY } LOGS TO 'log_name';
mysql> PURGE { MASTER|BINARY } LOGS BEFORE 'datetime';
例如:
mysql> PURGE MASTER LOGS TO 'mysql-bin.000001';
mysql> PURGE MASTER LOGS BEFORE '2009-12-20 13:00:00';
另一种清除二进制日志方法
mysql > flush logs;
mysql > reset master;
=============