October 1 2016

清除binlog

如何清除binlog
–使用下面的两个命令
PURGE {MASTER|BINARY} LOGS TO ‘log_name’ //log_name不会被清除
PURGE {MASTER|BINARY} LOGS BEFORE ‘date’ //date不会被清除

mysql> show master logs;
+———————-+———–+
| Log_name | File_size |
+———————-+———–+
| mysql3306-bin.000001 | 107 |
+———————-+———–+
1 row in set (0.00 sec)

mysql> flush logs;
Query OK, 0 rows affected (0.11 sec)

mysql> flush logs;
Query OK, 0 rows affected (0.02 sec)

mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

mysql> show master logs;
+———————-+———–+
| Log_name | File_size |
+———————-+———–+
| mysql3306-bin.000001 | 154 |
| mysql3306-bin.000002 | 154 |
| mysql3306-bin.000003 | 154 |
| mysql3306-bin.000004 | 154 |
| mysql3306-bin.000005 | 107 |
+———————-+———–+
5 rows in set (0.00 sec)

mysql> purge master logs to ‘mysql3306-bin.000002’;
Query OK, 0 rows affected (0.01 sec)

mysql> show master logs;
+———————-+———–+
| Log_name | File_size |
+———————-+———–+
| mysql3306-bin.000002 | 154 |
| mysql3306-bin.000003 | 154 |
| mysql3306-bin.000004 | 154 |
| mysql3306-bin.000005 | 107 |
+———————-+———–+
4 rows in set (0.00 sec)

[root@node4 data]# date
Tue Jul 30 01:27:04 CST 2013
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

mysql> show master logs;
+———————-+———–+
| Log_name | File_size |
+———————-+———–+
| mysql3306-bin.000002 | 154 |
| mysql3306-bin.000003 | 154 |
| mysql3306-bin.000004 | 154 |
| mysql3306-bin.000005 | 154 |
| mysql3306-bin.000006 | 107 |
+———————-+———–+
5 rows in set (0.00 sec)

mysql> purge master logs before ‘2013-07-30 01:27:04’;
Query OK, 0 rows affected (0.02 sec)

mysql> show master logs;
+———————-+———–+
| Log_name | File_size |
+———————-+———–+
| mysql3306-bin.000005 | 154 |
| mysql3306-bin.000006 | 107 |
+———————-+———–+
2 rows in set (0.00 sec)
–或使用命令:
RESET MASTER
删除之前所有的binlog,并重新生成新的binlog,后缀从000001开始。

注:如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是失败,并伴随一个错误。

不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。

当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。

6.2、记录到二进制日志知的内容配置
binlog-do-db=sales 只记录sales库 binlog-ignore-db=sales 除sales库不记录,其他都记录。

但是如果在操作数据库之前,不使用use $dbname 那么所有的SQL都不会记录 如果使用了use $dbname,那么判断规则取决于这里的$dbname,而不是SQL中操作的库

6.3、二进制日志不准确的处理

默认情况下,并不是每次写入时都将二进制日志与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能二进制日志中最后的语句丢失。 要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使二进制日志在每N次二进制日志写入后与硬盘同步。 即使sync_binlog设置为1,出现崩溃时,也有可能表内容和二进制日志内容之间存在不一致性。

如果崩溃恢复时MySQL服务器发现二进制日志变短了(即至少缺少一个成功提交的InnoDB事务), 如果sync_binlog =1并且硬盘/文件系统的确能根据需要进行同步(有些不需要)则不会发生,则输出错误消息 (“二进制日志<名>比期望的要小”)。 在这种情况下,二进制日志不准确,复制应从主服务器的数据快照开始。



Copyright 2019. All rights reserved.

Posted 2016年10月1日 by ucjmh in category "mysql

Leave a Reply

Your email address will not be published. Required fields are marked *