mysql物理文件组成

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

一: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 VARIABLESshows the values of MySQL system variables. 
2、运行状态: 
SHOW [GLOBAL | SESSION] STATUS [like_or_where] 
SHOW STATUSprovides server status information.

 如何修改系统配置

wKiom1lWOWmgLyWiAAAXM4TR-Zc156.png-wh_50

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

如:binlog_cache_size = 1M

方法2set globalbinlog_cache_size = 1048576;

使用set 将安全级别改为2

wKiom1lWOYHiREy8AAAKyQZYLtY479.png-wh_50

3:查看mysql版本

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

wKiom1lWOZPhuBoOAAAOHMll_1k368.png-wh_50

错误日志状态

wKioL1lWOaux8qPmAAAVRrxsJa0741.png-wh_50

 log_error 定义错误文件路径

   Log__error_verbosity  安全级别

 查看错误日志

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

wKioL1lWOcLSAeStAAAj0lkim3Y017.png-wh_50

二:删除错误日志

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

wKiom1lWOdayCn1oAAAW78fHOKo233.png-wh_50

二进制日志

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

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

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

wKiom1lWOeyAjC_zAAAKbSkTF28101.png-wh_50

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

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

事务日志

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

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

 指定二进制日志类型

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

   通过编辑my.conflog-bin 选择开启二进制日志

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

wKioL1lWOgCDWM18AAANOFuNOSg247.png-wh_50

wKioL1lWOiDT1a5BAAApbb1obsk789.png-wh_50

查看二进制文件信息

wKioL1lWOj7irmxZAAAfabXCgv8818.png-wh_50

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

语法格式: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指定把哪个时间之前的二进制文件删除了。

wKiom1lWOliS4Qb6AAAQ2kiBbeQ295.png-wh_50

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

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

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

wKioL1lWOnDSCF11AAAZp71J77Y439.png-wh_50

wKioL1lWOoGh5mTgAAAUJOw75X0469.png-wh_50

删除所以二进制日志

wKioL1lWOsXjRcnpAAAQLyQfOUM934.png-wh_50

事物日志

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

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

刷写的概念

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

wKioL1lWOyjyM1TJAAAPNOyEDmo400.png-wh_50

慢查询日志

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

慢查询日志的作用:

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

wKiom1lWO2HgrQqfAAAT43SSlXU816.png-wh_50

启动和设置查询日志

wKioL1lWO5PxhwqoAAAUJOw75X0372.png-wh_50

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

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

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

修改my.cnf文件:

wKioL1lWO67j6vBLAAASPWdGadI321.png-wh_50

wKiom1lWO8ihbuBWAAAnjAmQmzY163.png-wh_50

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

mysql>set global slow_query_log=1;  #开启慢查询日志

Query OK, 0 rowsaffected (0.35 sec)

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

Query OK, 0 rowsaffected (0.00 sec)

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

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

查看慢查询日志

mysql> use mysql

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

wKiom1lWO-GTx-VpAAAM6GshKz0551.png-wh_50

wKioL1lWO-zTSnd-AAAcRCXdRvA843.png-wh_50

3)数据文据

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

mysql> show create table 表名;

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

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

wKioL1lWPAfDK9N_AAAfVfe3b08114.png-wh_50

wKiom1lWPBbRfgljAAAM6veTz_4861.png-wh_50

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

wKioL1lWPDDQ5i_XAAAMRvV214I300.png-wh_50

.frm”文件

与表相关的元数据(meta)信息都存放在.frm”文件中,包括表结构的定义信息等。不论是什么存储引擎MySQL常用的两个存储引擎是MyISAMInnoDB,每一个表都会有一个以表名命名的.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.空间可以回收
查看当前数据库的表空间管理类型


wKiom1lWPGSiPU7rAAAQSnMnZUI342.png-wh_50

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

Innodb共享表空间配置:

wKioL1lWPIWR5inaAAAVuP9v4i4200.png-wh_50

wKiom1lWPJGyei_MAAAtP6_A5tA898.png-wh_50

wKiom1lWPJHRw8W3AAAYLPKHILA251.png-wh_50

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=10   //1为使用独占表空间为使用共享表空间

/etc/my.cnf文件中设置6400页而当前ibdata1768

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

计算公式:64pages相当于1M1page16KB

wKiom1lWPKmAljyWAAAGSkTzREQ297.png-wh_50

wKiom1lWPLTRhD9oAAAO4QKXlfQ305.png-wh_50

wKioL1lWPMWSY2z9AAAgAluc_Gw945.png-wh_50

调用存储过程

wKioL1lWPNyTo9MYAAAICaWQ6x4642.png-wh_50

查看表中行数:

wKiom1lWPPXzOKBIAAAKXtV13TA706.png-wh_50

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

wKiom1lWPQejyhqVAAAsxwUUrEI642.png-wh_50

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

3relay-log.info 文件:

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

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

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

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



spacer.gif 









     本文转自柴鑫旺 51CTO博客,原文链接:http://blog.51cto.com/chaixinwang/1943574,如需转载请自行联系原作者






相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 SQL 关系型数据库
MySQL 系统文件你了解吗
MySQL 系统文件你了解吗
34 0
|
4月前
|
存储 关系型数据库 MySQL
Linux的dev/vda1文件满了导致MySQL无法写入
今天查看两个月前上线的小项目,发现运行非常慢,而且增删改查失效了(吓我一大跳),急急忙忙的就开始了我的线上问题排查之路。/dev/vda1是 Linux 系统中的一个设备文件,它表示第一个虚拟磁盘(vda)的第一个分区(1)。在大多数 Linux 发行版中,这是系统根分区的默认位置。如果您要对/dev/vda1进行操作(例如挂载、格式化、备份等),则需要具有足够的权限。一般来说,只有 root 用户或具有 sudo 权限的用户才能进行这些操作。当Linux的/dev/vda1。
116 0
|
24天前
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
14 1
|
3月前
|
关系型数据库 MySQL 数据库
csv文件导入mysql指定表中
csv文件导入mysql指定表中
|
4月前
|
存储 SQL 缓存
[MySQL] 二进制文件
[MySQL] 二进制文件
|
4月前
|
关系型数据库 MySQL 数据库
(简单成功版本)Mysql配置my.ini文件
(简单成功版本)Mysql配置my.ini文件
67 0
(简单成功版本)Mysql配置my.ini文件
|
4月前
|
SQL 关系型数据库 MySQL
MySQL【实践 02】MySQL迁移到PostgreSQL数据库的语法调整说明及脚本分享(通过bat命令修改mapper文件内的SQL语法)
MySQL【实践 02】MySQL迁移到PostgreSQL数据库的语法调整说明及脚本分享(通过bat命令修改mapper文件内的SQL语法)
97 0
|
9天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)
|
1月前
|
关系型数据库 MySQL 数据库连接
关于MySQL-ODBC的zip包安装方法
关于MySQL-ODBC的zip包安装方法
|
28天前
|
关系型数据库 MySQL 数据库
rds安装数据库客户端工具
安装阿里云RDS的数据库客户端涉及在本地安装对应类型(如MySQL、PostgreSQL)的客户端工具。对于MySQL,可选择MySQL Command-Line Client或图形化工具如Navicat,安装后输入RDS实例的连接参数进行连接。对于PostgreSQL,可以使用`psql`命令行工具或图形化客户端如PgAdmin。首先从阿里云控制台获取连接信息,然后按照官方文档安装客户端,最后配置客户端连接以确保遵循安全指引。
81 1

推荐镜像

更多