【第六章】MySQL日志文件管理
1、日志文件管理概述:
配置文件:/etc/my.cnf
作用:MySQL日志文件是用来记录MySQL数据库客户端连接情况、SQL语句的执行情况以及错误信息告示。
分类:MySQL日志文件分为4种:错误日志、通用查询日志、慢查询日志和二进制日志:
错误日志:记录MySQL服务器的启动、运行、或停止时出现的问题(默认情况,只启用错误日志功能。)
二进制日志:以二进制文件的形式记录了数据库中的操作,但不是记录查询语句。
通用查询日志:记录用户的登录和查询的信息。
慢查询日志:记录所有的执行时间超过指定时间的所有查询或者不使用索引的查询。
- error log 错误日志 排错 /var/log/mysqld.log【默认开启】
- bin log 二进制日志 备份 增量备份 DDL DML DCL
- Relay log 中继日志 复制 接收 replication master
- slow log 慢查询日志 调优 查询时间超过指定值
【实例1】SHOW VARIABLES 语句查看是否启用了日志:
mysql> show variables like 'log_%'; +----------------------------------------+----------------------------+ | Variable_name | Value | +----------------------------------------+----------------------------+ | log_bin | ON | | log_bin_basename | /data/mysql/yltlinux | | log_bin_index | /data/mysql/yltlinux.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | log_error | /data/mysql/host130.err | | log_output | FILE | | log_queries_not_using_indexes | OFF | | log_slave_updates | OFF | | log_slow_admin_statements | OFF | | log_slow_slave_statements | OFF | | log_throttle_queries_not_using_indexes | 0 | | log_warnings | 1 |
其中Value值是off的表示未开启服务。可以更改my.cnf文件中的配置信息,重启mysql服务即可。
注:启用日志功能会降低MySQL数据的执行速度。
2、错误日志(err log)
作用:error log 错误日志 排错 /var/log/mysqld.log【默认开启】
2.1启动和设置错误日志:
- 日志文件位置:log-error=/var/log/mysqld.log
- 默认情况下错误日志是开启的,而且无法 被禁止,打开数据安装目录下的my.cnf文件找到log-error选项进行查看:
【实例2】获取log-error变量的值,即获取error log的详细位置:
mysql> show variables like 'log_error'; +---------------+-------------------------+ | Variable_name | Value | +---------------+-------------------------+ | log_error | /data/mysql/host130.err | +---------------+-------------------------+ 1 row in set (0.00 sec) mysql>
2.2 查看错误日志
通过【实例2】可知log_error的详细位置,下边部分error log:
[root@host130 ~]# more /data/mysql/host130.err
2018-05-25 19:20:15 5800 [Note] InnoDB: The InnoDB memory heap is disabled 2018-05-25 19:20:15 5800 [Note] InnoDB: Mutexes and rw_locks use G CC atomic builtins 2018-05-25 19:20:15 5800 [Note] InnoDB: Memory barrier is not used 2018-05-25 19:20:15 5800 [Note] InnoDB: Compressed tables use zlib 1.2.3 2018-05-25 19:20:15 5800 [Note] InnoDB: Using Linux native AIO 2018-05-25 19:20:15 5800 [Note] InnoDB: Using CPU crc32 instructio
2.3 删除错误日志
目的:对于存放很久的错误日志,可以保证MySQL服务器上的硬盘空间。
方法:MySQL数据库中可以使用两种方法开启新的错误日志:mysqladmin命令和flush logs。
mysqladmin 命令语法如下:
1、sqladmin -u root -p flush-log
注:上述命令会创建一个新的错误日志,旧的仍然会 保留,会自动在名称后边添加-old内容。
3、二进制日志
作用:bin log 二进制日志 备份 增量备份 DDL DML DCL
3.1 启用二进制日志
- 默认情况下,二进制日志(bin-log)功能是关闭状态,如果要开启需要在 my.cnf文件中的 bin_log 选项前的 # 去掉。
【实例3】在my.cnf文件中指定如下内容:
log_bin=mysql-bin
server-id=11 #由于bug问题必须设置这个id,数字随便写
datadir=/var/lib/mysql #默认指定文件存放位置,可修改,但是要注意权限
关闭my.cnf文件后重新启动MySQl服务器。
[root@localhost ~]# systemctl restart mysqld
【实例4】为了确保二进制日志功能已经开启,可执行如下命令:
mysql> show variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | ON | +---------------+-------+ 1 row in set (0.00 sec) mysql>
3.2查看二进制日志
- 二进制日志是以二进制的方式存储,不能直接打开,所以需要使用mysql 自带的 mysqlbinlog 命令工具进行查看
【实例5】进入当前数据库的数据目录:
-
[root@host130 mysql]# pwd /data/mysql [root@host130 mysql]# mysqlbinlog yltlinux.000037 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #180525 19:20:25 server id 128 end_log_pos 120 CRC32 0xb6d0f986 Start: binlog v 4, server v 5.6.36-log created 180525 19:20:25 at startup # Warning: this binlog is either in use or was not closed properly. ROLLBACK/*!*/; BINLOG ' efEHWw+AAAAAdAAAAHgAAAABAAQANS42LjM2LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAB58QdbEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAYb5 0LY= '/*!*/; DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/; [root@host130 mysql]#
【实例6】查看二进制日志的文件目录:
-
mysql> show master logs; +-----------------+-----------+ | Log_name | File_size | +-----------------+-----------+ | yltlinux.000001 | 178523 | | yltlinux.000002 | 143 | | yltlinux.000003 | 143 | | yltlinux.000004 | 143 | | yltlinux.000005 | 143 | | yltlinux.000006 | 143 | | yltlinux.000007 | 120 | | yltlinux.000008 | 927 | | yltlinux.000009 | 120 | | yltlinux.000010 | 120 | +-----------------+-----------+ 11 rows in set (0.46 sec) mysql>
3.3 清理二进制文件
原因:二进制日志文件会影响MySQL数据库性能,大量的二进制日志文件会占用大量磁盘空间。
删除二进制文件的方法:
- 删除所有二进制文件,新的二进制文件会重新从 000001开始:
reset master;
2.根据编号进行删除
【实例7】删除 yltlinux.000005 之前的二进制日志,删除之后通过 SHOW MASTER LOGS 语句查看文件列表:
mysql> purge master logs to 'yltlinux.000005'; Query OK, 0 rows affected (0.10 sec) mysql> show master logs; +-----------------+-----------+ | Log_name | File_size | +-----------------+-----------+ | yltlinux.000005 | 143 | | yltlinux.000006 | 143 | | yltlinux.000007 | 120 | | yltlinux.000008 | 927 | | yltlinux.000009 | 120 | | yltlinux.000010 | 120 | +-----------------+-----------+ 33 rows in set (0.00 sec) mysql>
3.根据创建时间进行删除
- purge master logs before 语句可以将指定时间之前的所有二进制文件删除;
- purge master logs before ‘yyyy -mm-dd hh:mm:ss’;
mysql> purge master logs before '2018-02-01 22:46:00'; Query OK, 0 rows affected (0.07 sec) mysql> show master logs; +-----------------+-----------+ | Log_name | File_size | +-----------------+-----------+ | yltlinux.000032 | 143 | | yltlinux.000033 | 6796 | | yltlinux.000034 | 709 | | yltlinux.000035 | 455 | | yltlinux.000036 | 143 | | yltlinux.000037 | 120 | +-----------------+-----------+ 6 rows in set (0.00 sec) mysql>
3.4 恢复二进制日志
原因:二进制日志记录着MySQL数据库的所有事件操作,当发生灾难性错误时,可以通过二进制日志进行恢复。
【实例9】使用 mysqlbinlog 命令执行还原操作时,必须是编号小的首先被还原。
mysqlbinlog yltlinux.000001 | mysql -u root -p mysqlbinlog yltlinux.000002 | mysql -u root -p
4.慢查询日志
作用:用来记录执行时间超过指定时间的查询语句,可以找出哪些查询语句执行效率低,以方便进行优化。
- 默认情况下,慢查询日志功能是关闭的。
4.1 启用慢查询日志:
- 如下语句查看慢查询的配置:
mysql> show variables like'%slow%'; +---------------------------+------------------------------+ | Variable_name | Value | +---------------------------+------------------------------+ | log_slow_admin_statements | OFF | | log_slow_slave_statements | OFF | | slow_launch_time | 2 | | slow_query_log | OFF | | slow_query_log_file | /data/mysql/host130-slow.log | +---------------------------+------------------------------+ 5 rows in set (0.00 sec) mysql>
- 默认情况下,my.cnf文件的相关内容如下:
slow-query-log=0 //表示是否启用慢查询日志,其中0表示不启用,修改为1表示启用慢查询日志 slow_query_log_file=''WS-slow.log" //指定慢查询日志生成的文件路径和名称,如果不指定路径名,默认存放在数据库的数据文件下 long_query_time=10 //指定时间值,以秒为单位,默认值为10s
4.2 查看和删除慢查询日志
4.2.1 查看慢查询日志
启用慢查询日志时,重新启动 MySQL 数据库,会自动生成一个慢查询日志,日志是以 文本文件 的形式存储,可以直接通过文本文件打开工具查看。
4.2..2 删除慢查询日志
删除慢查询日志有两种方法:
- 直接手动删除
- 通过执行 mysqladmin 命令启用新的慢查询日志,新生成的慢查询日志会直接覆盖旧的查询日志,不需要再手动删除。基本语法如下:
mysqladmin -u root -p flush-logs
>删除之后重启删除之后需要重启 MySQL 服务,重启之后会生成新的慢查询日志。
>如果要备份旧日志,可以将旧日志改名,再重启MySQL服务。