Mysql文件

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: Mysql文件包括:参数文件、日志文件、socket文件、pid文件、mysql表结构文件、存储引擎文件、参数文件、日志文件,通过了解mysql的文件相关组成,我们可以知道mysql的组成。

一、Mysql相关文件

参数文件:告诉mysql实例启动时在哪里可以找到数据库文件,并指定初始化参数

日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件,如错误日志文件、二进制日志文件、慢查询日志文件、查询日志文件等。

socket文件:当用unix域套接字方式进行连接时需要的文件

pid文件:MySQL实例的进程pid文件

mysql表结构文件:用来存储mysql表结构定义的文件

存储引擎文件:真正存储记录和索引等数据

参数文件:通常分为静态参数和动态参数

其中静态参数类似于只读,不可修改

动态参数可以进行修改,同时修改之后,会生效。

日志文件分为:

错误日志文件 error log

慢查询日志文件 slow log

二进制日志文件 binlog

查询日志文件 log


二、错误日志文件error log

错误日志文件对mysql的启动、运行、关闭过程进行了记录,DBA进行文件排查时首先查询该文件以定位问题。

可以通过show variables like "log_error"来定位文件。


三、慢查询日志

可帮助DBA定位可能存在问题的sql语句

通常可以在mysql启动时设置一个阀值,将运行时间超过该值的所有sql语句都记录在慢查询日志文件中。参数:log_query_time,默认值为10秒。从mysql5.1开始,log_query_time开始以微秒记录sql运行的时间。

在默认情况下,mysql数据库并不启动慢查询日志,用户需要手工将这个参数设置为on。

MySQL5.6.5版本开始,log_throttle_queries_not_using_indexes用来记录慢sql未使用sql的次数,如果没有这个值,慢sql打印的日志文件不断增大,因此为了避免此种情况,DBA可通过此参数进行设置。

mysqldumpslow日志文件

查询执行时间最长的10条sql语句:

mysqldumpslow -s al -n 10 日志文件.log

slow_log表的定义使用的是csv引擎,对大数据量下的查询效率不高。

slow_query_type:

0表示不将sql打印到slow_log

1表示根据运行时间将sql记录到slow_log

2表示根据逻辑I/O次数将sql记录到slow_log

3表示根据运行时间+逻辑IO次数将sql记录到slow_log


四、查询日志

主机名.log,从mysql5.1开始,可以将查询日志的记录放入mysql架构下的general_log表中。


五、binglog二进制日志文件

记录了对mysql数据库执行更改的所有操作,但不包括select和show这类操作。

二进制文件的作用:

恢复:比如全备文件恢复后,用户可以通过二进制文件进行point-in-time的恢复。

复制:通过复制和执行二进制日志文件使一台远程的mysql数据库与一台mysql数据库进行实时同步。

审计

通过配置参数:log-bin [=name] 可以启动二进制日志,如果不指定则默认二进制日志文件名为主机名,后缀为二进制日志的序列号。比如:bin_log.00001、

bin_log.index为索引文件

binlog在配置文件中的参数:

max_binlog_size 最大binlog大小,默认1.1G,超过该值会产生新的binlog文件,后缀+1

binlog_cache_size,基于会话,默认大小32KB

sync_binlog =[N]表示每写缓冲多少次就同步到磁盘,默认值为0,如果使用innodb存储引擎进行复制,并且想得到最大的高可用性,建议,将该值设置为on。配合XA使用。

binlog-do-db

binlog-ignore

log-slave-update

binlog_format:记录二进制日志的格式

分为三种:

statement、row、mixed

statement:采用逻辑sql语句记录

row:记录表更改的数据

mixed:默认情况下使用statement进行记录,但在一些情况下会使用row格式:

1)表引擎为NDB,对表中的DML都会以ROW记录

2)使用UUID()、USER()、CURRENT_USER()、FOUND_ROES()、ROW_COUNT()邓不确定函数

3)使用insert delay语句

4)使用了用户定义的函数(UDF)

5)使用了临时表

设置方式,比如设置为row格式:

set @@session.binlog_format='ROW';

查看binlog设置格式:

select @@session.binlog_format;

设置全局的binlog格式:

set GLOBAL binlog_format='ROW';


六、套接字文件

可由参数socket控制,一般在/tmp目录下,名为mysql.sock。


七、pid文件

当mysql实例启动时,会将自己的进程id写入到pid文件,该文件可由参数pid_file控制,默认在数据库目录下,名为主机名.pid。


八、表结构定义文件

.frm文件,每个表都会有与之对应的frm文件,这个文件记录了该表的表结构定义。

frm文件还用来存放视图定义,如用户创建了一个v_a视图,那么对应地会产生一个v_a.frm文件,用来记录视图定义,该文件是文本文件,以v_a.frm为例,可以通过cat v_a.frm命令查看v_a.frm。

所有未提交的二进制日志会被记录到一个缓冲中去,等该事务提交时直接将缓冲中的二进制日志写入到二进制文件,而该缓存的大小由bin_log_cache_siz决定,默认32KB。


九、innodb的引擎文件

表空间文件和重做日志文件

表空间文件

innodb采用将存储的数据按表空间tablespace进行存放的设计,在默认设置下会有一个初始化大小为10MB,名为ibdata1的文件,该文件就是默认的表空间文件tablespace file,用户可以通过参数innodb_data_file_path对其进行设置,格式:

innodb_data_file_path=datafile_space1[;datafile_spec2]…

设置innodb_data_file_path参数后,所有基于innodb存储引擎的表的数据都会记录到该共享表空间中。若设置了参数innodb_file_per_table,用户可以将每个基于innodb存储引擎的表产生一个独立表空间,后缀名格式.ibd。

单点的表空间文件仅存储该表的数据、索引和插入缓冲bitmap等信息,其余信息还是存放在默认表空间中。

重做日志文件redo log file

每个innodb存储引擎至少有一个重做日志文件组,每个文件组下至少有2个重做日志文件,如默认的ib_log_file0、ib_log_file1。

参数影响:

innodb_log_file_size 重做日志大小,1.2.x版本将该限制扩大为512G

innodb_log_file_in_group 重做日志个数,默认2个。

innodb_mirrored_log_groups 镜像组数,默认1,表示只有一个日志文件组,没有镜像,如果磁盘本身做了高可用,则可以不开启重做日志镜像功能。

innodb_log_group_home_dir 目录,默认./。

如果重做日志设置太小,则频繁发生Asyncheckpoint,导致性能抖动。

如果重做日志超过检查点的阀值,则必须将缓冲池中的脏页列表中的部分脏数据页写回磁盘,这时会导致用户线程阻塞。

重做日志条目的组成:

重做日志类型、空间ID、页的偏移量、每个重做日志的数据部分

redo_log_type:占用1字节,表示重做日志的类型

space 表示表空间的ID,但用压缩的方式,因此占用的空间可能小于4字节

page_no:表示页的偏移量,同样采用压缩的方式

redo_log_body:表示每个重做日志的数据部分,恢复时需要调用相应的函数进行解析。

重做日志先写入到 redo log buffer,然后按照一定的条件顺序写入日志文件。512个字节(扇区),写入的最小单位。

触发写磁盘的过程是由参数innodb_flush_log_at_trx_commit控制,表示在提交时,处理重做日志的方式。

0:当提交事务时,并不将事务的重做日志写入磁盘上的日志文件

1:表示执行commit时将重做日志缓冲同步写到磁盘

2:表示将重做日志异步写入到磁盘

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
JSON 关系型数据库 数据库
【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】
【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】
【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】
|
27天前
|
存储 关系型数据库 MySQL
面试题MySQL问题之FastDFS中的文件重复上传如何解决
面试题MySQL问题之FastDFS中的文件重复上传如何解决
23 1
|
1月前
|
关系型数据库 MySQL Java
|
2月前
|
存储 关系型数据库 MySQL
|
2月前
|
存储 关系型数据库 MySQL
|
2月前
|
存储 关系型数据库 MySQL
关系型数据库mysql日志和临时文件
【6月更文挑战第15天】
46 4
|
2月前
|
存储 关系型数据库 MySQL
关系型数据库mysql文件系统兼容性
【6月更文挑战第14天】
115 3
|
2月前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用问题之假如mysql的binlog有很多个文件,按什么顺序扫描
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
存储 DataWorks 关系型数据库
DataWorks产品使用合集之在使用数据集成中的同步任务从mysql同步表到oss,存储为csv时,最终生成的文件中没有表头,这个属性可以在哪里配置么
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
3月前
|
关系型数据库 MySQL 数据处理
实时计算 Flink版产品使用合集之在同步MySQL的时候卡在某个binlog文件处如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
实时计算 Flink版产品使用合集之在同步MySQL的时候卡在某个binlog文件处如何解决