MySQL日志详解(未完待续)

前言

MySQL日志记录了MySQL数据库日常操作和错误信息。MySQL有不同类型的日志文件(各自存储了不同类型的日志),从日志当中可以查询到MySQL数据库的运行情况、用户的操作、错误的信息等。

MySQL的日志分为以下四大类:

  • 错误日志:记录mysql服务的启动,运行或停止mysql服务时出现的问题;
  • 查询日志:记录建立的客户端的连接和执行的语句;
  • 二进制日志:记录所有更改数据的语句,可以用于数据的复制;
  • 慢查询日志:记录所有执行的时间超过long_query_time的所有查询或不使用索引的查询。

默认情况下,所有日志创建于MySQL数据目录中,通过刷新日志,可以强制MySQL关闭和重新打开日志文件,Flush logs刷新日志或者执行mysqladmin flush-logs 如果正使用MySQL复制功能,在复制服务器上可以维护更多日志文件,这种日志我们称为接替日志。启动日志功能会降低MySQL数据库的性能。

1)查看系统设置

<!--查看全局的系统状态-->
mysql> show global variables\G
mysql> show global variables like ‘%log%‘;
<!--查看当前会话的系统状态-->
mysql> show session variables\G
mysql> show session variables like ‘%log%‘;

若要修改上面查看出来的参数,可以在MySQL的主配置文件中的mysqld字段中写入即可,如:binlog_cache_size = 1M。又或者可以在MySQL数据库中进行临时修改:set global binlog_cache_size = 1048576,这种临时修改在MySQL重启后就会失效。

2)查看运行状态

<!--查看全局的运行状态-->
mysql> show global status\G
<!--查看当前会话的运行状态-->
mysql> show session status;
<!--查看MySQL的版本-->
[[email protected] ~]# mysql -V
mysql> status;
mysql> select version();

1、错误日志

在mysql数据库中,错误日志功能是默认开启的。默认情况下,错误日志存储在mysql数据库的数据目录中。错误日志文件通常的名称为hostname.err。其中,hostname表示服务器主机名。 错误日志信息可以自己进行配置的,错误日志所记录的信息是可以通过log-error和log-warnings来定义的,其中log-error是定义是否启用错误日志的功能和错误日志的存储位置,log-warnings是定义是否将警告信息也定义至错误日志中。默认情况下错误日志大概记录以下几个方面的信息:服务器启动和关闭过程中的信息(未必是错误信息,如mysql如何启动InnoDB的表空间文件的、如何初始化自己的存储引擎的等等)、服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的信息,MySQL有很多系统变量可以设置,系统变量设置不同,会导致系统运行状态的不同。因此mysql提供两组命令,分别查看系统设置和运行状态。

一般而言,日志级别的定义没有会话变量都只是在全局级别下定义错误日志的状态:

mysql> show global variables like ‘%log_error%‘;
+---------------------+----------------------------------+
| Variable_name       | Value                            |
+---------------------+----------------------------------+
| binlog_error_action | ABORT_SERVER                     |
| log_error           | /usr/local/mysql/data/mysqld.err |
| log_error_verbosity | 3                                |
+---------------------+----------------------------------+
3 rows in set (0.01 sec)

其中 log_error定义为错误日志文件路径 ,log_error_verbosity值得含义如下:

Verbosity Message
1 Error only
2 Error and warnings
3 Errors, warnings,and notes(default)

错误日志的存放路径在my.cnf的主配置文件中指定,如下:

为了方便维护需要,有时候会希望将错误日志中的内容做备份并重新开始记录,这时候就可以利用MySQL 的FLUSH LOGS 命令来告诉MySQL 备份旧日志文件并生成新的日志文件。备份文件名以“.old”结尾。

删除错误日志
在mysql5.5.7之前:数据库管理员可以删除很长时间之前的错误日志,以保证mysql服务器上的硬盘空间。mysql数据库中,可以使用mysqladmin命令开启新的错误日志。mysqladmin命令的语法如下:mysqladmin –u root –p flush-logs也可以登录mysql数据库中使用FLUSH LOGS语句来开启新的错误日志。 在mysql5.5.7之后:服务器将关闭此项功能。只能使用重命名原来的错误日志文件,手动冲洗日志创建一个新的,方式如下:

[[email protected] ~]# cd /usr/local/mysql/data/
[[email protected] data]# mv mysqld.err{,.old}
[[email protected] data]# mysqladmin -uroot -p flush-logs
Enter password: 

2、二进制日志

二进制日志主要记录MySQL数据库的变化,二进制日志以一种有效的格式,并且是事务安全的方式包含更新日志中可用的信息。二进制日志包含了所有更新了数据或者已经潜在更新了数据。还包含关于每个更新数据库的语句的执行时间,它不包含没有修改任何数据的语句。使用二进制日志的主要目的是最大可能地恢复数据库。

1)启动二进制日志(默认情况下二进制日志是关闭的)

[[email protected] data]# vim /etc/my.cnf      #编辑主配置文件

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
server_id=1
socket=/usr/local/mysql/mysql.sock
log-error=/usr/local/mysql/data/mysqld.err
log-bin=/usr/local/mysql/data/binary_log      #指定二进制日志的路径及名称
expire_logs_days=10         #清除日志的天数
max_binlog_size=100M      #单个日志文件的大小限制,超出会新建一个日志文件
[[email protected] data]# systemctl restart mysqld      #重启MySQL使配置生效
[[email protected] data]# ll | grep binary         #会在指定的路径下生成以下两个文件
-rw-r----- 1 mysql mysql      154 12月 30 20:59 binary_log.000001
-rw-r----- 1 mysql mysql       40 12月 30 20:59 binary_log.index

登录到数据库中也可以查看到,如下:

2)查看二进制日志

MySQL二进制日志存储了所有的变更信息,MySQL二进制日志经常使用。当MySQL创建二进制日志文件时,首先创建一个以’filename’为名称,以’.index’为后缀的文件;在创建一个以’filename’为名称,以’.000001’为后缀的文件。当MySQL服务重启一次,以’.000001’为后缀的文件会增加一个,并且后缀名加1
递增。如果日志长度超过max_binlog_size的上限,也会创建一个新的日志。 Show binary logs;可以查看当前的二进制日志文件个数及其文件名。二进制日志并不能直接查看,如果想要查看日志内容,

可以通过mysqlbinlog命令查看:

mysql> show binary logs;             <!---->
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| binary_log.000001 |       154 |
+-------------------+-----------+
1 row in set (0.00 sec)

也可以退出MySQL在命令行使用mysqlbinlog命令查看:

[[email protected] data]# mysqlbinlog binary_log.000001 

3)删除二进制日志

MySQL的二进制文件可以配置自动删除,同时MySQL提供了手动删除二进制文件的方法:
RESET MASTER:删除所有的二进制日志文件;
PURGE MASTER LOGS:只删除部分二进制日志文件;
Reset master:删除所有二进制日志 ;
Purge master logs to ‘二进制名’ :删除单个二进制日志之前的。

mysql> purge master logs to "binary_log.000003";   <!--删除...03之前的二进制日志文件-->
mysql> purge master logs before ‘20180101‘;    <!--删除2018-01-01之前的日志文件-->

4)通过二进制日志还原MySQL数据

关于通过二进制日志还原的具体过程,还是参考我之前的博文吧!如下:
MySQL的备份与恢复详解

3、事务日志

事务日志(InnoDB特有的日志,因为只有Innodb支持事务)可以帮助提高事务的效率。使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志采用追加的方式,因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事务日志的方式相对来说要快得多。事务日志持久以后,内存中被修改的数据在后台可以慢慢的刷回到磁盘。目前大多数的存储引擎都是这样实现的。 如果数据的修改已经记录到事务日志并持久化,但数据本身还没有写回磁盘,此时系统崩溃,存储引擎在重启时能够自动恢复这部分修改的数据。具有的恢复方式则视存储引擎而定。

1)查看事务日志的定义

mysql> show global variables like ‘innodb_lo%‘;

在上述指令输出的部分内容解释如下:

| innodb_flush_log_at_trx_commit | 1 #在事务提交时innodb是否同步日志从缓冲区到文件
中,当这个值为1(默认值)之时,在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的刷新,性能会很差造成大量的磁盘I/O但这种方式最安全;如果设为2,每次提交事务都会写日志,但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有缓存的,所以这个写入并不能保证数据已经写入到物理磁盘。设置为0,日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。
注:刷写的概念
刷写其实是两个操作,刷(flush)和写(write),区分这两个概念是很重要的。在大多数的操作系统中,把Innodb的log buffer(内存)写入日志(调用系统调用write),只是简单的把数据移到操作系统缓存中,操作系统缓存同样指的是内存。并没有实际的持久化数据。

所以,通常设为0和2的时候,在崩溃或断电的时候会丢失最后一秒的数据,因为这个时候数据只是存在于操作系统缓存。之所以说“通常”,可能会有丢失不只1秒的数据的情况,比如说执行flush操作的时候阻塞了。
总结
设为1当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能。
innodb_locks_unsafe_for_binlog OFF innodb_log_buffer_size 16777216 innodb_log_checksums ON
innodb_log_compressed_pages ON
innodb_log_file_size 50331648 #日志文件大小
innodb_log_files_in_group 2 # DB中设置几组事务日志,默认是2
innodb_log_group_home_dir ./ #定义innodb事务日志组的位置,此位置设置默认为MySQL的datadir 。

每个事务日志都是大小为50兆的文件(不同版本的mysql有差异): 在mysql中默认以ib_logfile0,ib_logfile1名称存在。

<!---->

原文地址:https://blog.51cto.com/14154700/2463221

时间: 2024-07-31 06:32:54

MySQL日志详解(未完待续)的相关文章

MySql日志详解及应用实战

1.mysql主从有主-从.主-主形式 其中主从形式,主负责写入,从负责读取,主数据库如果挂掉则将另一台从数据库提升为主,更换主库速度较慢 主主形式用于搜索引擎,与主从的区别为,当有数据写入时,如果写入数据库A成功则默认A为主库,一旦写入A异常则立即更换B库写入,此时B库就提升为主库,与主从形式相比,因为不存在严格的主从关系,所以更换主库速度快.缺点是因为两台数据库都可以变更数据,容易导致数据紊乱(主要表现在自增主键). 多台写入导致自增主键紊乱可以通过 修改自增主键自增量(如有2台数据库,可以

一篇文章让Oracle程序猿学会MySql【未完待续】

一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方面和难度方面都比MySql要高一些,所以精通Oracle的DB在学习MySql的时候,没有必要从头到尾再去搞一遍,只需要掌握两者的用法区别即可.故本篇文章就针对Oracle和MySql的区别来把MySql的知识掌握住,在文章中,实例都是MySql环境下的实例,而Oracle可能知识一句话来概括,所以

06 : mysql 的 binlog 日志 和slow慢日志 详解

mysql 的 binlog 日志 和slow慢日志 详解 mysql一般常用的日志有三种:1:error错误日志2: binlog日志3:slow日志 下面将详细解释这三种日志: 1.错误日志记录MySQL启动或工作过程中,数据库状态信息,默认就是开启的,数据路径下$hostname.err.也可以指定错误路径:log_error=/var/log/mysql3306.log 2.二进制binlog日志(1)他记录了什么?记录了所有的数据库修改类的命令:DDLDCLDML (2)二进制日志记录

编译安装MariaDB 未完待续

二进制格式 下载mariadb lftp 172.16.0.1:/pub/Sources/6.x86_64/mariadb>get mariadb-5.5.36-linux-x86_64.tar.gz 解压mariadb tar xvf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local 创建软链接 创建系统用户 创建mysql目录 初始化脚本 查看初始化后的脚本 创建配置文件脚本 复制配置文件脚本 复制服务类脚本 修改配置文件 datadir =

听风讲MVC丶 —— 一言不合就撸码 (未完待续&#183;&#183;&#183;&#183;&#183;&#183;)

     希望你看了此小随 可以实现自己的MVC框架     也祝所有的程序员身体健康一切安好                                                                                                                                                ——久伴深海丶默 1.什么是前端控制器(font controller).Java Web中的前端控制器是应用的门面,

【甘道夫】HBase基本数据操作详解【完整版,绝对精品】

引言 之前详细写了一篇HBase过滤器的文章,今天把基础的表和数据相关操作补上. 本文档参考最新(截止2014年7月16日)的官方Ref Guide.Developer API编写. 所有代码均基于"hbase 0.96.2-hadoop2"版本编写,均实测通过. 欢迎转载,请注明来源: http://blog.csdn.net/u010967382/article/details/37878701 概述 对于建表,和RDBMS类似,HBase也有namespace的概念,可以指定表空

MySQL状态变量详解

MySQL状态变量详解 mysql的状态变量(status variables)记录的mysql服务器的运行状态信息.查看语法如下: SHOW [GLOBAL | SESSION] STATUS; SHOW STATUS命令会显示每个服务器变量的名字和值,状态变量是只读的.我们可以在MySQL客户端下运行SHOW STATUS或者在命令行运用mysqladmin extended-status来查看这 些变量.如果使用SQL命令,可以使用LIKE或者WHERE来限制结果.LIKE可以对变量名做标

mysql索引详解,摘自《MySQL 5权威指南》

本文介绍了数据库索引,及其优.缺点.针对MySQL索引的特点.应用进行了详细的描述.分析了如何避免MySQL无法使用,如何使用EXPLAIN分析查询语句,如何优化MySQL索引的应用.本文摘自<MySQL 5权威指南>(3rd)的8.9节.(2007.07.05最后更新)        索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.注:[1]索引不是万能的!索引可以加快数据检索操作,但会使数据修改操作变慢.每修改数据记录,索引

MySQL安装详解

MySQL安装详解 [下载地址:http://dev.mysql.com/downloads/] 参考文献:http://dev.mysql.com/doc/refman/5.1/zh/installing.html 步骤1:选择安装类型 有3种安装类型:Typical(典型安装).Complete(完全安装)和Custom(定制安装). Typical(典型安装)安装只安装MySQL服务器.mysql命令行客户端和命令行实用程序.命令行客户端和实用程序包括mysqldump.myisamchk