mariadb数据库文件的组成

一、日志文件

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

mariadb数据库文件的组成

log_warnings={1|0}

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

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

mariadb数据库文件的组成

2、查询日志:query log

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

服务器相关的变量

log_output={table|file|none}

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

mariadb数据库文件的组成

general_log

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

general_log_file

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

mariadb数据库文件的组成

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%';

mariadb数据库文件的组成

slow_query_log:{on|off}

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

slow_query_log_file

定义日志文件路径及名称

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

mariadb数据库文件的组成

log_slow_rate_limit

速率

log_slow_verbosity

详细信息

log_slow_filter

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

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

mariadb数据库文件的组成

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%';

mariadb数据库文件的组成

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

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

mariadb数据库文件的组成

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

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

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

或使用

1
# cat mariadb-bin.index

mariadb数据库文件的组成

查看正在使用的日志

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

mariadb数据库文件的组成

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

mariadb数据库文件的组成

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会重新创建一个日志开始继续记录。不过偶尔也有超出该设置的binlo*生,一般都是因为在即将达到上限时,产生了一个较大的事务,为了保证事务安全,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%';

mariadb数据库文件的组成

设置日志的数量

innodb_log_files_in_group

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

mariadb数据库文件的组成

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%';

mariadb数据库文件的组成

设置共享表空间

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,如需转载请自行联系原作者