mysql教程栏目介绍MySQL物理文件。
mysql教程栏目介绍MySQL物理文件。
1.数据库的数据存储文件MySQL 数据库会在data目录下面建立一个以数据库为名的文件夹,用来存储数据库中的表文件数据。不同 的数据库引擎,每个表的扩展名也不一样 ,例如: MyISAM 用“ .MYD ”作为扩展名, Innodb 用 “.ibd” , Archive 用 “.arc” ,CSV 用 “.csv“。 1. ".FRM"文件8.0之前无论是那种存储引擎,创建表之后就一定会生成一个以表明命名的'.frm'文件。frm文件主要存放与表相关的数据信息,主要包括表结构的定义信息。当数据库崩溃时,用户可以通过frm文件来恢复数据表结构。 2. ".MYD"文件“.MYD”文件是MyISAM存储引擎专用,存放MyISAM表的数据。每一个MyISAM表都会有一个“.MYD”文件与 之对应,同样存放于所属数据库的文件夹 下, 和“.frm”文件在一起。 3. ".MYI"文件“.MYI”文件也是专属于MyISAM存储引擎的,主要存放MyISAM表的索引相关信息。对于MyISAM存储来说, 可以被cache 的内容主要就是来源 于“.MYI”文件中。 每一个MyISAM表对应一个“.MYI”文件,存放于位置 和“.frm”以及“.MYD”一样。 4. ".ibd"文件与".ibdata"文件这两种文件都是存放 Innodb 数据的文件,之所以有两种文件来存放Innodb的数据(包括索引),是因为 Innodb 的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据。独享表空间存储方式使用“.ibd”文件来存放数据,且每个表一个“.ibd”文件 ,文件存放在和MyISAM数据相同的位置。如果选用共享存储表空间来存放数据,则会使用 ibdata 文件来存放,所有表共同使用一个 (或者多个,可自行配置)ibdata文件。 ibdata文件可以通过 共享表空间: 某一个数据库的所有的表数据,索引文件全部放在一个文件中。 独占表空间: 每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有 一个.ibd文件。其中这个文件包括了 单独一个表的数据 内容以及索引内容。 4.1 两者对比共享表空间: 优点: 可以放表空间分成多个文件存放到各个磁盘上。数据和文件放在一起方便管理。 缺点: 所有的数据和索引存放到一个文件中,多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日志系统这类应用最不适合用共享表空间。 独立表空间: 优点:
show variables like "innodb_file_per_table"; ON代表独立表空间管理,OFF代表共享表空间管理; 修改数据库的表空间管理方式 修改innodb_file_per_table的参数值即可,但是修改不能影响之前已经 使用过的共享表空间和独立表空间; innodb_file_per_table=1 为使用独占表空间 innodb_file_per_table=0 为使用共享表空间复制代码 2. 日志
2.1 查询日志查询日志在mysql中被称之为
查看查询日志是否开启show VARIABLES LIKE 'general_log';复制代码
show variables where variable_name like "%general_log%" or variable_name="log_output";复制代码
# 设置查询日志的输出方式 set global log_output=[none|file|table|file,table]; # 设置general log的日志文件路径 set global general_log_file='/tmp/general.log'; # 开启general log set global general_log=on; # 关闭general log set global general_log=off;复制代码 2.2 慢日志所谓的慢查询就是通过设置来记录超过一定时间的SQL语句! 开启MySQL的慢查询日志功能# 查看是否开启 未使用索引的SQL记录日志查询 show variables like 'log_queries_not_using_indexes'; # 开启 未使用索引的SQL记录日志查询 set global log_queries_not_using_indexs=on/off; # 查看超过多长时间的查询记入慢查询日志中 show variables like 'long_query_time'; # 设置记录时长,0为全部记录,设置之后需重新启动 set global long_query_time=10 # 查看是否开启 mysql慢查询日志功能 show variables like 'slow_qurey_log' # 开启、关闭慢日志 set global slow_qurey_log=on/off; # 查看日志记录位置 show variables like 'slow_query_log_file'; #日志存储方式 show variables like "log_output";复制代码
# Time: 2020-10-26T05:12:09.564006Z # User@Host: root[root] @ localhost [] Id: 12 # Query_time: 10.000272 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1 SET timestamp=1603689119; select sleep(10);复制代码
日志分析工具 mysqldumpslow查看 mysqldumpslow 的帮助信息:
-s ORDER ORDER排序依据(al,at,ar,c,l,r,t),“at”是默认值
al: 平均锁定时间
ar: 平均发送行数
at: 平均查询时间
c: 计数
l: 锁定时间
r: 已发送行
t: 查询时间
-r 反转排序顺序(最大的最后一个而不是第一个)
-t NUM 只显示前n个查询
-a 不要将所有数字抽象为N,将字符串抽象为“S”
-n NUM 名字中至少有n个数字的抽象数字
-g PATTERN grep: 只考虑包含此字符串的记录
-h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard),
default is '*', i.e. match all
-i NAME name of server instance (if using mysql.server startup script)
-l don't subtract lock time from total time复制代码2.3 错误日志错误日志(Error Log)是 MySQL 中最常用的一种日志,主要记录 MySQL 服务器启动和停止过程中的信 息、服务器在运行过程中发生的故障和异常情况等。 # 查看错误日志记录位置
show variables like "log_error";
# 在 MySQL 中,可以使用 mysqladmin 命令来开启新的错误日志,以保证 MySQL 服务器上的硬盘空间。
# mysqladmin 命令的语法如下:
mysqladmin -uroot -p flush-logs
# 执行该命令后,MySQL 服务器首先会自动创建一个新的错误日志,然后将旧的错误日志更名为 filename.err-old 。可以手动直接删除。
#配置文件中配置
[mysqld]
log-error=dir/{filename}复制代码2.4 二进制日志二进制日志(Binary Log)也可叫作变更日志(Update Log),是 MySQL 中非常重要的日志。主要用于记录数据库的变化情况,即 SQL 语句的 DDL 和 DML 语句,不包含数据记录查询操作。 # 查看 binary log 日志是否开启,binary log日志默认关闭
show variables like "log_bin";
# 在MySQL中可以再配置文件中开启二进制文件日志
[mysqld]
log-bin=dir/{filename}复制代码
二进制日志的格式有三种:STATEMENT,ROW,MIXED。 ① STATEMENT模式(SBR) 每一条会修改数据的 sql 语句会记录到 binlog 中。优点是并不需要记录每一条 sql 语句和每一行的数据变化, 减少了 binlog 日志量,节约 IO ,提高性能。缺点是在某些情况下会导致 master-slave 中的数据不一致(如 sleep() 函数, last_insert_id() ,以及 user-defined functions(udf) 等会出现问题)复制代码 ② ROW模式(RBR) 不记录每条 sql 语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下 的存储过程、或 function 、或 trigger 的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是 alter table的时候会让日志暴涨。复制代码 ③ MIXED模式(MBR) 以上两种模式的混合使用,一般的复制使用 STATEMENT 模式保存 binlog ,对于 STATEMENT 模式无法复制的操作使用 ROW 模式保存 binlog , MySQL 会根据执行的 SQL 语句选择日志保存方式。复制代码 binlog复制配置 在mysql的配置文件 binlog_format = MIXED //binlog日志格式,mysql默认采用statement,建议使用mixed log-bin = mysql-bin //binlog日志文件 expire_logs_days = 7 //binlog过期清理时间 max_binlog_size = 100m //binlog每个日志文件大小 binlog_cache_size = 4m //binlog缓存大小 max_binlog_cache_size = 512m //最大binlog缓存大小 server-id = 1复制代码 2.5二进制文件基本操作
以上就是认识 MySQL物理文件的详细内容,更多请关注模板之家(www.mb5.com.cn)其它相关文章! |
