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';