Mysql的几种日志

Mysql的几种日志

  • 错误日志
  • 慢查询日志
  • 查询日志
  • 二进制日志

错误日志:

对mysql的启动、运行、关闭过程进行了记录;不仅记录了所有错误信息,也记录一些警告信息或正确的信息。通过show variables like ‘log_error’ \G 命令来定位错误日志

慢查询日志:

可以为mysql设定一个阀值,将运行时间超过该值的所有sql语句都记录到慢查询日志。

  1. 开启慢查询日志。慢查询日志默认是关闭的,其状态可以通过show variables like ‘slow_query_log’; 将其打开set global slow_query_log=1;,1代表打开,0代表关闭;使用set global slow_query_log=1开启了慢查询日志只对当前数据库生效,如果MySQL重启后则会失效。如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此);
  2. 设置阀值。使用show variables like ‘long_query_time’;,查看当前阀值,默认是10秒;设置阀值set global long_query_time=4;
  3. mysql在mysql.slow_log这张表中存放了慢查询的日志记录,可以通过这张表查询慢查询操作。log_out参数指定了慢查询输出的格式,默认为FILE,可以将它设为TABLE,就可以查询slow_log这张表了。命令如下:show variables like ‘log_output’ \G; set global log_out=’TABLE’ 。(日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需要能够获得更高的系统性能,那么建议优先记录到文件)
  4. 测试慢查询。执行select sleep(10);
  5. 查询慢查询日志。mysql在mysql.slow_log这张表中存放了慢查询的日志记录,可以通过这张表查询慢查询操作。
  6. 优化:slow_log表默认的存储引擎是CVS引擎,对大数据量下的查询效率可能不高,可以将其转换为MyISAM。
    • 停用慢查询 set global slow_query_log = off;
    • 更改引擎:alter table slow_log engine = MyISAM;
    • 启用慢查询: set global slow_query_log = on;
  7. 在配置文件中修改参数
  8. 其他:
    • log_queries_not_using_indexes:
    • Log_throttle_queries_not_using_indexes:

查询日志

查询日志记录了所有对mysql数据库请求对信息,无论这些请求是否得到了执行。通过查询mysql.general_log来获取这些记录。general_log默认也是关闭的,需要设置为开启状态。

二进制日志

二进制日志记录了对mysql数据库执行更改的所有操作。

二进制日志的作用:

  • 恢复:某些数据的恢复需要二进制文件
  • 复制:通过复制和执行二进制日志使一台从数据库与一台主数据库进行实时同步
  • 审计:通过二进制日志中的信息来进行审计,判断是否有对数据库执行注入的攻击

开启二进制日志:

二进制日志默认情况下是关闭的,需要通过修改配置文件并重启服务的方式,开启二进制日志。

几个参数:

  • max_binglog_size:指定了单个二进制日志文件的最大值,如果超过该值,则产生新的二进制日志文件,后缀名+1,并记录到.index文件。
  • Bingo_cache_size:当使用事务时,所有未提交的二进制日志会被记录到一个缓存中去,等该事务提交时直接将缓冲的中的二进制日志写入二进制日志文件,而该缓冲的大小由binlog_cache_size决定,默认大小为32k;
  • Bingo_do_db和binlog_ignore_db表示需要写入或忽略写入哪些库的日志。默认为空,表示需哟啊同步所有库的日志到二进制日志。
  • log_slave_update:设置从库从master取得并执行二进制日志到自己的二进制日志文件中去
  • binlog_format:记录二进制日志的格式。通常将其设置为row格式,在这种情况下,二进制日志记录的不再是简单的sql语句,而是记录表的行更改情况。这可以为数据库的恢复和复制带来更好的可靠性。
  • sync_binlog:二进制日志是否同步写磁盘。