MySQL的日志文件及功能总结介绍
mysql有几个日志文件,帮助管理员了解mysqld(mysql server的主程序)内部发生的事情。
日志文件 | 记入文件中的信息类型 |
错误日志 | 记录启动,运行或停止mysqld时出现的问题 |
通用日志 | 记录建立的客户端连接和执行的语句 |
二进制日志 | 记录更改数据的所有语句,用于复制,备份恢复 |
慢查询日志 | 记录执行时间超过long_query_time秒的所有查询 |
1.错误日志
错误日志问包含了mysqld启动或停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。可以用--log-error[=file_name]选项来指定mysqld保存错误日志文件的位置。
查看错误日志的位置:
mysql> show variables like 'log_error%'; +---------------------+--------------------------+ | variable_name | value | +---------------------+--------------------------+ | log_error | /var/log/mysql/error.log | | log_error_verbosity | 3 | +---------------------+--------------------------+ 2 rows in set (0.01 sec)
2.通用日志
如果你想知道mysqld内部发生了什么,你应该用--log[=file_name]或-1[file_name]选项启动它。如果没有给定file_name的值,那么默认名就是host_name.log。所有连接和语句都将被记录到日志文件中。
以下命令可查询通用日志的路径。
mysql> show variables like '%gene%'; +------------------+---------------------------------+ | variable_name | value | +------------------+---------------------------------+ | general_log | off | | general_log_file | /var/lib/mysql/loggeneral.log | +------------------+---------------------------------+ 2 rows in set (0.03 sec)
3.二进制日志
二进制日志包含了所有更新了数据或者潜在更新了数据的语句。它还包含了每个更新的语句的执行时间信息,但不包含没有修改任何数据的语句,如果想要记录所有的语句,比如查询之类的,那么应该使用通用日志。二进制日志的主要作用是恢复数据,因为二进制日志包含备份后进行的所有更新。
二进制日志的主要作用:
1,用于复制,在数据库主从复制的时候,主服务器会将其产生的二进制日志发送到slave端,slave端会利用这个二进制日志的信息在本地重做,实现主从同步
2,用户恢复,mysql可以在全备和差异备份的基础上,利用二进制日志进行基于时间点或者事物id的恢复操作。原理雷同于主从复制的日志重做
查看二进制日志的位置:
mysql> show variables like 'log_bin%'; +----------------------------------------+--------------------------+ | variable_name | value | +----------------------------------------+--------------------------+ | log_bin | off | | log_bin_basename | | | log_bin_index | | | log_bin_trust_function_creators | off | | log_bin_use_v1_row_events | off |
可见二进制日志并没有打开,那么需要打开二进制日志的话进行如下操作:
进入my.cnf文件,cd /etc/mysql/my.cnf,并在[mysqld]后添加以下内容:
[mysqld] server-id = 1 # 确保在整个mysql集群中唯一 log-bin = /var/log/mysql/mysql-bin.log # 日志存放位置 log-bin-index = binlog.index
记得重启mysql,再查看二进制日志是否打开及其位置:
mysql> show variables like 'log_bin%'; +----------------------------------------+-----------------------------+ | variable_name | value | +----------------------------------------+-----------------------------+ | log_bin | on | | log_bin_basename | /var/log/mysql/mysql-bin | | log_bin_index | /var/lib/mysql/binlog.index | | log_bin_trust_function_creators | off | | log_bin_use_v1_row_events | off |
然后就可以查看二进制日志了:
mysql> show master status; #查看当前日志 +------------------+----------+--------------+------------------+-------------------+ | file | position | binlog_do_db | binlog_ignore_db | executed_gtid_set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 154 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) mysql> show binary logs; #查看日志【所生成的全部日志文件】 +------------------+-----------+ | log_name | file_size | +------------------+-----------+ | mysql-bin.000001 | 154 | +------------------+-----------+ 1 row in set (0.00 sec) mysql> show binlog events in 'mysql-bin.000001'; #可以查看对某个日志中具体的操作 +------------------+-----+----------------+-----------+-------------+-------------------------------------------- ------------+ | log_name | pos | event_type | server_id | end_log_pos | info | +------------------+-----+----------------+-----------+-------------+-------------------------------------------- ------------+ | mysql-bin.000001 | 4 | format_desc | 1 | 123 | server ver: 5.7.22-0ubuntu0.16.04.1-log, bi nlog ver: 4 | | mysql-bin.000001 | 123 | previous_gtids | 1 | 154 | | +------------------+-----+----------------+-----------+-------------+-------------------------------------------- ------------+ 2 rows in set (0.00 sec)
也可以使用mysqlbinlog命令来查看二进制日志文件中的的内容:
[root@localhost mysql]:~/ $ mysqlbinlog /var/lib/mysql/mysql-bin.xxxxx [15:14:30] /*!50530 set @@session.pseudo_slave_mode=1*/; /*!50003 set @old_completion_type=@@completion_type,completion_type=0*/; delimiter /*!*/; xxxxxxxxxxxxxxxx set @@session.gtid_next= 'automatic' /* added by mysqlbinlog */ /*!*/; delimiter ; # end of log file /*!50003 set completion_type=@old_completion_type*/; /*!50530 set @@session.pseudo_slave_mode=0*/;
4.慢查询日志
当参数slow_query_log = 1时,mysqld将记录一个执行时间超过long_query_time秒的所有sql语句的日志文件。
查看慢查询日志的位置:
mysql> show variables like '%slow_query%'; +---------------------+--------------------------------------+ | variable_name | value | +---------------------+--------------------------------------+ | slow_query_log | off | | slow_query_log_file | /var/lib/mysql/54b78b286d5c-slow.log | +---------------------+--------------------------------------+ 2 rows in set (0.01 sec)
可以通过mysqldumpslow命令来查看和分析慢查询日志:
[root@localhost mysql]# mysqldumpslow /var/lib/mysql/54b78b286d5c-slow.log -t 2 -s al reading mysql slow query log from /var/lib/mysql/izbp1akzlq26t30fbsdwh7z-slow.log -- count 执行次数 -- time 执行时间 -- lock 锁定时间 -- rows 返回条数 -- root[root]@localhost 通过那个用户执行的 count: 5 time=0.00s (0s) lock=0.01s (0s) rows=5.0 (25), root[root]@localhost show columns from `yp_area`
上一篇: Oracle游标 CURSOR实例详解