日志的配置可以在my.conf中修改
清除日志可以使用命令:
mysqladmin -u root -p flush-logs
或者
mysql>flush logs;
1 错误日志(Error log)
记录MySQL服务的启动、运行或停止MySQL服务时出现的问题。当mysql服务器认为需要检查和修复某个表,就会在错误日志里写下相应的信息。
如果启动mysql服务时使用了--mysqld_safe选项,日志有3个选项:--syslog, --skip-syslog, --log-error。如果没有使用这3个选项或者使用--skip-syslog选项,则使用默认log。 当mysqld意外关闭时会自动重启并在log-error中写下重启信息。
启动:
[mysqld]
log-error=[path / [file_name] ]
默认路径为数据库的数据目录,文件名默认为hostname.err.
mysql的错误日志以文本形式存储,可以直接查看,也可以直接删除。文件路径的查找可以:
show variables like 'log_error';
2 通用查询日志(General Query log)
记录建立客户端mysql服务器的一般操作记录,当客户端连接或者断开连接,服务器会将信息写入通用查询日志。服务器也会记录客户端请求的query 语句。 注意,通用日志是按照服务器收到query语句的先后来写入的,而不是其执行先后顺序,这一点跟二进制日志不一样。
启动:
[mysqld]
log[=path / [filename]]
通用日志也是以文档形式存储,可以直接查看和删除。亦可以通过flush-logs建立新的日志。
3 二进制日志
二进制日志记录的数据库变化的事件和一些可能改变数据库的无效操作,以及这些事件改变数据库所花费的时间。开启二进制日志会轻微影响到服务器的运行效率。mysql5.6.3以后会将含密码的sql语句写入bin log之前重写以去掉密码,这样可以减少密码泄露的威胁。
二进制日志主要有两个作用:
1. 主服务器通过向从服务器发送bin log来更新从服务器中的数据
2. 用于恢复数据。在数据备份之后发生的变化可以用bin log来恢复
启动:
[mysqld]
log-bin [=path/ [filename] ]
max_binlog_size = 100M
如果没有指定文件名,则用pid-file的名称加上-bin来作为bin-log的名称。认为指定的bin log后缀名会被默认删掉而不返回任何提示信息。
bin log文件名加'.index'可以为bin log文件索引的默认名称。这个可以通过 --log-bin-index[=file_name]来进行改变。
当bin log文件达到max_binlog_size时,服务器会自动打开一个新的bin log文件。但是如果最后一次写入过大,为保持记录的完整性,bin log的实际大小是可以大于这个数值的。
有super权限的客户端,可以通过SET sql_log_bin=0 语句停止写入bin log.
查询:
可以通过show binary log来查询当前的bin log数目和文件名
bin log不能直接查看,而要通过mysqlbinlog命令来读取。
删除:
使用reset master 删除所有二进制日志
使用 PURGE BINARY LOGS删除指定二进制日志
PURGE { BINARY | MASTER } LOGS
{ TO 'log_name' | BEFORE datetime_expr }
这里BINARY和MASTER同义。 to logname会删除二进制日志索引文件中编号在log_name前的国有二进制日志, 并将其从索引文件中删除。before则会删除指定日期前的二进制日志文件和其索引。
使用bin log恢复数据:
mysqlbinlog [option] binlogfile_name
option可以具体查看mysql 官方文档
其中有几个常用选项可以用于局部数据恢复:
--help
--start-datetime=datetime
--start-position=N, -j N
--stop-datetime=datetime
--stop-position=N
具体的时间和位置可以从国mysqlbinlog查看日志来获取。
4 慢查询日志
记录所有执行时间超过long_query_time秒的所有查询和至少查询min_examined_row_limit的查询。long_query_time可以取值0-10,可以精确到微秒量级。
管理语句和不使用索引的语句默认不会记录到慢查询日志中, 这个可以通过配置log_slow_admin_statements and log_queries_not_using_indexes来改变。
请求锁初始化锁花费的时间不会计入执行时间,而mysql服务器会在语句执行完毕,所有的锁都释放后开始写入日志,所以日志里的顺序和sql语句执行的顺序是不一样的。
慢查询日志默认是被禁止的,要开启慢查询可以通过-- --slow_query_log=1 --slow_query_log_file=file_name选项来执行。
也可以通过配置文件:
[mysqld]
log-slow-queries[=path / [filename] ]
动态开启慢查询日志也可以通过SET slow_query_log=1来实现。
查询:
慢查询日志以文本形式存储,因此可以直接查看和删除。