mysql的日志

mysql的日志有下面这几种类型

Log Type Information Written to Log
Error log Problems encountered starting, running, or stopping mysqld
General query log Established client connections and statements received from clients
Binary log Statements that change data (also used for replication)
Relay log Data changes received from a replication master server
Slow query log Queries that took more thanlong_query_time seconds to execute
DDL log (metadata log) Metadata operations performed by DDL statements

默认情况下,没有日志被启用,除了windows上的errorlog ,ddl日志总是在被需要的时候创建,没有用户配置的选项,默认情况下服务器写所有启用的日志文件到数据目录下面,可以用flush logs刷新日志文件,当日志文件达到了max_binlog_size大小的时候会刷新,在运行的时候不能控制一般日志和慢查询日志。可以启用禁用日志,改变日志文件的名字,可以告诉服务器写一般日志和慢查询日志到日志文件或日志表中。

中继日志只在slave中使用,来存放master上的数据改变。


在服务器启动时候的日志控制

--log-output选项指定日志输出的目的地 值应该是TABLE,FILE,或NONE,默认值是FILe

general_log变量控制日志记录到指定的目的地中,值是1或0来控制是否启用。设置日志文件名称,需要设置general_log_file变量。

--log-output=table,file设置了日志文件写到表及文件中。

在运行时候的日志控制

为了对当前连接禁用或启用日志,在session级别设置sql_log_off =on或offe

在unix和unix-like的系统中,mysqld写错误日志信息的方式如下:

1没有--log-error,mysqld写错误信息到控制台

2有--log-error mysqld写错误信息到错误信息日志文件,如果没有指定文件名字,默认的文件名是host_name.err

如果是mysqld_safe启动的mysqld,会将错误信息写到日志文件或是syslog,mysqld_safe有三个错误日志选项--syslog,--skip-syslog --log-error,默认的事--skip-syslog写到默认文件中,--log-warnings选项或是log_warnings系统变量可以控制警告信息是否写入到错误日志中,默认是开启的。


慢查询日志记录执行时间超过long_query_time秒的sql,默认是不会记录操作管理的sql的,如果要记录,使用log_slow_admin_statements系统变量。对于没有使用索引的查询尅使用log_queries_not_using_indexs系统变量来写入慢查询日志,可以使用log_throttle_queries_not_using_indexes系统变量控制写入的速率,默认值是0,表示没有限制。默认情况下,slave不会写复制的查询到慢日志中,为了启用,需要设置log_slow_slave_statements系统变量。

二进制日志的主要目的有2个:

1对于复制用

2对于恢复用,在备份被恢复后,二进制日志包含了备份依赖的事件,这些事件可以从备份的事件点恢复到当前时间。

在5.6.2以后,二进制日志是crash-safe的,只包含完整的事务信息。


默认情况下,服务器日志记录事件的长度及事件本身,你可以设置binlog_checksum变量来写校验值,slave上设置slave_sql_verify_checksum来使用这个校验值。

slave的机器默认情况下不会写自己的二进制日志,为了记录slave自己的二进制日志,可以使用--log-slave-updates选项和--log-bin。

这样就能形成链式的复制。

可以使用reset master语句清除所有的二进制日志,或使用purge binary logs来清除。

在未提交的事务中,所有的在事务表上的更新操作都被缓存,直到commit提交,对非事务表的更新在执行后马上被存放在二进制日志中,当线程开始处理事务,会分配一个binlog_cache_size大小的buffer给语句,如果语句太大就放到临时表中,线程结束的时候临时表被删除。

默认情况下,二进制日志再每次写的时候不会同步到磁盘,所以如果操作系统或是机器crash掉,就有可能导致数据丢失,为了防止这种情况发生,使用sync_binlog系统变量来在每次N次提交后,同步下磁盘。


------------------维护--------------------

刷新日志的操作做了下面的这些操作:

1如果通用日志或慢查询日志启用了,服务器关闭并重新打开日志文件,生成新的二进制日志文件,如果设置了--log-error选项,会关闭并重新打开日志文件。

为了让新的日志文件生成,在unix上在刷新前重命名日志文件,在刷新的时候服务器会生成一个原名字的日志文件。

可以在运行的时候先禁用日志文件,重命名日志文件,然后再启用日志文件,这样不要重启

set global general_log='off';

set global slow_query_log='off';




你可能感兴趣的:(mysql的日志)