同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分。MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等。这些日志可以帮助我们定义mysqld内部发生的事情,数据库性能故障,记录数据的变更历史,用户恢复数据库等等。本文主要描述错误日志文件。
1、MySQL日志文件系统的组成
a、错误日志:记录启动、运行或停止mysqld时出现的问题。
b、通用日志:记录建立的客户端连接和执行的语句。
c、更新日志:记录更改数据的语句。该日志在MySQL 5.1中已不再使用。
d、二进制日志:记录所有更改数据的语句。还用于复制。
e、慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询。
f、Innodb日志:innodb redo log
缺省情况下,所有日志创建于mysqld数据目录中。
可以通过刷新日志,来强制mysqld来关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)。
当你执行一个FLUSH LOGS语句或执行mysqladmin flush-logs或mysqladmin refresh时,则日志被老化。
对于存在MySQL复制的情形下,从复制服务器将维护更多日志文件,被称为接替日志。
--------------------------------------分割线 --------------------------------------
Ubuntu 14.04下安装MySQL
Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL
Ubuntu 12.04 LTS 构建高可用分布式 MySQL 集群
Ubuntu 12.04下源代码安装MySQL5.6以及Python-MySQLdb
--------------------------------------分割线 --------------------------------------
2、错误日志
错误日志是一个文本文件。
错误日志记录了MySQL Server每次启动和关闭的详细信息以及运行过程中所有较为严重的警告和错误信息。
可以用--log-error[=file_name]选项来开启mysql错误日志,该选项指定mysqld保存错误日志文件的位置。
对于指定--log-error[=file_name]选项而未给定file_name值,mysqld使用错误日志名host_name.err 并在数据目录中写入日志文件。
在mysqld正在写入错误日志到文件时,执行FLUSH LOGS 或者mysqladmin flush-logs时,服务器将关闭并重新打开日志文件。
建议在flush之前手动重命名错误日志文件,之后mysql服务将使用原始文件名打开一个新文件。
以下为错误日志备份方法:
shell> mv host_name.err host_name.err-old
shell> mysqladmin flush-logs
shell> mv host_name.err-old backup-directory
3、实战演示
#启用错误日志,缺省情况下文件名为: hostname.err
#下面2种方式均可进行错误日志的配置
--log-error=file_name #命令行选项(command option)
log-error=file_Name #配置文件(configure file)
#查看当前的错误日志配置,缺省情况下位于数据目录
mysql> show variables like 'log_error';
+---------------+-------------------------+
| Variable_name | Value |
+---------------+-------------------------+
| log_error | /var/lib/mysql/SZDB.err |
+---------------+-------------------------+
1 row in set (0.00 sec)
#查看当前mysql server错误日志文件
SZDB:/var/lib/mysql # tail SZDB.err
140906 22:06:45 InnoDB: Completed initialization of buffer pool
140906 22:06:45 InnoDB: highest supported file format is Barracuda.
140906 22:06:45 InnoDB: Waiting for the background threads to start
140906 22:06:46 InnoDB: 5.5.37 started; log sequence number 1605345
140906 22:06:47 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
140906 22:06:47 [Note] - '0.0.0.0' resolves to '0.0.0.0';
140906 22:06:47 [Note] Server socket created on IP: '0.0.0.0'.
140906 22:06:47 [Note] Event Scheduler: Loaded 0 events
140906 22:06:47 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.5.37-log' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server (GPL)