Innodb学习(二)-----MySql数据库和Innodb引擎文件

一、MySql数据库和Innodb引擎的各种类型文件,归类下可以分为:

    1)参数文件  

        告诉mysql启动实例在哪儿可以找到数据库数据文件,并指定某些参数的初始值。

    2)日志文件

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

    3)socket文件

        当用Unix域套接字连接Mysql的时候用到的文件。

        注:在Linux和Unix环境下,可以使用Unix域套接字来连接数据库实例,Unix套接字并不是一种网络协议,所以当使用Unix套接字连接Mysql时,需要Mysql客户端和数据库实例在同一台服务器上,
        用户可以在配置文件中指定套接字文件,如:--socket=/tmp/mysql.sock,当数据库实例启动后可以用以下命令连接:mysql -uRoot -S /tmp/mysql.sock

        查看套接字文件配置:show variables like 'socket';

    4)pid文件

        Mysql进程的ID文件。

    5)Mysql的表结构文件

        用来存放表结构定义的文件

    6)存储引擎文件
    
        每个存储引擎都会有自己的文件存储各种数据,包括记录和索引等数据。
    
二、分开详细介绍各类文件

    1)参数文件
    
        -在默认情况下,Mysql会按照一定的顺序在指定的位置读取,用户可以通过命令mysql --help | grep my.cnf 来寻找即可。
    
        -查看具体配置项,可以通过show variables命令,各版本都适用的方法,在5.1版本后,还可以通过informa_schema框架下的GLOBAL_VARIABLES视图查看。
    
        -参数文件中的参数类型:动态参数和静态参数。静态参数是在整个实例周期内不允许更改的,就好像是只读的文件。动态参数可以在实例运行中,通过set命令来进行修改。
        set命令中又有两个核心的关键字global和session,global标志参数的修改是针对实例的整个生命周期,而session则是针对的单次会话。如果重开一个会话,session设置的参数就会失效。
        global示例:
        set @@global.read_buffer_size=524288  -设置参数
        select @@global.read_buffer_size;     -查询参数
        session示例同上。
    
    2)日志文件    
    
        -错误日志
        
            对Mysql实例的启动、运行、结束的过程进行记录。当Mysql数据库启动异常,首先就应该去查看该日志。该文件不仅记录了错误日志,还记录一些警告信息。查着错误日志配置
            可以通过命令:show variables like 'log_error';
        
        -慢查询日志
        
            可以定位一些有问题的SQL问题,从而进行SQL层面上的优化。可以在Mysql启动时,设置一个查询阈值,将运行时间超过(不包含等于,必须大于)此阈值的语句记录到该日志中。然后可以通过该日志找到这些
            查询较慢的SQL,并加以分析和优化。设置的参数为:long_query_time,默认为10s,查询命令:show variables like 'long_query_time';
            
            在默认情况下,Mysql是不启动的慢查询日志的,可以手动设置为ON,查看是否打开的命令:show variables like 'log_slow_queries'
            
            另一个相关参数,log_queries_not_using_indexes,该参数如果是ON,则慢查询日志还会记录查询时,未使用索引的语句。MYSQL5.6版本之后,新添加了log_throttle_queries_not_using_indexes
            用来记录每分钟往slow_log里记录未使用索引SQL语句的次数。默认为0,表示没有限制。
            
            Mysql5.1版本之后,可以将慢查询的记录输出到一张表中,该表在mysql架构下,名为slow_log,设置输出格式的参数为log_output,该参数为全局动态参数,可以在线设置修改,查询参数命令
            show variables like 'log_output';
        
        -查询日志文件
        
            该日志记录所有对数据库发起的请求记录,在5.1版本后,该日志记录被放到mysql下的general_log表中。
        
        -二进制日志文件
        
            二进制日志记录所有的修改操作,不包括SELECT和SHOW,因为这类操作并未对数据进行修改。如果操作并未对数据造成修改,也可能被记录下来,比如:
            update xx set a=1 where b=2,但是xx表中并没有b=2这条数据,因此没有实质性的改变数据,但是同样会记录到改日志文件中。
            
            该日志的几个重要作用:
            
            1、恢复 
            
                某些数据的恢复需要二进制文件,比如某个数据进行全被恢复后,用户可以通过二进制日志文件进行point-in-time的恢复。
                
            2、复制 
                
                与恢复原理类似,通过复制和二进制文件,保持几台服务器上数据的同步。
                
            3、审计
                
                用户可以通过二进制的文件里的信息来进行审计,判断是否有对数据库进行的注入攻击。
            
            二进制日志文件可以通过设置参数log-bin[name=]来进行启动,不设置name的时候,默认为主机名,后缀为二进制的序列号,文件位置通过show variables like 'datadir';
            查询可以获得。
            
            设置二进制文件几个重要参数:
            
            1、max_binlog_size
            
                设置单个二进制文件的允许的最大值。
                
            2、binlog_cache_size
            
                针对支持事务的引擎,事务未提交前,会记录到一个缓存中,等该事务提交后,将该操作记录到二进制文件中。该缓存的大小就是由该参数控制,默认为32k,该参数是基于
                会话的,因此新开一个会话,就会新分配一个binlog_cache_size大小的缓存。因此该值的设置需要特别小心。当一个事务的记录大于该块缓存大小时,则会记录到一个临时
                文件中,因此该值又不能设置的太小。通过show global status命令查看binlog_cache_use、binlog_cache_disk_use的状态,来判断当前设置的缓存大小是否合适。
                Binlog_cache_use记录了使用缓冲写二进制日志的次数,binlog_cache_disk_use记录了使用临时文件写二进制日志的次数
                
            3、sync_binlog
            
                默认情况下,二进制日志文件不是在每次写的时候就都写入磁盘的,因此在数据库发生宕机时,很有可能最后一部分日志信息为同步到磁盘中。这会给复制和恢复带来麻烦
                。该参数就是用来控制同步到磁盘的写入的次数。当sync_binlog=1表示,采用同步写磁盘的方式来写日志文件。这是写操作就不会再使用系统的缓冲。该参数的默认值为0,
                表示具体写入几次同步写入磁盘全由系统决定。
                将sync_binlog设置为1时,在一个事务提交前,会立即写入到磁盘中,如果该事务因别的问题未能成功提交,日志是没有办法回滚回去,这个问题可以通过将参数innodb_su
                pport_xa设为1来解决,虽然innodb_support_xa与XA事务有关,但它同时也确保了二进制日志和InnoDB存储引擎数据文件的同步。
                
            4、binlog-do-db和binlog-ignore-db
                
                参数binlog-do-db和binlog-ignore-db表示需要写入或忽略写入哪些库的日志。默认为空,表示需要同步所有库的日志到二进制日志
                
            5、log-slave-update
            
                如果当前数据库是复制中的slave角色,则它不会将从master取得并执行的二进制日志写入自己的二进制日志文件中去。如果需要写入,要设置log-slave-update。如果需要搭
                建master=>slave=>slave架构的复制,则必须设置该参数
                
            6、binlog_format
            
                该参数很重要,它影响了日志的存储格式。在5.1版本前,是没有这个参数设置的,所有二进制日志存储都是基于SQL级别的。
                5.1版本后,增加了该参数,可设置的值为STATEMENT、ROW和MIXED。
                STATEMENT   
                    -和之前的Mysql版本一样,是基于SQL语句级别的。
                ROW            
                    -二进制日志记录的不再是简单的SQL语句了,而是记录表的行更改情况,设置成row会造成二进制文件变大,增加磁盘压力和网络传输的开销。
                MIXED       
                    -在MIXED格式下,MySQL默认采用STATEMENT格式进行二进制日志文件的记录,但是在一些情况下会使用ROW格式,可能的情况有:
                        1)表的存储引擎为NDB,这时对表的DML操作都会以ROW格式记录。
                        2)使用了UUID()、USER()、CURRENT_USER()、FOUND_ROWS()、ROW_COUNT()等不确定函数。
                        3)使用了INSERT DELAY语句。
                        4)使用了用户定义函数(UDF)。
                        5)使用了临时表(temporary table)。
                        binlog_format是动态参数,因此可以在数据库运行环境下进行更改
        -套接字文件
        
            在UNIX系统下本地连接MySQL可以采用UNIX域套接字方式,这种方式需要一个套接字(socket)文件。套接字文件可由参数socket控制。一般在/tmp目录下,
            名为mysql.sock:
        
        -pid文件
            
            当MySQL实例启动时,会将自己的进程ID写入一个文件中——该文件即为pid文件。该文件可由参数pid_file控制,默认位于数据库目录下,文件名为主机名.pid
        
        -表结构定义文件
        
            因为MySQL插件式存储引擎的体系结构的关系,MySQL数据的存储是根据表进行的,每个表都会有与之对应的文件。但不论表采用何种存储引擎,MySQL都有一个以frm为后缀名的文件,
            这个文件记录了该表的表结构定义。
            frm还用来存放视图的定义,如用户创建了一个v_a视图,那么对应地会产生一个v_a.frm文件,用来记录视图的定义,该文件是文本文件
            
        -存储引擎文件
        
            1、表空间文件
                
                InnoDB采用将存储的数据按表空间(tablespace)进行存放的设计。在默认配置下会有一个初始大小为10MB,名为ibdata1的文件。该文件就是默认的表空间文件(tablespace file),
                用户可以通过参数innodb_data_file_path对其进行设置
                
                用户可以通过多个文件组成一个表空间,同时制定文件的属性
                innodb_data_file_path=/db/ibdata1:2000M;/dr/ibdata2:2000M:autoextend
                
                这里将/db/ibdata1和/dr2/db/ibdata2两个文件用来组成表空间。若这两个文件位于不同的磁盘上,磁盘的负载可能被平均,因此可以提高数据库的整体性能。同时,两个文件的文件名后都跟了属性,
                表示文件idbdata1的大小为2000MB,文件ibdata2的大小为2000MB,如果用完了这2000MB,该文件可以自动增长(autoextend)
                
                设置innodb_data_file_path参数后,所有基于InnoDB存储引擎的表的数据都会记录到该共享表空间中。若设置了参数innodb_file_per_table,则用户可以将每个基于InnoDB存储引擎的表产生一个独
                立表空间。独立表空间的命名规则为:表名.ibd。通过这样的方式,用户不用将所有数据都存放于默认的表空间中。下面这台MySQL数据库服务器设置了innodb_file_per_table
            
            2、重做日志文件
            
                在默认情况下,在InnoDB存储引擎的数据目录下会有两个名为ib_logfile0和ib_logfile1的文件
                当实例或介质失败(media failure)时,重做日志文件就能派上用场。例如,数据库由于所在主机掉电导致实例失败,InnoDB存储引擎会使用重做日志恢复到掉电前的时刻,
                以此来保证数据的完整性
                
                每个InnoDB存储引擎至少有1个重做日志文件组(group),每个文件组下至少有2个重做日志文件,如默认的ib_logfile0和ib_logfile1。为了得到更高的可靠性,用户可以设
                置多个的镜像日志组(mirrored log groups),将不同的文件组放在不同的磁盘上,以此提高重做日志的高可用性。
                
                下列参数影响着重做日志文件的属性:
                □ innodb_log_file_size(文件日志大小)
                □ innodb_log_files_in_group(每个文件组中的日志个数)
                □ innodb_mirrored_log_groups(镜像文件组的个数)
                □ innodb_log_group_home_dir(文件组的存储地址)
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值