简单整理MySQL的日志操作命令_Mysql_脚本之家

1.首先确认你日志是否启用了

MySQL的二进制日志(binary
log)是一个二进制文件,主要用于记录修改数据或有可能引起数据变更的MySQL语句。二进制日志(binary
log)中记录了对MySQL数据库执行更改的所有操作,并且记录了语句发生时间、执行时长、操作数据等其它额外信息,但是它不记录SELECT、SHOW等那些不修改数据的SQL语句。二进制日志(binary
log)主要用于数据库恢复和主从复制,以及审计(audit)操作。

MySQL>show variables like 'log_bin'; 

二进制日志(Binary log)

如果启用了,即ON那日志文件就在MySQL的安装目录的data目录下

a、它包含的内容及作用如下:

2.怎样知道当前的日志

包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)

MySQL> show master status; 

包含关于每个更新数据库(DML)的语句的执行时间信息

3.看二进制日志文件用MySQLbinlog

不包含没有修改任何数据的语句,如果需要启用该选项,需要开启通用日志功能

shell>MySQLbinlog mail-bin.000001 

shell>MySQLbinlog mail-bin.000001 | tail 

主要目的是尽可能的将数据库恢复到数据库故障点,因为二进制日志包含备份后进行的所有更新

4.正确删除MySQL BIN-LOG 日志实操

用于在主复制服务器上记录所有将发送给从服务器的语句

在mysql中会生大量的如mysq-bin.000001这类日志文件了,这些都是二进制文件了,如果我们是普通的日志没有进行主从配置就可以直接使用reset
master进行删除了这个方法很简单,如果没有主从复制,可以通过reset
master的方式,重置数据库日志,清除之前的日志文件:

启用该选项数据库性能降低1%,但保障数据库完整性,对于重要数据库值得以性能换完整。有些类似于oracle开启归档模式。

mysql> reset master;

b、开启二进制日志的方法及属性

还有一各就是在my.cnf里配置。

使用–log-bin[=file_name]选项或在配置文件中指定log-bin启动时,mysqld写入包含所有更新数据的SQL命令的日志文件。

expire_logs_days = 3

对于未给出file_name值, 默认名为-bin后面所跟的主机名。

二进制日志自动删除的天数。这里设置了自动清除3天前的logs。

在未指定绝对路径的情形下,缺省位置保存在数据目录下。

默认值为0,表示“没有自动删除”。

每个二进制日志名会添加一个数字扩展名用于日志老化,因此不支持自定义的扩展名,会被mysql数字扩展名动态替换。

# 按文件:删除mysql-bin.000354之前的日志,不包含mysql-bin.000354MYSQL>purge binary logs to 'mysql-bin.000354';Query OK, 0 rows affected # 按时间:删除2011-11-10 00:00:00 之前的日志MYSQL>purge binary logs before '2011-11-10 00:00:00';# 按时间:请理三天之前的日志MYSQL> purge master logs before date_sub, interval 3 day);自动清理日志 :# 修改my.cnf文件配置bin-log过期时间expire-logs-days=7max-binlog-size=268435456

若当前的日志大小达到max_binlog_size,则自动创建新的二进制日志

如果你是主从mysql日志文件请参考下面方法

对于大的事务,二进制日志会超过max_binlog_size设定的值。也即是事务仅仅写入一个二进制日志

//删除日志之前,先检查主从服务器当前使用的日志文件,//首先登录 要删除日志的服务器的 mysql 终端#mysql -u root -pxxxxx//检查复制主服务器状态Mysql>show master status+------------------+-----------+--------------+----------------------------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+-----------+--------------+----------------------------------------+| mysql-bin.000097 | 541677824 | www | test,mysql,information_schema |+------------------+-----------+--------------+----------------------------------------+//复制主服务器当前正在使用的日志文件是:mysql-bin.000097//检查复制从服务器状态Mysql>show slave statusG //复制从服务器当前正在使用的复制主服务器日志文件是:mysql-bin.000103 //当前正在使用的日志文件是000097,我需要做的是删除00095号之前的所有日志Mysql>purge master logs to ‘mysql-bin.000095; #ll /usr/local/mysql/var///从结果中发现,编号000097之前的所有日志都已经删除

由是可知,二进制日志文件大小接近,其size不是完全相等,这点不同于oracle。

二进制日志文件会有一个对应二进制日志索引文件,该文件包含所有的二进制日志,其文件名与二进制日志相同,扩展名为.index

二进制索引文件通过–log-bin-index[=file_name]选项来指定

RESET
MASTER语句将删除所有二进制日志文件,这将影响到从库。也可以用PURGE
MASTER LOGS只删除部分二进制文件。

系统变量log_bin的值为OFF表示没有开启二进制日志(binary
log)。ON表示开启了二进制日志(binary log) show variables like
‘log_bin’;

查看当前服务器所有的二进制日志文件 show binary logs;  show master logs;

查看当前二进制日志文件状态 show master status;

show binlog
events用于在二进制日志中显示事件。如果未指定’log_name’,则显示第一个二进制日志。

方法1:使用show binlog
events方式可以获取当前以及指定binlog的日志,不适宜提取大量日志。

SHOW BINLOG EVENTS[IN ‘log_name’] [FROM pos] [LIMIT [offset,]
row_count]

方法2: 使用mysqlbinlog命令行查看日志内容(适宜批量提取日志)。

查看第一个binlog文件的内容(show binlog events) show binlog events;

查看某个特定binglog文件的内容。  show binlog events in
‘DB-Server-bin.000012’;

show binlog events in ‘DB-Server-bin.000012’ from 336;

二进制日志开启方法:查看系统变量log_bin,如果其值为OFF,表示没有开启二进制日志(binary
log),如果需要开启二进制日志,则必须在my.cnf中[mysqld]下面添加log-bin
[=DIR[filename]]
,DIR参数指定二进制文件的存储路径;filename参数指定二级制文件的文件名。
其中filename可以任意指定,但最好有一定规范。系统变量log_bin是静态参数,不能动态修改的(因为它不是Dynamic
Variable)。如下所示:

show variables like ‘log_bin’;

+—————+——-+

| Variable_name | Value |

+—————+——-+

| log_bin      | OFF  |

+—————+——-+

1 row in set (0.00 sec)

mysql> set global log_bin=mysql_bin;

ERROR 1238 (HY000): Variable ‘log_bin’ is a read only variable

修改my.cnf,在[mysqld]下面增加log_bin=mysql_bin_log,重启MySQL后,你就会发现log_bin变为了ON,二进制日志(binary
log)默认放在数据目录下(系统变量datadir下),如下所示:

校验:show variables like ‘log_bin’;

使用命令flush logs切换二进制日志

验证切换前:show master status;

切换:flush logs;

切换后:show master status;

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website