mysql中有多少种日志
Mysql的日志包括如下几种日志:
- 错误日志
- 普通查询日志
- 二进制日志
- 慢查询日志
Mysql版本
此文档测试mysql的版本为
mysql -V
错误日志 error log
Mysql错误日志主要记录Mysql实例每次启动、停止的详细信息,以及Mysql实例运行过程中产生的警告或者错误信息,与其它日志不同,Mysql错误日志必须开启,无法关闭。
与错误日志相关的参数:
log_error:设置了错误日志文件的物理位置。
mysql> show global variables like 'log_error'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | log_error | .\LENOVO-PC.err | +---------------+-----------------+ 1 row in set (0.28 sec)
og_warnings:设置是否将警告信息也写入到错误日志中。默认是2,如果想要禁用,将其设置为0。
mysql> show global variables like 'log_warnings'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_warnings | 1 | +---------------+-------+ 1 row in set (0.03 sec)
普通查询日志 general log
Mysql general log记录了Mysql运行的所有操作,无论这些操作执行成功与否。另外还包括一些事件,例如客户端连接断开的一些信息,默认不开启。
与general log相关的参数:
general_log:设置general log是否开启。
mysql> show global variables like 'general_log'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | general_log | OFF | +---------------+-------+ 1 row in set (0.02 sec)
我们可以通过下面方式设置
mysql> set @@global.general_log = 0; Query OK, 0 rows affected (0.01 sec) mysql> show global variables like 'general_log'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | general_log | OFF | +---------------+-------+ 1 row in set (0.00 sec) mysql> set @@global.general_log = 1; Query OK, 0 rows affected (0.00 sec) mysql> show global variables like 'general_log'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | general_log | ON | +---------------+-------+ 1 row in set (0.00 sec)
我们同样可以采用my.cnf中添加general_log=on/off;此时我们使用set方式修改会不起作用。
general_log_file:general_log开启后,数据库将自动创建日志文件,次参数设置了general_log文件存放的物理位置。
mysql> show global variables like 'general_log_file'; +------------------+-----------------------------+ | Variable_name | Value | +------------------+-----------------------------+ | general_log_file | /mysql/data/mysql-dev01.log | +------------------+-----------------------------+ 1 row in set (0.01 sec)
log_output:设置了general log和慢日志内存存储的方式,默认是file
mysql> show global variables like 'log_output'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_output | FILE | +---------------+-------+ 1 row in set (0.01 sec)
可以设置为输出方式为table
mysql> set @@global.log_output = 'table'; Query OK, 0 rows affected (0.00 sec) mysql> show global variables like 'log_output'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_output | TABLE | +---------------+-------+ 1 row in set (0.00 sec)
通过mysql数据库下的general_log表查询日志信息
mysql> select * from mysql.general_log; +----------------------------+---------------------------+-----------+-----------+--------------+------------------------------------------+ | event_time | user_host | thread_id | server_id | command_type | argument | +----------------------------+---------------------------+-----------+-----------+--------------+------------------------------------------+ | 2016-11-16 09:18:57.772842 | root[root] @ localhost [] | 4 | 1 | Query | show global variables like 'log_output' | | 2016-11-16 09:20:35.328694 | root[root] @ localhost [] | 4 | 1 | Query | show global variables like 'general_log' | | 2016-11-16 09:20:44.918671 | root[root] @ localhost [] | 4 | 1 | Query | show databases | | 2016-11-16 09:21:03.587735 | root[root] @ localhost [] | 4 | 1 | Query | select * from mysql.general_log | +----------------------------+---------------------------+-----------+-----------+--------------+------------------------------------------+ 4 rows in set (0.00 sec
慢日志 slow query log
慢日志记录执行时间过程和没有使用索引的查询语句,报错select、update、delete以及insert语句,慢日志只会记录执行成功的语句。
与慢日志相关的参数:
slow_query_log:设置慢日志是否开启。
mysql> show global variables like 'slow_query_log'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | slow_query_log | OFF | +----------------+-------+ 1 row in set (0.01 sec)
可以通过设置参数进行修改
mysql> set @@global.slow_query_log = 1; Query OK, 0 rows affected (0.00 sec) mysql> show global variables like 'slow_query_log'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | slow_query_log | ON | +----------------+-------+ 1 row in set (0.01 sec) mysql> set @@global.slow_query_log = 0; Query OK, 0 rows affected (0.00 sec) mysql> show global variables like 'slow_query_log'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | slow_query_log | OFF | +----------------+-------+ 1 row in set (0.00 sec)
slow_query_log_file:设置慢日志的文件地址
mysql> show global variables like 'slow_query_log_file'; +---------------------+----------------------------------+ | Variable_name | Value | +---------------------+----------------------------------+ | slow_query_log_file | /mysql/data/mysql-dev01-slow.log | +---------------------+----------------------------------+ 1 row in set (0.01 sec)
long_query_time:设置慢查询的时间阀值,默认是10秒。
mysql> show global variables like 'long_query_time'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ 1 row in set (0.01 sec)
log_queries_not_using_indexes:设置没有使用索引的查询语句是否记录在慢日志文件中。
mysql> show global variables like 'log_queries_not_using_indexes'; +-------------------------------+-------+ | Variable_name | Value | +-------------------------------+-------+ | log_queries_not_using_indexes | OFF | +-------------------------------+-------+ 1 row in set (0.01 sec)
log_output:详见general_log。
慢日志查看
慢日志地查询分为两种情形,慢查询日志的数据形式设置为table以及数据方式设置为file.
table:
采用mysql.slow_log进行查询。
file:
可以执行查看原文本文件,或者采用mysqldumpslow.pl获取慢日志摘要。
二进制日志 binlog
二进制日记记录数据库的变化情况,内容报错数据库所有的更新操作,ddl和dml。数据库管理员可以通过二进制日志查看数据库过去某一时刻发生了哪些变化,必要时可以使用二进制日志恢复数据库。二进制文件内容为二进制信息,不可直接查看。
与二进制文件相关的参数:
log_bin:查看二进制文件是够开启
mysql> show global variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | OFF | +---------------+-------+ 1 row in set (0.00 sec)
mysql> show variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | OFF | +---------------+-------+ 1 row in set (0.00 sec)
log_bin_index:记录二进制文件的清单
mysql> show variables like 'log_bin_index'; +---------------+---------------------------------+ | Variable_name | Value | +---------------+---------------------------------+ | log_bin_index | /mysql/data/mysql-bin-log.index | +---------------+---------------------------------+ 1 row in set (0.00 sec)
这两个参数都是静态变量,无法使用set命令对其进行修改赋值。只能通过my.cnf文件设置。
log_bin=/mysql/data/mysql-bin-log;但是设置时需要设置server-id,否则无法启动mysql,