(3.12)mysql基础深入——mysql日志文件
关键词:mysql日志文件
目录:日志文件的分类
1、错误日志(error log)
2、二进制日志(binlog)
3、慢查询日志(show query log)
4、通用日志(general log)
5、重做日志(redo log)
6、中继日志(relay log)
7、DDL日志(ddl log)
详情:
1、错误日志(error log)
【1.1】查看错误日志是否启用
mysql> show variables like 'log_err%';
【1.2】错误日志配置
[mysqld] log-error=[path/[file_name]]
【1.3】重建错误日志文件(如果日志文件不存在,mysql启动或者执行flush logs时会创建新的日志文件)
(1)mysqladmin -u root -p flush-logs
(2)mysql> flush logs;
【1】概念:mysql启动、运行、关闭过程的记录,记录错误、警告、正常的信息。-- 相当于oracle的alert日志
【2】参数查看:show variables like '%log_error%';
解析:log_error_verbosity :(1)只记录错误日志 (2)记录错误+警告信息 (3)记录错误+警告+正常信息
【3】linux系统异常日志:/var/log/messages
2、二进制日志(binlog)
【2.1】# 查看二进制文件
mysql> show variables like 'log_bin%'; #查看是否启用
mysql> show binary logs; #查看二进制文件个数及名称
【2.2】启动与选项设置
[mysqld] log-bin = PATH/[FILENAME] #这里定义的只是一个索引文件,例如这里给/log/binlog,那么会生成binlog.index,而实际存放数据是类似于binlog.00001 之类的,超出范围会继续新建binlog.00002,以此类推 expire_logs_days=10 #清除binlog文件中超过10天的内容,默认值为0,表示“没有自动删除”。当mysql启动或刷新二进制日志时可能删除该文件 max_binlog_size=100M #单个binlog文件的最大容量,如果有大事务运行,运行到一半binlog到达最大值了这个时候不会立马新建,而是会持续写到这个文件里,所以有binlog超出该值也正常。
【2.3】删除二进制文件
【2.3.1】一般形式
PURGE MASTER LOGS;
PURGE {MASTER | BINARY} LOGS TO 'log_name' #删除log_name 之前建立的文件,不包含该文件
PURGE {MASTER | BINARY} LOGS BEFORE 'date' #删除某个时间之前的所有文件内容,不包含该天
【2.3.2】删除所有二进制文件
RESET MASTER; #执行该语句,所有二进制日志将被删除,mysql 会重新创建二进制日志,新的日志文件扩展名将重新从000001开始编号
【2.4】阅读查看二进制文件
mysqlbinlog /log/binlog.00001 > /tmp/binlog1.log
【2.5】binlog恢复数据
mysqlbinlog恢复数据的语法如下: mysqlbinlog [option] filename |mysql -uuser -ppass option是一些可选项,filename是日志文件名 比较重要的两对option参数是 --start-datetime、--stop-datetime --start-position、--stop--position --start-date、--stop-date可以指定恢复数据库的起始时间点和结束时间点 --start-position、--stop--position可以指定恢复数据的开始位置和结束位置 使用mysqlbinlog恢复mysql数据库到2014年7月2日15:27:48时的状态,执行下面命令 mysqlbinlog --stop-datetime="2014-7-2 15:27:48 " D:\mysql\log\binlog\binlog.000008 |mysql -u user -p password 该命令执行成功后,会根据binlog.000008日志文件恢复2014年7月2日15:27:48前的所有操作。 这种方法对误操作的删除数据比较有效
【1】概念:记录数据库发生更改的SQL语句,以二进制方式保存在磁盘中。--相当于Oracle的归档日志
【2】作用:备份恢复、复制、审计
【3】特点:
(1)记录是SQL语句的形式
(2)commit提交的时候才写binlog,提交之前写binlog_buffer,提交时才回写到binlog日志文件。
binlog不会被覆盖,会一直存在(但可以设置保留多场时间的数据,可清多少天之前的数据清理)
(3)对所有表起作用
【4】查看:mysqlbinlog -vv [binlog_filename]