mysql物理文件_mysql物理文件组成

本文对比了MySQL与其他数据库在功能、易用性、性能和可靠性的差异,并介绍了MySQL适用于web网站、日志记录和数据仓库系统的主要场景。讨论了MySQL物理文件的组成,包括错误日志、二进制日志、事务日志和慢查询日志的用途、管理与配置,以及数据文件的存储结构。最后,文章阐述了如何优化和监控MySQL的性能,如通过设置日志和调整参数来提升系统效率。
摘要由CSDN通过智能技术生成

一:MySQL 与其他数据库比较

1)功能比较

作为一个成熟的数据库系统管理系统,现在已经具备通用数据库管理系统的相关功能

2)易用性比较

对于普通用户操作难度相对简单易用原则,从安装方面来说,MySQL安装包仅仅只有100MB左右,安装难易程度要比Oracl,数据库简单很多,不论是通过已经编译好的二进制分发包还是源码编译安装,都比较简单

3)性能比较

MySQL非常优异表现,而且其他商用的通用数据库系统中,只有Oracle数据库能相提并论。

4可靠性)MySQL数据库发展过程三个原则, 简单,高效,可靠。

二:MySQL主要场景

1)web网站系统

MySQ;是开放源代码,可以免费使用

2)日志记录系统

MySQL数据库插入和查询都非常高效,使用MyISAM存储时候 两者可以互不锁定,达到很高效的并发能力,例如,登陆日志,操作日志,都非常应用场景。

3)数据仓库系统

随着数据量增长,需要空间越来越大,使数据统计分析变得越来越低,解决思路

采用高性能主机提高运算,用高端存储设备提高I\O性能,2就是通过数据复制多台使用大容量硬盘上以提高性能运算能力,但是存储空间有一定限制,3可以通过水平拆分来存放数据,MySQL都有较大优势,通过简单复制功能,可以将数据从一台主机复制到另外一台主机、

三:物理文件组成

日志文件:错误日志 查询日志 慢查询日志 事物日志

日志记录这mysql数据库运行期间发生变化,相当于记录mysql数据库连接客户的连接状况

SQL语句执行情况和错误信息等,当数据意外损坏时,可以通过错误日志看出原因,并且日志进行数据恢复。

错误日志:在mysql中默认是开启的,错误日志存储在mysql数据库目录中

错误日志信息可以自己进行配置,错误日志可以通过log-error和存储位置log-warninge定义

是否将警示信息定义至错误日志中,

服务器运行过程错误信息,事件调度器运行一个事件产生,在从服务器启动服务器进程产生的信息。

因此mysql提供两组命令,分别查看系统设置和运行状态。1、查看系统设置:SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]SHOW VARIABLES:shows the values of MySQL system variables.2、运行状态:SHOW [GLOBAL | SESSION] STATUS [like_or_where]SHOW STATUS:provides server status information.

如何修改系统配置

7973372cf2d17fb0baca1ec712ddd371.png

方法1:配置文件设置my.cnf

如:binlog_cache_size = 1M

方法2:set globalbinlog_cache_size = 1048576;

使用set 将安全级别改为2

08f4522fde354d88d0ffd3c9eed8260f.png

3:查看mysql版本

Mysql -V     mysql> status;   select version ();

ab43c610e27235e5517e7531c00ca9bc.png

4错误日志状态

7c248b1d6c7a80a47775c1e62f54fd00.png

注log_error定义错误文件路径

Log__error_verbosity  安全级别

查看错误日志

Tail  /usr/local/mysql/data/mysqld.err

d5e6c43799774847898843e639d48f5f.png

二:删除错误日志

数据库管理员可以删除很久以前的错误日志,为保证服务器硬盘空间,可以使用、mysqladmin -u root  flush-logs  FLUSH LOGS开启新的错误日志

3639db2835b44732c7af55dca9c636e8.png

二进制日志

主要用于记录修改数据或有可能引起数据改变的mysql语句,并且记录语句发生时间,执行时长,操作数据等等。一般体积上限为1G

首先看到二进制是关闭的OFF 需要在vim /etc/my.conf进行配置

Bin_log=/usr/local/mysql/data/log_bin  开启

5be54c6d888cf6e4ffa127e2c2890d65.png

一般设置为512或者1个G达到上限时mysql重新创建一个日志开始记录

为保证mysql安全 不会将同一个事物分开记录俩个binlog中

事务日志

事物日志表将一个事物任务提交,对包含在事物中的多条语句要么执行,要么全部不执行。

非事物表则不支持此操作,处理中如果遇到错误,在错误前语句执行成功,之后则执行不成功

指定二进制日志类型

Mysql复制主要有三种方式 基于SQL语句复制 混合模式复制  基于行复制

三 通过编辑my.conf中log-bin选择开启二进制日志

其中 DIR参数指定二进制文件存储路径filename参数指定二级制文件文件名,形式为filename.number形式为000001. 000002等 每次重启mysql服务或运行flush logs;都会生成一个新的二进制文件

7be168091286f7a3bf14f19dbb80a578.png

d6187aeedffefdc2c786a66c07d8cc34.png

查看二进制文件信息

c98f56d4d8667a5a6d659002e951aa5f.png

查看二进制日志信息的命令:

语法格式:SHOW BINLOG EVENTS[IN'log_name'] [FROM pos] [LIMIT [offset,] row_count]

#查看所有的二进制信息

mysql> show binlog events\G;

#查看指定日志的二进制信息

mysql> show binlog events in 'mysql-bin.000013'\G;

删除二进制日志信息

长时间不清理二进制文件,影响磁盘空间,删除之后可能导致数据库奔溃无法恢复,所以删除二进制首先和数据库备份

语法形式:

mysql> PURGE { BINARY | MASTER } LOGS {TO'log_name'| BEFORE datetime_expr }

其中TO'log_name'表示把这个文件之前的其他文件都删除掉,也可使用BEFORE datetime_expr指定把哪个时间之前的二进制文件删除了。

44ba9a849fc8d8e9b4426de0eea9878d.png

也可以指定时间来删除二进制日志

命令行下查看二进制日志:

由于无法使用cat等方式直接打开并查看二进制日志;所以必须使用mysqlbinlog命令。但是当正在执行mysql读写操作时建议不要使用此打开正在使用的二进制日志文件

c4ab8e3cb2bd9bfd65cf2772783bfb71.png

e85076ec0e853b3c51c82adcded5d66e.png

删除所以二进制日志

366d00ed1e5381778fee5dc7fe7c9951.png

3 事物日志

可以帮助提高事务的效率。使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。mysql会默认提供多种存储引擎,你可以通过下面的查看:查看你的mysql现在已提供什么存储引擎:mysql> show engines;create table库名.表名engine = innodb;这样就可以将表的引擎变更为innodb引擎了。也可以在创建表之后通过下面语句来变更:alter table库名.表名engine =innodb;

在事务提交时innodb是否同步日志从缓冲区到文件中,当这个值为1(默认值)之时,在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的刷新,性能会很差造成大量的磁盘I/O但这种方式最安全

刷写的概念

设为1当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能

8391de6d62c4770cad7d001d18059efd.png

慢查询日志

记录了语句执行的时刻,执行所消耗的时间,执行用户,连接主机等相关信息。

慢查询日志的作用:

慢查询日志是用来记录执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。一般建议开启,它对服务器性能的影响微乎其微,但是可以记录mysql服务器上执行了很长时间的查询语句。

10a2ca6d06f243b205b0f2367e081793.png

启动和设置查询日志

0e77e1a27691fb0701e0d896e8e5a95f.png

slow_query_log:off关闭状态on开启状态slow_query_log_file  慢查询日志存放地点

long_query_time选项来设置一个时间值,时间以秒为单位,可以精确到微秒。如果查询时间超过了这个时间值(默认为10秒),这个查询语句将被记录到慢查询日志中,设置为0的话表示记录所有的查询。

如果不指定存储路径,慢查询日志默认存储到mysql数据库的数据文件下,如果不指定文件名,默认文件名为hostname-slow.log

修改my.cnf文件:

9d6a3dd90b950a337d11e400c152e894.png

d0d5023a0f6fae7bd78ec2091e25418e.png

方法2:通过登录mysql服务器直接定义,方式如下:

mysql>setglobalslow_query_log=1;  #开启慢查询日志

Query OK, 0 rowsaffected (0.35 sec)

mysql>setsession long_query_time=0.0001; #更改时间(当前session中,退出则重置)

Query OK, 0 rowsaffected (0.00 sec)

mysql>setgloballong_query_time=0.0001; #更改时间(全局中,重启服务则重置)

mysql> SHOWVARIABLES LIKE 'long%';  #查询定义时间

查看慢查询日志

mysql> use mysql

mysql> selectuser,host from user where user="root";

aef932d901e586f1962d0553b758c3ed.png

eb849ba6e8c3c094c5231fb1c508c062.png

3)数据文据

在MySQL中每一个数据库都会在定义好(或者默认)的数据目录下存在一个以数据库名字命名的文件夹,用来存放该数据库中各种表数据文件。

mysql> show create table 表名;

create table库名.表名engine = innodb;这样就可以将表的引擎变更为innodb引擎了。

登录mysql,创建一个数据库如testdb,并在数据库中创建一个表

de3683eec25c5497b02d1b32bfb591ac.png

5c0f4a128ddabe29f4ce94d12db74630.png

以myisam存储引擎创建一个测试表tb2

5e3a3152f3be17fa5ce617d7190f8b12.png

.frm”文件

与表相关的元数据(meta)信息都存放在“.frm”文件中,包括表结构的定义信息等。不论是什么存储引擎(MySQL常用的两个存储引擎是MyISAM和InnoDB),每一个表都会有一个以表名命名的“.frm”文件。

MyISAM数据库表文件:.MYD文件:表数据文件;.MYI文件:索引文件

MYD”文件

“.MYD”文件是MyISAM存储引擎专用,存放MyISAM表的数据。每一个MyISAM表都会有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹下,和“.frm”文件在一起。

MYI”文件

“.MYI”文件也是专属于MyISAM存储引擎的,主要存放MyISAM表的索引相关信息。

InnoDB采用表空间(tablespace)来管理数据,存储表数据和索引。

.ibd文件:单表表空间文件,每个表使用一个表空间文件(file per table),存放用户数据库表数据和索引。

.ibd”文件和ibdata文件

这两种文件都是存放Innodb数据的文件,之所以有两种文件来存放Innodb的数据(包括索引),是因为Innodb的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据。

共享表空间以及独占表空间都是针对数据的存储方式而言的。

共享表空间:  某一个数据库的所有的表数据,索引文件全部放在一个文件中。

独占表空间:  每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件。 其中这个文件包括了单独一个表的数据内容以及索引内容。

所有的数据和索引存放到一个文件中,多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日值系统这类应用最不适合用共享表空间。

独立表空间:

优点:1.每个表都有自已独立的表空间。2.每个表的数据和索引都会存在自已的表空间中。3.可以实现单表在不同的数据库中移动。4.空间可以回收查看当前数据库的表空间管理类型

a5ed02644255f0f5886bfd154bfb016e.png

ON代表独立表空间管理,OFF代表共享表空间管理

Innodb共享表空间配置:

058abb671359c0928e47db6881a3dad5.png

3495b356257e782ce545307587ab824c.png

d4d77da54ad3f78408291af36f343be8.png

768/64=12

innodb_data_home_dir = "/path/" 数据库文件所存放的目录

innodb_log_group_home_dir = "/path/" 日志存放目录

innodb_data_file_path=ibdata1:10M:autoextend 设置一个可扩展大小的尺寸为10MB的数据文件(共享数据文件),名为ibdata1。没有给出文件的位置,所以默认的是在MySQL的数据目录内。

innodb_file_per_table=1|0//1为使用独占表空间,0 为使用共享表空间

在/etc/my.cnf文件中设置6400页而当前ibdata1为768页

需要计算768/64=12启动mysql,成功!

计算公式:64pages相当于1M,1page是16KB

798d859e9ec45ee4116492fb3443ff9c.png

4ea8e1c452c3cadc2a78edd7fddc3912.png

c9fb5f491d23e34e85ff2091e3031581.png

调用存储过程

56533a21f09ed7bcb60cc5d44d5efa74.png

查看表中行数:

7994a8bde8fa7d64682a0ea7f3270beb.png

对INNODB,直接用命令show table status查看某个表的表空间占用情况

16ffd437f901f540a464400499443e21.png

MySQL数据库中每个表占用的空间、表记录的行数的话,可以打开MySQL的information_schema数据库。在该库中有一个TABLES表,这个表主要字段分别是:

TABLE_SCHEMA : 数据库名TABLE_NAME:表名ENGINE:所使用的存储引擎TABLE_ROWS:记录数DATA_LENGTH:数据大小INDEX_LENGTH:索引大小

master.info文件

包括Master的主机地址,连接用户,连接密码,连接端口,当前日志位置,已经读取到的日志位置等信息。

elay log和relay log index

mysql-relay-bin.xxxxxn文件用于存放Slave端的I/O线程从Master端所读取到的Binary Log信息,然后由Slave端的SQL线程从该relay log中读取并解析相应的日志信息,转化成Master所执行的SQL语句,然后在Slave端应用。

mysql-relay-bin.index文件的功能类似于mysql-bin.index,同样是记录日志的存放位置的绝对路径,只不过他所记录的不是Binary Log,而是Relay Log。

3)relay-log.info文件:

类似于master.info,它存放通过Slave的I/O线程写入到本地的relay log的相关信

息。供Slave端的SQL线程以及某些管理操作随时能够获取当前复制信息

socket文件也是在Unix/Linux环境下才有的,用户在Unix/Linux环境下客户端连接可以不通过TCP/IP网络而直接使用Unix Socket来连接MySQL。

mysql有两种连接方式,常用的一般是tcpmysql–hmysql主机ip-uroot-pxxxmysql-S/path/mysql.sock

spacer.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值