错误日志(Error Log)是 MySQL 中最常用的一种日志,主要记录 MySQL 服务器启动和停止过程中的信 息、服务器在运行过程中发生的故障和异常情况等。
在 MySQL 数据库中,默认开启错误日志功能。一般情况下,错误日志存储在 MySQL 数据库的数据文件夹 下,通常名称为 hostname.err。其中,hostname 表示 MySQL 服务器的主机名。 在 MySQL 配置文件中,错误日志所记录的信息可以通过 log-error 和 log-warnings 来定义,其中,log-err 定义是否启用错误日志功能和错误日志的存储位置,log-warnings 定义是否将警告信息也记录到错误日志 中。 将 log_error 选项加入到 MySQL 配置文件的 [mysqld] 组中,形式如下:
其中,dir 参数指定错误日志的存储路径;filename 参数指定错误日志的文件名;省略参数时文件名默认为 主机名,存放在 Data 目录中。
重启 MySQL 服务后,参数开始生效,可以在指定路径下看到 filename.err 的文件,如果没有指定 filename,那么错误日志将直接默认为 hostname.err。 注意:错误日志中记录的并非全是错误信息,例如 MySQL 如何启动 InnoDB 的表空间文件、如何 初始化自己的存储引擎等,这些也记录在错误日志文件中。
错误日志中记录着开启和关闭 MySQL 服务的时间,以及服务运行过程中出现哪些异常等信息。如果 MySQL 服务出现异常,可以到错误日志中查找原因。 在 MySQL 中,通过 SHOW 命令可以查看错误日志文件所在的目录及文件名信息。
错误日志以文本文件的形式存储,直接使用普通文本工具就可以查看。这里通过记事本打开,从上面可以 知道错误日志的文件名。该文件在默认在mysql安装目录下或者是mysql目录data下,打开 localhost.localdomain.err 文件,部分内容如下:
以上是错误日志文件的一部分,主要记载了系统的一些运行错误。
在 MySQL 中,可以使用 mysqladmin 命令来开启新的错误日志,以保证 MySQL 服务器上的硬盘空间。 mysqladmin 命令的语法如下:
执行该命令后,MySQL 服务器首先会自动创建一个新的错误日志,然后将旧的错误日志更名为filename.err-old。
MySQL 服务器发生异常时,管理员可以在错误日志中找到发生异常的时间、原因,然后根据这些信息来解 决异常。对于很久之前的错误日志,查看的可能性不大,可以直接将这些错误日志删除
二进制日志(Binary Log)也可叫作变更日志(Update Log),是 MySQL 中非常重要的日志。主要用于记 录数据库的变化情况,即 SQL 语句的 DDL 和 DML 语句,不包含数据记录查询操作。 如果 MySQL 数据库意外停止,可以通过二进制日志文件来查看用户执行了哪些操作,对数据库服务器文件 做了哪些修改,然后根据二进制日志文件中的记录来恢复数据库服务器。 默认情况下,二进制日志功能是关闭的。可以通过以下命令查看二进制日志是否开启,命令如下:
从结果可以看出,二进制日志是开启的。
在 MySQL 中,可以通过在配置文件中添加 log-bin 选项来开启二进制日志,格式如下:
其中,dir 参数指定二进制文件的存储路径;filename 参数指定二进制文件的文件名,其形式为 filename.number,number 的形式为 000001、000002 等。 每次重启 MySQL 服务后,都会生成一个新的二进制日志文件,这些日志文件的文件名中 filename 部分不会改变,number 会不断递增。 如果没有 dir 和 filename 参数,二进制日志将默认存储在数据库的数据目录下,默认的文件名为 hostname-bin.number,其中 hostname 表示主机名。
案例配置如下:
在mysql的data目录下查看生成的binlog日志文件,如下:
可以使用如下命令查看 MySQL 中有哪些二进制日志文件:
show master status;命令用来查看当前的二进制日志;
二进制日志使用二进制格式存储,不能直接打开查看。如果需要查看二进制日志,使用show binlog events in ‘mysql-bin.000001’; 命令。
如果不指定查询的二进制文件,则默认为第一个二进制文件。
二进制日志中记录着大量的信息,如果很长时间不清理二进制日志,将会浪费很多的磁盘空间。删除二进 制日志的方法很多,下面介绍几种删除二进制日志的方法。
使用 RESET MASTER 语句可以删除的所有二进制日志,该语句的形式如下:
删除所有二进制日志
登录 MySQL 数据库后,可以执行该语句来删除所有二进制日志。删除所有二进制日志后,MySQL 将会重 新创建新的二进制日志,新二进制日志的编号从 000001 开始。
根据编号删除二进制日志
每个二进制日志文件后面有一个 6 位数的编号,如 000001。使用 PURGE MASTER LOGS TO 语句,可以删 除指定二进制日志的编号之前的日志。该语句的基本语法形式如下:
该语句将删除编号小于 filename.number 的所有二进制日志 下面删除 mylog.000004 之前的二进制日志,代码如下:
代码执行完后,编号为 000001、000002 和 000003 的二进制日志将被删除。
根据创建时间删除二进制日志
使用 PURGE MASTER LOGS TO 语句,可以删除指定时间之前创建的二进制日志,该语句的基本语法格式如 下:
其中,“hh”为 24 制的小时。该语句将删除在指定时间之前创建的所有二进制日志。 下面删除 2019-12-20 15:00:00 之前创建的二进制日志,代码如下:
代码执行完后,2019-12-20 15:00:00 之前创建的所有二进制日志将被删除。
使用二进制文件恢复数据
删除数据或者表
1. 通过日志文件节点恢复数据
根据节点需要我们查看日志文件提供给我们的数据库创建,表创建,数据新增等时创建的语句节点,从而 恢复数据。
其他恢复数据命令