Mysql Innodb文件

x33g5p2x  于2021-03-14 发布在 Mysql  
字(4.5k)|赞(0)|评价(0)|浏览(537)

参数文件

MySQL数据库参数文件的作用和Oracle数据库的参数文件极其类似忙,不同的是,Oreacle启动没有知道参数文件就不能装载(mount)操作的。MySQL稍微不同,MySQL可以不需要参数文件。这时参数值取决于编译MySQL是的指定默认值喝源代码中指定参数的默认值。但是如果找不到mysql架构同样保存。
数据库参数可以看成一个键/值(key/value)对。
数据库参数类型分为两类:
(1)动态参数:意味执行中可以进行修改
(2)静态参数:静态不能够进行修改
可以通过set进行动态参数的设置语法:

这里可以看到global 和session关键字 它们表明是当前会话还是整个实例的生命周期。
如图: 设置全局值 对本次生命周期有效但参数文件本身没有修改。


日志文件

mysql日志文件有:(1)错误日志(error log)、(2)二进制日志(binlog)、(3)慢查询日志(slow query log) (4) 查询日志(log)


错误日志

错误日志文件对MySQL的启动、运行、关闭过程进行了记录。 用户可以通过命令:SHOW VARIABKES LIKE 'log_error'\G


查找错误日志文件名
通过命令[root@centos7-w data]# tail -n 50 centos7-w.err执行(我没有成功,显示没有找到这个文件)

慢查询日志

慢查询日志(slow log)可帮助DBA定位可能存在问题的SQL语句.从而进行SQL语句层面的优化。
参数long_query_time参数来设置sql语句的运行时间, 默认为10,代表十秒。
show variables like 'long_query_time'\G

MySQL默认情况下并不启动慢查询日志,用户要启动则设置为:ON
查询慢查询是否开启:show variables like 'log_slow_queries'\G (我测试没有找到该差数)

参数:log_queries_not_using_indexes :表示如果运行的SQL语句没有使用索引,则MySQL数据库同意会将这条SQL语句记录到慢查询日志文件。
show variables like 'log_queries_not_using_indexes'\G

MySQL5.6.5版本开始新增log_throttle_querrottlequeries_not_using_indexes 表示每分钟允许记录到slow log且并未使用索引的sql语句次数。默认为0 表示没有限制。
show variables like 'log_throttle_querrottlequeries_not_using_indexes'\G


mysqldumpslow命令可以简单直观的查看:
mysqldumpslow nh122-190-slow.log

用户需要查询执行时间最长的10条sql语句:
mysqldumpslow -s al -n 10 nh122-190-slow.log

mysql5.1 可以将慢查询插入到数据表中 慢查询在mysql架构下,名为slow_log 表结构定义如下:
show create table mysql.slow_log\G

参数log_output指定了慢查询输出的格式:
show variables like 'log_output'\G

设置慢查询日志表的输出格式:
set global log_output='table';
之后就可以查询表的数据:

查看定义可以发现该表使用的是CSV引擎,所以查询效率并不高,用户可以把slow_log引擎转换成MyISAM。提高查询速度,如果已经启动慢查询,会提示错误。
ALTER mysql.slow——log ENGINE=MyISAM;

所以需要先关闭慢查询:
SET GLOBAL slow_query_log=off
再执行一遍:
ALTER mysql.slow——log ENGINE=MyISAM;
但是如果改成MyISAM会造成额外的开销。不过好在慢查询的参数是动态的 所以用户方便的尽心设置或修改。

查询日志

通过命令 tail 进行查询
tail 【文件名】; 默认名称是主机名.log

二进制日志

二进制日志记录的是数据库执行更改的所有操作,但是不包括select 和 show 这类操作。

查询命令
首页获取文件名 show MASTER STATUS\G

查询:SHOW BINLOG EVENTS IN 'mysql-bin.000005'\G

通过配置参数log-bin[=name]可以启动二进制日志。

影响二进制日志记录的信息和行为的参数:
(1) max_binlog_size:指定单个二进制日志的最大值,如果超过,产生新的二进制日志文件。mysql5.0默认1G(之前的版本默认1.1G)
(2)binlog_cache_size:该事务提交(committed)时直接将缓冲中的二进制日志写入二进制日志文件,改缓冲大写有该参数决定。默认为32K,不能设置过大。通过show global status 可以查看 binlog_cache_use、binlog_cache_disk_use的状态。
(3)sync_binlog:该参数表示每写缓冲多少次就同步到磁盘。 如果将N设为1 即 sync_binlog=1表示同步写磁盘的方式来写二进制日志,这时写操作不使用操作系统缓冲来写二进制日志。值为0 如果InnoDB引擎进行复制,可以得到最大的高可用性。不过IO系统会带来一定的影响。但是该参数值为1,在事务发出COMMIT动作之前,由于该参数值为1,因此会将二进制日志立即写入磁盘。如果已经写入二进制日志但是提交没有发生,此时就会发生宕机,那么下次启动时,COMMIT操作并没有发生这个事务就会被回滚掉。但是二进制日志已经记录了该事务信息,不能被回滚。 这个问题通过参数innodb_support_xa设为1来解决,虽然innodb_support_xa与XA事务有关,但他同事也确保了二进制日志和数据文件的同步
(4)binlog-do-db:
(5)binlog-ignore-db:
参数binlog-do-db和binlog-ignore-db表示需要写入或者忽略写入哪些库的日志。默认为空,表示需要同步所有库的日志到二进制日志,
(6)log-slave-update:如果当前户数看是复制slave角色,它将不会从master取得并执行二进制日志到自己的二进制日志中去,这时候需要写入的话 需要设置该参数。 如果搭建master=>slave=>slave架构的复制,则必须设置该参数。
(7)binlog-format:该参数是设置二进制日志的格式。mysql5.1版本之后才有的。该参数可设:
1.STATEMENT格式:记录的是逻辑SQL语句
2.ROW格式:记录表的行更改情况。如果该参数设置该格式,可以将InnoDB的事务隔离基本设为READ COMMITTED ,以获得更好的并发性。但是会对磁盘空间要求有一定的增加。
3.MIXED格式:该格式下默认采用STATEMENT格式进行二进制记录,但是在存储引擎为NDB做DML操作或者使用了UUID()、USER()、CURRENT_USER()、FOUND_ROWS()、ROW_COUNT()等不确定函数或者使用了INSERT DELAY语句或者用户定义函数(UDF)或使用临时表。
此外还有存储以前的限制如表:

binlog-format是动态参数可以在数据库运行环境下更改。 SET @@session.binlog_format='ROW';
也可以全局设置 SET GLOBAL binlog_format='ROW';

使用mysqlbinlog查看日志。
提示错误可以根据以下方法解决问题:
一是在MySQL的配置/etc/my.cnf中将default-character-set=utf8 修改为 character-set-server = utf8,但是这需要重启MySQL服务,如果你的MySQL服务正在忙,那这样的代价会比较大。

二是用mysqlbinlog --no-defaults mysql-bin.000004 命令打开


套接字文件

用UNIX域套接字方式链接就需要一个套接字文件.该文件可由socket控制。一般在/tmp目录下 名为 mysql.sock


pid文件

MySQL启动时,会将自己的进程ID吸入pid文件。 参数pid——file哦控制 默认位于数据库目录下。文件名为主机名.pid
show variables like 'pid_file'\G


表结构定义文件

frm 为后缀名的文件,这个文件记录了该表的表结构定义。 frm还用来存放视图定义。 可以直接用cat命令进行查看cat 文件名.frm


InnoDB存储引擎文件

表空间文件

InnoDB采用存储数据按表空间进行存放的设计。默认初始大小为10MB,名为ibdata1的文件。该文件就是表空间文件(tablepace file),参数innodb_data_file_path对其进行设置。
格式如下: innodb_data_file_path=datafile_spec1[;datafile_spec2].....

如果用多文件来组成表空间。 如果表位于不同的磁盘,磁盘负载被平均,因此可以听数据库整体性能。同时文件名后面跟了属性,表示文件代表为2000M 文件2用完可以制动增长(autoextend)。
设置innodb_data_file_path数之后所有InnoDB存储引擎表的数据会记录!共享表空间中。 若设置了参数 innodb_file_per_tabel。则用户基于InnoDB存储引擎产生独立表空间。命名规则为:表名.ibd。
SHOW VARIABLES LIKE 'innodb_file_per_tabel'\G
如果innodb_file_per_tabel=NO 则会产生单独的.ibd独立表空间文件。 改文件仅存表数据、索引和插入缓冲BITMAP等信息。
文件存储方式:

重做日志文件

在I你弄DB目录下有ib_logfile0和ib_logfile1的文件。官方称为日志文件,这个日志文件记录对于InnoDB存储引擎单独事务日志。运行方式是 日志文件1达到最后是会回到日志文件2,如果写满在切换日志文件1。

参数影响重做日志文件的属性
(1)innodb_log_file_size 指定日志文件大小 InnoDB 1.2.x总文件大小不得大于4GB,而1.2.x版本扩大512GB。
(2)innodb_log_files_in_group 指定了日志文件组中重做日志文件的数量 默认为2
(3)innodb_mirrored_log_groups指定日志镜像文件组的数量 默认为1 只表示一个日志文件组没有镜像。
(4)innodb_log_group_home_dir 指定了日志文件组所在的路径 默认./

显示配置SHOW VARIABLES LIKE 'innodb%log%'\G

重做日志有一个capacity变量该值代表最后检查点不能超过这个值,如果超过则必须将缓冲池的脏页列表的部分藏独数据页写回磁盘,这时会导致用户线程的阻塞。

相关文章