mysql 体系结构以及各种文件类型学习汇总

1、mysql体系结构

由数据库和数据库实例组成,是单进程多线程架构。

数据库:物理操作系统文件或者其他文件的集合,在mysql中,数据库文件可以是frm、myd、myi、ibd等结尾的文件,当使用ndb存储引擎的时候,不是os文件,是存放于内存中的文件。

数据库实例:由数据库后台进程/线程以及一个共享内存区组成,共享内存可以被运行的后台线程/进程所共享

2、mysql文件类型

mysql主要文件类型有如下几种:

参数文件:mysql实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类型以及定义作用域。

日志文件:记录mysql对某种条件做出响应时候写入的文件。

Socket文件:当用linux的mysql命令行窗口登录的时候需要的文件。

Pid文件:mysql实例的进程文件。

Mysql表结构文件:存放mysql表结构定义文件。

存储引擎文件:记录存储引擎信息的文件。

3、参数my.cnf

mysql实例启动时,会先读取配置参数文件my.cnf

my.cnf文件中的参数可以分为2中类型:动态(dynamic)和静态(static)

(1) dynamic:可以用过set进行实时修改
(2) static:只能在my.cnf里面修改,restart生效

动态参数意味着可以在mysql 实例运行中修改,set global xxx=value;修改后,别的connection重新进行连接就可以了。
生效范围分为:global和session。

静态的说明在整个mysql实例运行期间不得进行修改,就类似一个只读的read only

4、日志文件

日志文件记录了影响mysql数据库的各种类型活动,常见的日志文件有错误日志 、二进制日志、慢查询日志、全查询日志、redo日志、undo日志

5、错误日志

错误日志对mysql的启动、运行、关闭过程进行了记录,mysql dba在遇到问题的时候,第一时间应该查看这个错误日志文件,该文件不但记录了一些警告信息以及正确信息,这个error日志文件类似于oracle的alert文件,只不过默认情况下是以error结尾。可以通过show variables like ‘log_error’; 查看

当然,也可以在my.cnf里面设置错误日志文件的路径:
log-error = /usr/local/mysql/data/dbdata_3306/mysql.err
我们还可以在错误日志文件里面看到一些数据库启动信息,以及告警信息还有就是报错信息

6、慢查询日志 slow log

慢查询日志就是记录运行较慢的sql语句信息,给sql语句的优化带来很好的帮助,可以设置一个阀值,将运行时间超过该阀值的sql语句的运行信息记录到slow log日志里面去。

开启慢查询和慢查询阀值间隔
slow-query-log=on
long_query_time = 2

通过show variables like ‘long_query_time’; 来查看

另外一个参数是log_queries_not_using_indexes,如果运行的sql没有使用索引,只要超过阀值了也会记录在慢查询日志里面的。

long_query_time=0 (记录所有sql可以做审计),dba可以通过这个审计来推动业务发展,可以知道哪些业务开展的好哪些业务开展的不好,可以通过慢sql可以分析出哪些应用性能较差需要优化改进,dba的最大职能以及贡献就在于通过对数据库的维护来推动业务的发展和进步。从 数据到业务,这是我们需要一直努力的方向

7、全日志查询

记录了对nysql数据库所有的请求信息,不论这些请求信息是否得到了正确的执行。

数据库审计+问题排查跟踪 (损失3%-5%性能)

8、二进制日志

记录了对数据库进行变更的操作,但是不包括select操作以及show操作,因为这类操作对数据库本身没有修改,如果你还想记录select和show的话,你就需要查看前面的全查询日志,另外binlog还包括了执行数据库更改操作时间和执行时间等信息。

二进制的主要作用有如下2个:

(1)、恢复 recovery。某些数据库的恢复需要二进制日志,在全库文件恢复后,可以在此基础上通过二进制日志进行porint-to-time的恢复。

(2)、复制 replication。其原理和恢复类似,通过复制和执行二进制日志使得一台远程的mysql数据库(slave)于一台mysql数据库(master)进行实时同步

binlog日志参数:

max_binlog_size
指定了单个二进制文件的最大值,如果超过了这个值,就会产生新的日志文件,后缀名+1,并且记录到.index文件里面。默认值是1G,不过64M是通用的大小设置

binlog_cache_size
使用innodb存储引擎的时候,所有未提交uncommitted的二进制日志会被记录到一个缓存中,等该事务提交时 committed直接将缓冲区中的二进制日志写入二进制日志文件里面,而该缓冲的大小就由 binlog_cache_size来决定,这个缓冲区是基于session的,也就是每一个线程需要事务的时候,mysql都会分配一个 binlog_cache_size的缓存,因此改值设置需要非常小心,不能设置过大,免得内存溢出了

sync_binlog:sync_binlog=N
大概就是表示每次写缓冲N次就同步到磁盘文件中,如果将N设置为1的话,每次都会写入binlog磁盘文件中,这是最保险最安全的,如果N>1,在意外发生的时候,就表示会有N-1个dml没有被写入binlog中,有可能就会发生主动数据不一致的情况。

binlog-do-db、 binlog-ignore-db:
表示需要写入或者忽略写入哪些库的日志,默认为空,表示可以将所有库的日志写入到二进制文件里面。

binlog-format:日志格式

有statement、row、mixed格式

Statement:每一条会修改数据的sql都会记录在binlog中

优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能(相比row能解决多少性能与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于statement产生的日志量,但是考虑到如果带条件的update操作,以及整表删除,alter表等操作,ROW格式会产生大量日志,因此在考虑是否使用ROW格式日志时应该根据应用的实际情况,其所产生的日志量会增加多少,以及带来的IO性能问题)。

缺点:由于记录的只是执行语句,为了这些语句能在slave上正确运行,因此还必须记录每条语句在执行的时候的一些相关信息,以保证所有语句能在slave得到和在master端执行时候相同的结果。另外mysql 的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题(如sleep()函数,last_insert_id(),以及user-definedfunctions(udf)会出现问题)。

Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改。

优点: binlog中可以不记录执行的sql语句的上下文相关的信息,仅需要记录那一条记录被修改成什么了。所以rowlevel的日志内容会非常清楚的记录下每一行数据修改的细节。而且不会出现某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题

缺点:所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如一条update语句,修改多条记录,则binlog中每一条修改都会有记录,这样造成binlog日志量会很大,特别是当执行altertable之类的语句的时候,由于表结构修改,每条记录都发生改变,那么该表每一条记录都会记录到日志中。

Mixedlevel: 是以上两种level的混合使用,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种.新版本的MySQL中队rowlevel模式也被做了优化,并不是所有的修改都会以rowlevel来记录,像遇到表结构变更的时候就会以statement模式来记录。至于update或者delete等修改数据的语句,还是会记录所有行的变更。

9、套接字socket文件

Linux系统下 本地连接mysql可以采用linux域套接字socket方式 ,需要一个套接字socket发文件,可以有参数socket控制,一般默认在/tmp目录

可在my.cnf中配置
socket = /tmp/mysql.sock

也可在数据库中查看

10、pid文件

当mysql实例启动的时候,会将自己的进程id写入一个文件中,该文件即为pid文件,由参数pid_file控制

可在my.cnf中配置
pid-file = /usr/local/mysql/data/mysql.pid

也可在数据库中查看

11、表结构文件

*.frm
*.ibd

12、innodb存储文件

innodb存储引擎在存储设计上模仿了oracle,该文件就是默认的表空间文件,可以通过参数innodb_data_file_path来进行设置,格式如下:

innodb_data_file_path= IBdata1:128M;IBdata2:128M:autoextend

可以看到ibdata1,但是如果设置了innodb_file_per_table为true后,那么表数据文件就会在单独的.ibd文件里面,不在这个ibdata文件里面了。

13、redo文件

所有的数据库都是日志先行,先写日志,再写数据文件,所以才会有redo log的规则。

默认情况下会有2个文件名称分别为ib_logfile0 和ib_logfile1 ,在mysql数据库目录下可以看到这2个文件,这个对innodb存储引擎非常重要,因为它们记录了对于innodb存储引擎的事务日志。

重做日志文件的主要目的是:万一实例或者介质失败media failure,重做日志就可以派上用场,如果数据库由于所在主机掉电导致实例失败,innodb存储引擎会使用重做日志恢复到掉电前的时刻,以此来保证数据的完整性。

每个innodb存储引擎至少有一个重做日志组,每组至少有2个重做日志文件,如默认的ib_logfile0 和ib_logfile1,为了得到更高的可靠性,你可以设置多个组,也可以将每组放在不同的磁盘上面,来提高性能。

LSN logsequence number:

递增产生的,可以唯一的标记一条redo日志,对于我们数据库故障恢复都是非常重要的,可以唯一定位数据库运行状态。

14、undo日志

存在于共享表空间ibdata1里面,有一个回滚段地址,里面存放了头信息,配置头信息,段的头信息,里面存储了与redo相反的数据更新操作,如果rollback的话,就把undo段里面数据回写到数据文件里面。

如果用了独立表空间的话,则直接存储到表私自的空间中,而不存储到共享表空间中。在innodb存储引擎中,undo log用来完成事务的回滚以及MVCC的功能

Redo与undo他们并不是各自独立没有关系的,他们是有关联的,交替合作来保证数据的一致性和安全性。

时间: 2025-01-16 17:01:27

mysql 体系结构以及各种文件类型学习汇总的相关文章

上传附件 文件类型 没有限制 到 mySql中

问题描述 上传附件 文件类型 没有限制 到 mySql中 上传附件,文件类型 没有限制,我现在使用的是二进制的字节流方式,添加到数据库中 数据库字段类型为 longblob 问题出在 保存字节的时候 ,我只把最后 一段字节 保存到了数据库中. 请问高手 我应该怎样把 全部的字节都保存到 数据库中

《Origin 9.0科技绘图与数据分析超级学习手册》一1.3 Origin 9.0子目录及文件类型

1.3 Origin 9.0子目录及文件类型 Origin 9.0科技绘图与数据分析超级学习手册学习Origin,就必须了解其子目录及其文件类型,这样才能在以后的使用过程中达到事半功倍的效果.本节将对Origin 9.0子目录及文件类型进行一个简要的介绍,希望读者能够掌握. 1.3.1 Origin 9.0子目录 在安装的Origin 9.0目录下,含用户子目录共有22个子目录,如图1-3所示. 在Localization 子目录下,存放有Origin的帮助文件,这些帮助文件是以Windows帮

Mysql表的七种类型详细介绍_Mysql

学习Mysql数据库,Mysql表类型都有哪些是一定需要知道的,下面就为您介绍七种Mysql表类型,希望能对您学习Mysql表类型有所帮助. MySQL作为当前最为流行的免费数据库服务引擎,已经风靡了很长一段时间,不过也许也有人对于MySQL的内部环境不很了解,尤其那些针对并发性处理的机制.今天,我们先了解一下Mysql表类型,以及它们的一些简单性质. 截至目前,MySQL一共向用户提供了包括DBD.HEAP.ISAM.MERGE.MyIAS.InnoDB以及Gemeni这7种Mysql表类型.

基于mysql体系结构的深入解析_Mysql

由:连接池组件.管理服务和工具组件.sql接口组件.查询分析器组件.优化器组件.        缓冲组件.插件式存储引擎.物理文件组成. mysql是独有的插件式体系结构,各个存储引擎有自己的特点.             mysql各个存储引擎概述:innodb存储引擎:[/color][/b] 面向oltp(online transaction processing).行锁.支持外键.非锁定读.默认采用repeaable级别(可重复读)通过next-keylocking策略避免幻读.插入缓冲

asp.net文件上传解决方案(图片上传、单文件上传、多文件上传、检查文件类型)_实用技巧

小编之前也介绍了许多ASP.NET文件上传的解决案例,今天来个asp.net文件上传大集合. 1 使用标准HTML来进行图片上传 前台代码: <body> <form id="form1" runat="server"> <div> <table> <tr> <td colspan="2" style="height: 21px" > 使用标准HTML来进

ls -l文件类型

ls -l文件类型[转] Linux文件类型常见的有:普通文件(-).目录(d).字符设备文件(c).块设备文件(b).符号链接文件(l)等:需要注意的是,Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如file.txt.file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件). 1 普通文件 [root@localhost ~]# ls -lh install.lo

如何利用PHP+MYSQL保存和输出文件

本地文件上传到服务器后,服务器的脚本对文件进行保存,一般有两种方式,一种是作为文件保存到机器的特定目录下,但是这里就有很多诸如文件重名带来的种种不便之处,有的程序自动改文件名字,把名字加上上传时间等方法以保证文件名的唯一性,这样失去了文件的原始名字,通过文件名查询特定的文件信息也有很多困难,不利于文件的统一管理:一种是把文件保存到数据库中利用数据库的强大功能,可以方便的实现文件的各种操作.本文采用的是第二种方法. 这一组程序演示了,如何将硬盘的一个文件通过网页,上传到服务器的数据库里面,并且读出

ASP.NET 2.0 HttpHandler实现对某种文件类型权限保护(示例代码下载)

asp.net|示例|下载 学习整理了一下(一). HttpHandlers能够处理对某种特定文件类型的请求. 例如, 在machine.config 文件中默认已经有大部分的系统处理Handlers:<httpHandlers>   <add verb="*" path="*.aspx" type="System..Web.UI.PageHandlerFactory" />   <add verb="*&

delphi的记录型文件类型

一.记录型文件类型文件: 1)可以粗略地理解为数据库,如本地qq程序的中把的一些账号信息集合(账号 ,密码,上次登录时间等 等组成的集合)记录在.dat文件中. 2)记录型文件类型文件VS数据库 相同点:都可以用来记录数据 区别:记录型文件类型文件类似记事本记录数据,导致对数据的填删改 查没有数据库那么方便. 3)delphi记录型文件的定义 第一步: 定义一个记录集 type        MyFile= Record        name :String[20]; //记录集中一定要对字符