MySQL的日志基础知识及基本操作学习教程

MySQL日志主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志;


日志是mysql数据库的重要组成部分。日志文件中记录着mysql数据库运行期间发生的变化;也就是说用来记录mysql数据库的客户端连接状况、SQL语句的执行情况和错误信息等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,并且可以通过日志文件进行数据恢复。


错误日志


在mysql数据库中,错误日志功能是默认开启的。并且,错误日志无法被禁止。默认情况下,错误日志存储在mysql数据库的数据文件中。错误日志文件通常的名称为hostname.err。其中,hostname表示服务器主机名。


错误日志信息可以自己进行配置的,错误日志所记录的信息是可以通过log-error和log-warnings来定义的,其中log-err是定义是否启用错误日志的功能和错误日志的存储位置,log-warnings是定义是否将警告信息也定义至错误日志中。默认情况下错误日志大概记录以下几个方面的信息:服务器启动和关闭过程中的信息(未必是错误信息,如mysql如何启动InnoDB的表空间文件的、如何初始化自己的存储引擎的等等)、服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的信息。


下面我们来定义mysql错误日志的功能:


一般而言,日志级别的定义没有回话变量都只是在全局级别下进行定义。



mysql> SHOW GLOBAL VARIABLES LIKE '%log%';



+-----------------------------------------+-----------------------------------+| Variable_name              | Value               |+-----------------------------------------+-----------------------------------+| back_log                | 50                || binlog_cache_size            | 32768               || binlog_direct_non_transactional_updates | OFF                || binlog_format              | MIXED               || binlog_stmt_cache_size          | 32768               || expire_logs_days             | 0                 || general_log               | OFF                || general_log_file             | /mydata/data/stu18.log       || innodb_flush_log_at_trx_commit      | 1                 || innodb_locks_unsafe_for_binlog      | OFF                || innodb_log_buffer_size          | 8388608              || innodb_log_file_size           | 5242880              || innodb_log_files_in_group        | 2                 || innodb_log_group_home_dir        | ./                 || innodb_mirrored_log_groups        | 1                 || log                   | OFF                || log_bin                 | ON                || log_bin_trust_function_creators     | OFF                || log_error                | /mydata/data/stu18.magedu.com.err |定义错误日志| log_output               | FILE               || log_queries_not_using_indexes      | OFF                || log_slave_updates            | OFF                || log_slow_queries            | OFF                || log_warnings               | 1        是否把警告信息写入错误日志中| max_binlog_cache_size          | 18446744073709547520        || max_binlog_size             | 1073741824             || max_binlog_stmt_cache_size        | 18446744073709547520        || max_relay_log_size            | 0                 || relay_log                |                  || relay_log_index             |                  || relay_log_info_file           | relay-log.info           || relay_log_purge             | ON                 || relay_log_recovery            | OFF                || relay_log_space_limit          | 0                 || slow_query_log              | OFF                || slow_query_log_file           | /mydata/data/stu18-slow.log    || sql_log_bin               | ON                || sql_log_off               | OFF                || sync_binlog               | 0                 || sync_relay_log              | 0                 || sync_relay_log_info           | 0                 |+-----------------------------------------+-----------------------------------+


其中,log_error可以直接定义为文件路径,也可以为ON|OFF;log_warings只能使用1|0来定义开关启动。


更改错误日志位置可以使用log_error来设置形式如下:



[root@stu18 data]# vim /etc/my.cnf[mysqld]Log_error=DIR/[filename]


解析:其中,DIR参数指定错误日志的路径filename参数是错误日志的名称,没有指定该参数时默认为主机名。重启mysql服务器即可生效。


查看mysql错误日志:



[root@stu18 data]# tail -20 stu18.magedu.com.err



130813 15:30:50 InnoDB: Starting shutdown...130813 15:30:51 InnoDB: Shutdown completed; log sequence number 1630920130813 15:30:51 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete130813 15:30:52 mysqld_safe mysqld from pid file /mydata/data/stu18.magedu.com.pid ended130813 15:30:53 mysqld_safe Starting mysqld daemon with databases from /mydata/data130813 15:30:54 InnoDB: The InnoDB memory heap is disabled   #禁用了InnoDB memory的堆功能。130813 15:30:54 InnoDB: Mutexes and rw_locks use GCC atomic builtins #Mutexes(互斥量)和rw_locks(行级锁)是GCC编译的是InnoDB内置的。130813 15:30:54 InnoDB: Compressed tables use zlib 1.2.3   #默认压缩工具是zlib130813 15:30:55 InnoDB: Initializing buffer pool, size = 128.0M  #InnoDB引擎的缓冲池(buffer pool)的值大小130813 15:30:55 InnoDB: Completed initialization of buffer pool130813 15:30:55 InnoDB: highest supported file format is Barracuda.130813 15:30:57 InnoDB: Waiting for the background threads to start130813 15:30:58 InnoDB: 5.5.33 started; log sequence number 1630920130813 15:30:58 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306130813 15:30:58 [Note]  - '0.0.0.0' resolves to '0.0.0.0'; #0.0.0.0会反解主机名,这里反解失败130813 15:30:58 [Note] Server socket created on IP: '0.0.0.0'.130813 15:30:58 [Note] Event Scheduler: Loaded 0 events  #事件调度器没有任何事件,因为没有装载。130813 15:30:58 [Note] /usr/local/mysql/bin/mysqld: ready for connections. #mysql启动完成等待客户端的请求。Version: '5.5.33-log' socket: '/tmp/mysql.sock' port: 3306 Source distribution #创建一个本地sock用于本地连接。


删除错误日志:


在mysql5.5.7之前:数据库管理员可以删除很长时间之前的错误日志,以保证mysql服务器上的硬盘空间。mysql数据库中,可以使用mysqladmin命令开启新的错误日志。mysqladmin命令的语法如下:mysqladmin