共计 5238 个字符,预计需要花费 14 分钟才能阅读完成。
1. 简介
日志文件记录着 MySQL 数据库运行期间发生的变化,如:mysql 数据库的客户端连接状况、sql 语句的执行情况和错误信息等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,并且可以通过日志进行数据恢复;也可以通过日志文件分析数据、优化查询等。Mysql 日志管理机制比较完善,它包含了以下几种常见的日志文件、分别为:错误日志(-log-err)、查询日志(-log)、二进制日志(-log-bin)、更新日志(-log-update)及慢查询日志(-log-slow-queries)。
2. 操作错误日志
在 mysql 数据库中,错误日志记录着 mysql 服务器的启动和停止过程中的信息、服务器在运行过程中发生的故障和异常情况的相关信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的信息等。错误日志记录的并非全是错误信息,如 mysql 如何启动 InnoDB 的表空间文件、如何初始化自己的存储引擎等信息也记录在错误日志中。
(1)启动错误日志
错误日志在默认情况下是开启的,并且不能被禁止。错误日志信息也可以自行配置,通过修改 my.cnf 文件即可。错误日志所记录的信息是可以通以 log-error 和 log-warnings 来定义的,其中 log-err 定义是否启用错误日志的功能和错误日志的位置,log-warning 定义是否将警告信息也定义至错误日志中。-log-error=[file-name]用来指定错误日志的存放位置。如果没有指定[file-name],默认 hostname.err 作为文件名,默认存放在 datadir 目录中。
(2)查看错误日志
Linux 中直接使用 vi 或者 gdit 工具来查看
mysql> show variables like 'log_error'; | |
+---------------+---------------------------------+ | |
| Variable_name | Value | | |
+---------------+---------------------------------+ | |
| log_error | /application/mysql/data/cai.err | | |
+---------------+---------------------------------+ | |
1 row in set (0.00 sec) |
(3)删除错误日志
管理员可以删除很久之前的错误日志,这样可以保证 mysql 服务器上的硬盘空间。通过 show 命令查看错误文件所在位置,确认可以删除错误日志后可以直接删除文件。在 mysql 数据库中,可以使用 mysqladmin 命令来开启新的错误日志,语法如下:
mysql> flush logs; | |
Query OK, 0 rows affected (0.02 sec) | |
执行上述命令后可以创建一个新的错误文件 |
3. 操作查询日志
查询日志记录了用户的所有操作,包括对数据库的增、删、查、改等信息,在并发操作多的环境下会产生大量的信息,从而导致不必要的磁盘 IO,会影响 mysql 的性能。如不是为了调试数据库的目的建议不要开启查询日志。
查询日志包含日期和时间、服务器线程 ID、事件类型以及特定事件信息的列。
(1)启动查询日志
默认情况下查询日志是关闭的。如需打开查询日志,通过修改 my.cnf 文件来启动查询日志。在 [mysqld] 组下加入 log 选项,格式如下。
[mysqld] | |
log[=path/[filename]] | |
默认主机名(hostname)作为文件名,放在 datadir 目录中。mysql> show variables like 'general%'; | |
+------------------+---------------------------------+ | |
| Variable_name | Value | | |
+------------------+---------------------------------+ | |
| general_log | ON | | |
| general_log_file | /application/mysql/data/cai.log | | |
+------------------+---------------------------------+ |
(2)查看查询日志
vim 查看,首先通过上述命令查看存放位置。
(3)删除查询日志
由于查询日志记录了用户的所有操作。如果数据库的使用非常频繁,那么查询日志的数据量将会非常大,也会占用很大的磁盘空间。通过 show 命令查看错误文件所在位置,确认可以删除通用日志后可以直接删除文件。
Flush logs 重新生成日志。
4. 操作二进制日志
Mysql 数据库的二进制文件是用来记录所有用户对数据库的操作。当数据库发生意外时,可以通过此文件查看在一定时间段内用户所做的操作,结合数据库备份技术,即可实现用户操作,使数据库恢复。
(1)启动二进制日志
默认情况下是不开启二进制日志文件的,通过命令查看
mysql> show variables like 'log_bin'; | |
+---------------+-------+ | |
| Variable_name | Value | | |
+---------------+-------+ | |
| log_bin | ON | | |
+---------------+-------+ |
开启方式:在 /etc/my.cnf 下
[ | ]|
Log-bin=[filename] | |
如果没有 filename,默认为 hostname-bin 作为文件名,放在 datadir 下。如果只对指定数据库生成二进制文件,则需要添加如下语句:Binlog-do-db=db_name(数据库名称)如果不对指定数据库生成二进制日志,则需要添加如下语句:Binlog-ignore-db=db_name |
在 datadir 中生成文件
每重启一次 mysql 就是重新生成 cai-bin。如果日志长度超过 max_binlog_size 的上限(默认是 1G=10737418248)也会创建一个新的日志文件,通过 show 命令查看二进制日志的上限
mysql> show variables like 'max_binlog_size'; | |
+-----------------+------------+ | |
| Variable_name | Value | | |
+-----------------+------------+ | |
| max_binlog_size | 1073741824 | | |
+-----------------+------------+ | |
1 row in set (0.00 sec) | |
使用 flush logs 也会创建一个新的日志文件,查���二进制相关信息如下:mysql> show variables like 'log_bin%'\G | |
*************************** 1. row *************************** | |
Variable_name: log_bin | |
Value: ON | |
*************************** 2. row *************************** | |
Variable_name: log_bin_trust_function_creators | |
Value: OFF | |
2 rows in set (0.00 sec) |
(2)查看二进制日志
mysql> show variables like 'log_bin'; | |
+---------------+-------+ | |
| Variable_name | Value | | |
+---------------+-------+ | |
| log_bin | ON | | |
+---------------+-------+ | |
1 row in set (0.00 sec) | |
mysql> show binary logs; | |
+----------------+-----------+ | |
| Log_name | File_size | | |
+----------------+-----------+ | |
| cai-bin.000001 | 1774 | | |
| cai-bin.000002 | 148 | | |
| cai-bin.000003 | 126 | | |
| cai-bin.000004 | 126 | | |
| cai-bin.000005 | 107 | | |
+----------------+-----------+ | |
5 rows in set (0.00 sec) | |
mysql> show binlog events in 'cai-bin.000003'\G | |
*************************** 1. row *************************** | |
Log_name: cai-bin.000003 | |
Pos: 4 | |
Event_type: Format_desc | |
Server_id: 1 | |
End_log_pos: 107 | |
Info: Server ver: 5.5.56-log, Binlog ver: 4 | |
*************************** 2. row *************************** | |
Log_name: cai-bin.000003 | |
Pos: 107 | |
Event_type: Stop | |
Server_id: 1 | |
End_log_pos: 126 | |
Info: | |
2 rows in set (0.00 sec) |
总结:开启二进制文件可以实现如下几个功能
①恢复(recovery):某些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过二进制日志进行 point-in-time 的恢复。
②复制(replication):其原理与恢复类似,通过复制和执行二进制日志使一台远程的 mysql 数据库与另一台 mysql 数据库进行实时同步。
③审计(audit):用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击。
(3)删除二进制日志
用 reset master 命令删除所有日志,新日志从 000001 开始编号
mysql> reset master; | |
Query OK, 0 rows affected (0.03 sec) | |
mysql> show binary logs; | |
+----------------+-----------+ | |
| Log_name | File_size | | |
+----------------+-----------+ | |
| cai-bin.000001 | 107 | | |
+----------------+-----------+ | |
1 row in set (0.00 sec) | |
可以看出已经删除完了 |
(4)使用二进制日志还原数据库
看备份那一章 http://www.linuxidc.com/Linux/2017-08/146184.htm
5. 操作慢查询日志
优化 mysql 最重要的一部分工作就是先确定“有问题”的查询语句。只有先找出这些查询较慢的 sql 查询,才可以进一步分析原因并且优化它。慢查询日志就记录了执行时间超过了特定时长的查询,即记录所有执行时间超过最大 sql 执行时间(long_query_time)或未使用索引的语句。
(1)启动慢查询日志
默认情况下,慢查询日志是关闭的。可以通过配置文件 my.cnf 来启用,配置方式如下:
[mysqld] | |
Slow_query_log=[filename] | |
Slow_launch_time=n | |
cai-slow.log(默认放在 datadir 下)mysql> show variables like 'slow_%'; | |
+---------------------+--------------------------------------+ | |
| Variable_name | Value | | |
+---------------------+--------------------------------------+ | |
| slow_launch_time | 10 | | |
| slow_query_log | OFF | | |
| slow_query_log_file | /application/mysql/data/cai-slow.log | | |
+---------------------+--------------------------------------+ | |
3 rows in set (0.00 sec) | |
mysql> set global slow_query_log=on; | |
Query OK, 0 rows affected (0.02 sec)(上述命令也能开启) |
(2)删除慢查询日志
mysql> set global slow_query_log=0; | |
Query OK, 0 rows affected (0.00 sec | |
生成一个新的慢查询日志文件:mysql> set global slow_query_log=1; | |
Query OK, 0 rows affected (0.00 sec) |
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-08/146183.htm
