mariadb数据库文件的组成

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

一、日志文件

1、错误日志:(error log)

错误日志记录msyql运行过程中所有较为严重的警告和错误信息,以及mariadb server 每一次启动和关闭的详细信息,事件调度运行一个事件时产生的信息,在复制架构中的从服务器上启动从服务器线程时产生的信息 ,在默认情况下,系统错误日志的功能是开启的,错误日志的默认存放位置为数据目录下,以hostname.err命名,但也可以使用log-error[=file_name],修改其放目录和文件名。

服务器相关的变量

log_error = /path/to/error_log_file

错误日志的存放位置

查看错误日志存位置

1
MariaDB [(none)]> show  global  variables  like  '%log_error%' \G

wKiom1NIURDjQstzAAD_XLhj7gc418.jpg

log_warnings={1|0}

是否记录警告信息于错误日志中,1表示记录,0表示不记录。

1
MariaDB [(none)]> show  global  variables  like  '%log_warnings%' \G

wKioL1NIUafDsjndAADYVbQMdEk804.jpg

2、查询日志:query log

查询日志记录mariadb中所有的query,通过--log[=file_name]来打开该功能。由于记录了所有的query,包括所有的select,体积比较大,开启后对性能也有较大的影响,一般只用于跟踪某些特殊的sql性能问题才会短暂打开该功能,默认的查询日志文件名为hostname.log.

服务器相关的变量

log_output={table|file|none}

记录于那里,table与file是可以同时出现,使用分号隔开

wKiom1NIVISjQUfPAADKkW3kPXc731.jpg

general_log

是否启用查询日志,on表示开启,off表示关闭

general_log_file

定义一般查询日志保存的文件

wKioL1NIVJaAkVx6AAETR7FWrBY433.jpg

3、慢查询日志:slow query log

顾名思义,慢查询日志中记录的是执行时间较长的query,也就是我们常说的slow query,通过设--log-slow-querues[=file_name]打开该功能并设置记录位置和文件名,默认文件名为hostname-slow.log,默认目录也是数据目录;其中记录了语句执行的时刻,执行所消耗的时间,执行用户,连接主机等相关信息。

服务器相关的变量

long_query_time

多长时间算慢查(默认时间为秒)

1
2
#查看默认的慢查时限
MariaDB [(none)]> show  global  variables  like  'long_query_time%' ;

wKiom1NIVhCTtS7aAADijqPoLIw489.jpg

slow_query_log:{on|off}

设定是否启用慢查日志;它的输出位置也取决于log_output={table|file|none};

slow_query_log_file

定义日志文件路径及名称

1
MariaDB [(none)]> show  global  variables  like  '%slow_query%' ;

wKioL1NIVjOCibYJAAEvPdXqJ0o586.jpg

log_slow_rate_limit

速率

log_slow_verbosity

详细信息

log_slow_filter

那些日志过滤不记录慢查日志

1
2
MariaDB [(none)]> show  global  variables  like  'log_slow%'
\G

wKiom1NIVyjSYzmeAAJX6v74GTg300.jpg

4、binlog 日志

二进制日志,也就我们常说的binlog,也是mariadb server是最为重要的日志之一。当我们通过“log-bin[=file_name]”打开记录的功能之后,mariadb会将所有修改数据库数据的query以二进制形式记录到日志文件中,当然,日志中并不仅限于query语句这么简单,还包括每一条query所执行的时间,所消耗的资源,以及相关的事务信息;和错误日志一样,binlog记录功能同样需要“log-bin[=file name]”参数的显示指定开户,如果未指定file_name,则会在数据目录下记录为myslq-bin.********(*代表0~9之间的数字,表示该日志的序号。)
查看日志状态
1
MariaDB [(none)]>show variables  like  '%log_bin%' ;

wKioL1NIPVPh-wCWAAFJhkvoCnI528.jpg

注:所有的布尔值(ON|OFF)都可以使用1或0来表示

查看日志生成列表
1
MariaDB [(none)]>show  binary  logs;

wKiom1NIPliSviBJAADn3L5m_tY296.jpg

Log_name:表示日志生成列名的名字

File_size:表示其每一个日志文件的大小

最后一条记录表示当前正在使用的binlog日志文件

或使用

1
# cat mariadb-bin.index

wKioL1NIPsDjIsTJAACLtdQ-Y6g972.jpg

查看正在使用的日志

1
MariaDB [(none)]>show master status;

wKioL1NIQW_Q7jWmAADNylNUUz8962.jpg

File: mariadb-bin.000003:当前记录的日志文件

Position: 312 :日志文件记录到那一个节点(位置)

Binlog_Do_DB: 为那些库记录日志(默认为所有数据库)

Binlog_Ignore_DB: 不为那些库记录日志

查看日志文件内容

#mariadbbinlog ./文件目录(select 语句是不会记录于二进制文件)

--start-time

--start-position

--stop-time

--stop-position

1
# mariadbbinlog --start-datetime="2014-04-11 0:01:59" --stop-datetime="2014-04-11 1:22:12" mariadb-bin.000002

或在数据库中使用

1
MariaDB [(none)]>SHOW BINLOG EVENTS  IN   'mariadb-bin.000002'  from  4 limit  1,2\G

wKioL1NIRSPAG5pgAAHxMP5at6g654.jpg

Log_name:此条log存在那个文件中。

Pos:log在bin-log中的开始位置

Event_type:log的类型信息

Server_id:可以查看配置中的server_id,表示log是那个服务器产生

End_log_pos:log在bin-log中的结束位置

Info:log的一些备注信息,可以直观的看出进行了什么操作(GTID)

删除日志
1
2
MariaDB [(none)]>reset master;
MariaDB [(none)]>purge  binary  to  'mariadb-bin-1.0000000001'
或自动删除5天之前的数据
1
2
MariaDB [(none)]> show  global  variables  like  '%expire%' ;
MariaDB [(none)]> set  global  expire_logs_days=5;

binlog的格式

1
2
3
4
5
6
7
8
9
#查看默认的日志格式
MariaDB [(none)]>show variables  like  '%format%' ;
#可以有三种格式(binlog_format):STATEMENT,ROW,MIXED
MariaDB [(none)]> SET  SESSION binlog_farmat= 'statement'
#设置当前会话级别的基于语句(statement)
MariaDB [(none)]> set  SESSION format= 'ROW'
#设置当前会话级别的基于行(不确定的函数)(row )
MariaDB [(none)]> SET  SESSION bin_format= 'mixed'
#设置当前会话级别的混合模式(前两者结合)(MIXED)

服务器相关的日志变

max_binlog_size

binlog的最大存储上限;当日志达到该上限时,mariadb会重新创建一个日志开始继续记录。不过偶尔也有超出该设置的binlog产生,一般都是因为在即将达到上限时,产生了一个较大的事务,为了保证事务安全,mariadb不会将同一个事务分开记录到两个binlog中。

sync_binlog=0

表示不靠时间同步,仅在事务在提交时同步,依赖于autocommit

log_bin:{on|off}

还可以是指定文件路径,重启后生效

sql_log_bin:{on|off}

会话级别关闭二进制文件
1
MariaDB [(none)]>setsession sql_log_bin=0;

如果设置了OFF则表示关闭记录日志功能。(仅当前会话有效)

max_binlog_cache_size:

二进制日志缓冲空间大小。仅用于缓冲事件务类一语句(单位字节)

滚动日志

  • 大小
  • 指定时间
  • 重启或flush logs后会自动回滚
binary log index
索引日志记录点或数据库中使用show binary logs;

binary日志文件内容的格式

  • 事件发生的日期和时间

  • 服务器ID

  • 事件的结束位置

  • 事件的类型

  • 原服务器生成的此事件时的线程

  • 语句时间戳和写入二进制文件的时间差

  • 错误代码

  • 事件内容

  • 事件位置,相当于下个事件的开始位置

5、Innodb的在线redo日志:innodb redo log

Innodb是一个事务安全的存储引擎,其事务安全性主要就是通过在线redo日志和记录在表空间中的undo信息来保证的,redo日志记录了Innodb所做的所有物理变更和事务信息,通过redo日志和undo信息,Innodb保证了在任何情况下的事务安全性。Innodb的redo日志同样默认存放在数据目录下

更改设置日志的存放位置

innodb_log_group_home_dir

1
2
#查看默认日志存放位置
MariaDB [(none)]> show variables  like  '%innodb_log_group_home_dir%' ;

wKiom1NITHLjbtl7AADtUbnqoso391.jpg

设置日志的数量

innodb_log_files_in_group

1
2
#查看innodb_log_file默认分组
MariaDB [(none)]> show variables  like  '%innodb_log_files_in_group%' ;

wKiom1NITAyzbOdEAADoNfdEILs188.jpg

6、事务日志
保证事务一致性的,但事务日志和二进制日志都可以将某个操作重新来一遍的日志

二、数据文件

1、数据文件

在mariadb中每一个数据库都会在定义好的数据目录下存在一个以数据库名字命名的文件夹,用来存放该数据库中各种表数据文件。不同的mariadb存储引擎有各自不同的数据文件,存放位置也有区别,多数存储引擎的数据文件都存放在和myISAM数据文件位置相同的目录下,但是每个数据文件的扩展名却各不一样。如myISAM用.MYD作为扩展名,Innodb用.ibd,Archive用.arc,CSV用.csv等。
⑴、.frm文件
与表相关的元数据(meta)信息都存放在.frm文件中,包括表结构的定义信息等。不论是什么存储引擎,每一个表都会有一个以表名命名的.frm文件。所有的.frm文件都存放在所属数据的文件夹下面。
⑵、.MYD文件
.MYD文件是myISAM存储引擎专用,存放myISAM表的数据,每一个myISAM表都会有一个.MYD文件与之相对应,同样存放于所属数据库的文件夹下,和.frm文件在一起。
⑶、.MYI文件
该文也是专属于myISAM存储引擎的,主要存放myISAM表的索引相关信息。对于myISAM存储来说,可以被cache的内容主要就是来源于.MYI文件中,每一个myISAM表对应一个.MYI文件,存放于位置和.frm以及.MYD一样。
⑷、.ibd文件和ibdata文件

这两种文件都是存放在Innodb数据的文件,之所以有两种文件来存放Innodb的数据(包括索引),是因为Innodb的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据,独享表空间存储方式使用 .ibd文件来存放数据,且每个表一个.ibd文件,文件存放在和myISAM数据相同的位置,如果选用共享存储表空间来存储数据,则会使用ibdata文件来存放,所有表共同使用一个(或者多个,可自行分配)ibdata文件,ibdata文件可以通过innodb_data_home_dir和innodb_data_file_path 两个参数共同配置组成,innodb_data_host_dir配置数据存放的放的总目录,而innodb_data_file_path配置每一个文件的名称,当然,也可以不配置innod-data_home_dir而直接在innodb_data_file_path参数配置的时使用绝对路径来完成配置。innodb_data_file_path 中可以一次配置多个 ibdata 文件。文件可以是指定大小,也可以是自动扩展的,但是 Innodb 限制了仅仅只有最后一个 ibdata 文件能够配置成自动扩展类型。当我们需要添加新的 ibdata 文件的时候,只能添加在 innodb_data_file_path配置的最后,而且必须重启 mariadb 才能完成 ibdata 的添加工作。不过如果我们使用独享表空间存储方式的话,就不会有这样的问题,但是如果要使用裸设备的话,每个表一个裸设备,可能造成裸设备数量非常大,而且不太容易控制大小,实现比较困难,而共享表空间却不会有这个问题,容易控制裸设备数量。

表空间:由Innodb管理的特有格式数据文件,内部可同时存储数据和索引,每个表数据库目录下存储两个文件

tb_name.frm:与表相关的元数据(meta)信息都存放在.frm文件中,包括表结构的定义信息等

tb_name.ibd:独享表空间存储方式使用 .ibd文件来存放数据,且每个表一个.ibd文件

设置独立表空间

innodb_file_per_table=ON

1
2
#查看默认表空间类型
MariaDB [(none)]> show variables  like '%innodb_file_per_table%' ;

wKioL1NITYujJLbAAADXebwyZzc731.jpg

设置共享表空间

innodb_file_per_table=OFF

每张表都会有一个独有格式定义文件:tb_name.frm,还有一个默认位于数据目录下共享的表空间文件:ibddata#(#代表数字)

2、Replication 相关文件

⑴、master.info文件                                                                       master.info文件存在于Slave端的数据目录下,里面存放了该Slave的Master端的相关信息,包括Master的主机地址,连接用户,连接密码,连接端口,当前日志位置,己经读取到的日志位置等信息。
⑵、relay log 和 relay log index

relay_log文件用于存放Slave端I/O线程从Master端所读到的binary log信息,然后由Slave端SQL线程从该realy log中读取并解析相应的日志信息,转化成Master所执行的sql语句,然后在Slave端应用。

relay_log_index

文件的功能类似于mysql-bin.index同样是记录存放位置的绝对路径,只不过他所记录的不是Binary log,而是relay_log.

⑶、relay_log_info_file
类似于master.info,它存放通过Slave的I/O线程写入到本地的relay_log的相关信息。供Slave端的sql线程以及某些管理操作随时能够获取当前复制的相关信息。
⑷、relay_log_purge={on|off}
是否清理不再需要中继日志
三、其他文件
1、system config file
mariadb的系统配置文件一般都是“my.cnf”,unix/linux下默认存放在/etc目录下,“my.cnf”文件中包含多种参数选项组(group),每一种参数组都是通过中括号给定了固定的组名,如[mysqld]组中包括了mysqld服务启动时候的初始化参数,[client]组中包括着客户端工具程序可以读取参数,此外还有其他针对各个客户端软件的特定参数组,如mysql程序使用的[mysqld],mysqlcheck使用的[mysqlcheck]。
2、pid file
pid file是mysql应用程序在unix/linux环境下的一个进程文件,和许多的其他的unix/linux服务端程序一样,存放着自己进程的id.
3、socket file
socket文件也是在unix/linux环境下才有用的,用户在unix/linux环境下客户端连接可以不通过TCP/IP网络而直接使用unix Socket来连接mysql.

=================完=========================










本文转自 jinlinger 51CTO博客,原文链接:http://blog.51cto.com/essun/1394517,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
Kubernetes 关系型数据库 MySQL
ChaosBlade常见问题之数据库进行故障注入报错ibdata1文件异常如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
25 1
|
2月前
|
监控 关系型数据库 数据库
OceanBase数据库常见问题之文件存在但是数据库提示文件不存在如何解决
OceanBase 是一款由阿里巴巴集团研发的企业级分布式关系型数据库,它具有高可用、高性能、可水平扩展等特点。以下是OceanBase 数据库使用过程中可能遇到的一些常见问题及其解答的汇总,以帮助用户更好地理解和使用这款数据库产品。
|
26天前
|
JSON 关系型数据库 数据库
【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】
【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】
【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】
|
1月前
|
JSON 关系型数据库 数据库
【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】
【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】
|
2月前
|
SQL Java 数据库连接
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
19 0
|
4月前
|
网络协议 关系型数据库 MySQL
如何搭建MariaDB并实现无公网ip环境远程连接本地数据库
如何搭建MariaDB并实现无公网ip环境远程连接本地数据库
80 0
|
10天前
|
关系型数据库 MySQL Linux
Centos7安装mariadb数据库
该文介绍了如何在CentOS7上安装MariaDB数据库。MariaDB是MySQL的开源分支,旨在保持与MySQL的兼容性。安装过程包括配置yum源,执行安装命令,启动数据库服务,并设置开机启动。首次启动时,数据库未设置密码,用户可直接回车。
55 0
|
10天前
|
NoSQL MongoDB 数据库
MongoDB数据恢复—MongoDB数据库文件被破坏的数据恢复案例
服务器数据恢复环境: 一台Windows Server操作系统服务器,服务器上部署MongoDB数据库。 MongoDB数据库故障&检测: 工作人员在未关闭MongoDB数据库服务的情况下,将数据库文件拷贝到其他分区。拷贝完成后将原MongoDB数据库所在分区进行了格式化操作,然后将数据库文件拷回原分区,重新启动MongoDB服务,服务无法启动。
|
15天前
|
存储 关系型数据库 MySQL
如何处理爬取到的数据,例如存储到数据库或文件中?
处理爬取的数据,可存储为txt、csv(适合表格数据)或json(适合结构化数据)文件。若需存储大量数据并执行复杂查询,可选择关系型(如MySQL)或非关系型(如MongoDB)数据库。以MySQL为例,需安装数据库和Python的pymysql库,创建数据库和表,然后编写Python代码进行数据操作。选择存储方式应考虑数据类型、数量及后续处理需求。
21 1
|
2月前
|
SQL Java 数据库连接
springboot解析txt文件顺便加到数据库中(nohup文件)
springboot解析txt文件顺便加到数据库中(nohup文件)
113 1

推荐镜像

更多