加入收藏 | 设为首页 | 会员中心 | 我要投稿 十堰站长网 (https://www.0719zz.com/)- 混合云存储、网络、视频终端、云计算、媒体处理!
当前位置: 首页 > 数据库 > MySql > 正文

MySQL日志详解

发布时间:2023-02-16 13:49:36 所属栏目:MySql 来源:互联网
导读:前言 MySQL日志记录了MysqL数据库日常操作和错误信息。MysqL有不同类型的日志文件(各自存储了不同类型的日志),从日志当中可以查询到MysqL数据库的运行情况、用户的操作、错误的信息等。 MysqL的日志分为以下四大类: 错误日志:记录MysqL服务的启动,运行

  MysqL> set global long_query_time=0.0001;
  在上面的定义中,global表示全局生效,还有一个选项是session,表示仅在当前会话生效,其区别是,session在退出当前会话后就会被重置,global则是在重启MysqL服务后才会被重置,而方法1中写入配置文件中的方法,则是真正的永久生效。
 
  注意:如果主配置文件中定义了long_query_time的值,并且MySQL命令行中使用set指令又定义了long_query_time的值,则配置文件中定义的值优先生效。
 
  修改后的相关设置如下:
 
  MySQL日志详解
 
  在终端命令行使用MysqLdumpslow命令工具查看慢查询日志:
 
  若想要查询到慢查询日志,必须保证两点,首先是将慢查询的超时时间设置的短一些,比如我在上面设置为了0.0001,只要查询的时间超过了这个值,则被定义为慢查询。(为了验证效果,在生产环境中还是要结合实际情况)。第二呢,就是在开启慢查询后还需要执行几条查询语句,以便产生日志记录信息(自己随便查询两句吧)。
 
  MySQL日志详解
 
  MysqLdumpslow指令的部分选项解释:
 
  MySQL日志详解
 
  使用选项查看慢查询日志:
 
  [root@MysqL data]# MysqLdumpslow -t 2 -a -s c MysqL-slow.log
  #以次数来排序,查询前两条,并且显示语句的所有内容
  5、数据文件
  在MysqL 中每一个数据库都会在定义好(或者默认)的数据目录下存在一个以数据库名字命名的文件夹,用来存放该数据库中各种表数据文件。不同的MysqL 存储引擎有各自不同的数据文件。如MyISAM 用“.MYD”作为扩展名,Innodb 用“.ibd”,Archive 用“.arc”,CSV 用“.csv”,等等。
 
  “.frm”文件 与表相关的元数据(Meta)信息都存放在“.frm”文件中,包括表结构的定义信息等。不论是什么存储引擎(MysqL常用的两个存储引擎是MyISAM和InnoDB),每一个表都会有一个以表名命名的“.frm”文件。所有的“.frm”文件都存放在所属数据库的文件夹下面。
 
  MyISAM数据库表文件
 
  .MYD文件:表数据文件;.MYI文件:索引文件
  “.MYD”文件 “.MYD”文件是MyISAM存储引擎专用,存放MyISAM 表的数据。每一个MyISAM 表都会有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹下,和“.frm”文件在一起
  “.MYI”文件 “.MYI”文件也是专属于MyISAM 存储引擎的,主要存放MyISAM 表的索引相关信息。对于MyISAM 存储来说,可以被cache 的内容主要就是来源于“.MYI”文件中。每
  一个MyISAM 表对应一个“.MYI”文件,存放于位置和“.frm”以及“.MYD”一样。
  Innodb数据库表文件
  InnoDB采用表空间(tablespace)来管理数据,存储表数据和索引。
 
  .ibd文件:单表表空间文件,每个表使用一个表空间文件(file per table),存放用户数据库表数据和索引。
  InnoDB共享表空间(即InnoDB文件集,ibfile set):ibdata1、ibdata2等,存储InnoDB系统信息和用户数据库表数据和索引,所有表共用。
  “.ibd”文件和ibdata 文件 这两种文件都是存放Innodb 数据的文件,之所以有两种文件来存放Innodb 的数据(包括索引),是因为Innodb 的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据。独享表空间存储方式使用“.ibd”文件来存放数据,且每个表一个“.ibd”文件,文件存放在和MyISAM数据相同的位置。
  如果选用共享存储表空间来存放数据,则会使用ibdata 文件来存放,所有表共同使用一个
  (或者多个,可自行配置)ibdata 文件。 ibdata 文件可以通过innodb_data_home_dir 和innodb_data_file_path两个参数共同配置组成, innodb_data_home_dir 配置数据存放的总目录, 而innodb_data_file_path 配置每一个文件的名称。 innodb_data_file_path 中可以一次配置多个ibdata 文件。文件可以是指定大小,也可以是自动扩展的,但是Innodb 限制了仅仅只有最后一个ibdata 文件能够配置成自动扩展类型。当我们需要添加新的ibdata 文件的时候,只能添加在innodb_data_file_path配置的最后,而且必须重启MysqL 才能完成ibdata 的添加工作。不过如果我们使用独享表空间存储方式的话,就不会有这样的问题。
  总结
  共享表空间以及独占表空间都是针对数据的存储方式而言的。 共享表空间: 某一个数据库的所有的表数据,索引文件全部放在一个文件中。 独占表空间: 每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件。其中这个文件包括了单独一个表的数据内容以及索引内容。
 
  两者之间的优缺点
  共享表空间:
  优点: 可以放表空间分成多个文件存放到各个磁盘上。数据和文件放在一起方便管理。
  缺点: 所有的数据和索引存放到一个文件中,多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日值系统这类应用最不适合用共享表空间。
  独立表空间:
  优点:
 
  每个表都有自已独立的表空间。
  每个表的数据和索引都会存在自已的表空间中。
  可以实现单表在不同的数据库中移动。
  空间可以回收
  a) Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。
  b)对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。
  缺点: 单表增加过大,如超过100个G。 相比较之下,使用独占表空间的效率以及性能会更高一点。
  1)查看当前数据库的表空间管理类型
  MysqL> show variables like '%innodb_file_per%';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | innodb_file_per_table | ON    |
  +-----------------------+-------+
  ON代表独立表空间管理,OFF代表共享表空间管理;(查看单表的表空间管理方式,需要查看每个表是否有单独的数据文件)。
 
  2)修改为Innodb共享表空间
  [root@MysqL ~]# vim /etc/my.cnf        #编辑主配置文件,在MysqLd字段下写入以下配置
  innodb_file_per_table=0   #0为使用共享表空间,1为独占表空间
  innodb_data_file_path=ibdata1:100M:autoextend    #设置一个可自动扩展大小,尺寸为100M的数据文件
  innodb_data_home_dir=/usr/local/MysqL/data #定义共享表空间默认存放路径
  [root@MysqL ~]# systemctl restart MysqLd    #启动报错了
  Job for MysqLd.service Failed because the control process exited with error code. See "systemctl status MysqLd.service" and "journalctl -xe" for details.
  查看日志如下:
 
  MySQL日志详解
 
  注:不同版本的MysqL报错略有不同,注意看错误日志的内容。大概意思就是设置的pages页为6400,超过了它的最大值4864,那么算一下,设置的初始大小100M,pages大小就是6400,则表示1M=64pages,它的最大值是4864,也就是说,我们设置初始大小最大可以是4864/64=76M。
  再次修改配置文件如下:
 
  [root@MysqL ~]# vim /etc/my.cnf        #再次修改主配置文件
  innodb_data_file_path=ibdata1:76M:autoextend
  #修改初始大小为76M
  [root@MysqL ~]# systemctl restart MysqLd          #再次重启MysqL服务
  #同样,如果还是启动失败,则再次查看错误日志,是否pages页大小设置的还是不合理
  3)查看修改后数据库的表空间管理类型
  MySQL日志详解

(编辑:十堰站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读