数据库存储引擎的数据文件

查看mysql的所有存储引擎:

mysql> show engines;

查看某个表用了什么引擎:

mysql> show create table 表名;

创建一个表并指定存储引擎:

mysql> create table 库名.表名 engine=innodb;

更改已有表的引擎:

mysql> alter table 库名.表名 engine=innodb;

数据文件:每个存储引擎都有各自的数据文件,可以使用mysql> show engines;查看所有存储引擎。
这里写图片描述

首先不管什么引擎,每个表都会有一个.frm格式的数据文件,文件中包括表结构的定义信息。

  1. InnoDB支持事务,MyISAM不支持。InnoDB的AUTOCOMMIT默认是打开的
    这里写图片描述
    即每条SQL语句汇默认被封装成一个事务,自动提交,这样会影响速度,所以最好把多条SQL语句显示放在begin和commit之间,组成一个事务去提交。
    这里写图片描述

2.InnoDB支持数据行锁定,MyISAM支持整个表锁定。就是MyISAM在同一个表上的读锁和写锁是互斥的,MyISAM并发读写时如果等待队列中既有读请求又有写请求,默认写请求的优先级别高,即使读请求先到,也是写请求优先。所以MyISAM不适用大量查询和修改并存的情况,那样查询进程会长时间阻塞。因为MyISAM是锁表
3.InnoDB支持外键,MyISAM不支持
4.InnoDB不支持全文索引,而MyISAM支持

InnoDB存储引擎的数据文件方式:

.ibd文件:独享表空间存储方式,就是每个表都会有一个.ibd文件来存储数据。
.ibdata文件:共享表空间存储方式,所有表共同使用一个(或多个,可自行配置).ibdata文件

.ibdata文件可以通过innodb_data_home_dir和innodb_data_file_path两个参数共同配置组成。
这里写图片描述
innodb_data_file_path:设置共享存储文件的数量、大小和是否扩容
innodb_data_home_dir:只能在my.cnf配置文件中设置共享存储文件路径

设置innodb的存储方式:
这里写图片描述
当 value值为ON的时候,表示使用独享表空间存储方式
当 value值为OFF的时候,反之表示使用共享表空间存储方式

共享表空间
优点:可以把表空间分成多个文件存放到各个磁盘上,数据文件放在一起方便管理
缺点:这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日志系统这类应用最不适合用共享表空间

独立表空间
有自己的独立表空间,每个表的数据和索引都会存在自己的表空间中,可以实现单表在不同的数据空中移动,空间可以回收

#
       错误排查
#########################

当我们修改my.cnf为以下信息时,发现mysql重启失败
这里写图片描述
参数:
innodb_data_home_dir:数据库文件路径
innodb_log_group_home_dir:日志存放位置
innodb_data_file_path:设置共享表空间存储大小、数量和自动扩容
innodb_file_per_table=0:设置为共享表空间
这里写图片描述

说明ibdata1当前设置大小为6400pages,太大了。不能超过768pages。
通过换算修改ibdata1的大小:64pages=1M,1pages=16KB。所以ibdata1的大小改为12M。

MyISAM存储引擎的数据文件方式:
.MYD文件:存放MyISAM表的数据 ,每个表都会有一个.MYD文件(便于牢记,MYD的D是data的意思,所以存放表的数据)
.MYI文件:存放MyISAM表的索引相关信息,表中的cache的内容主要来源于这个文件中。同样每个表也都会有一个.MYI文件。(便于牢记,.MYI的I是Index的意思,所以此文件存放表的索引信息)

向表中插入若干行数据:
这里应用到函数的概念,意思大致和shell脚本差不多

mysql> create database testdb;         ======>创建一个数据库
mysql> use testdb;                     ======>使用这个数据库
mysql> creat table tb1 (id int,name varchar(10));     ===>在testdb数据库中添加tb1的表
mysql> delimiter $$                    =======>定义一个结束符号
mysql> drop procedure if exists test   ===>假如存在test这个定义就删除
->create procedure test()              =======>创建一个test的定义
->begin                                =======>开始
->declare i int      ===>声明一个值为什么类型(这里声明一个i,类型为int)
->set i=1                              ======>设置i=1
 ->while i < 10000 do                  ======>如果i<10000就一直循环
->insert into testdb.tb1(id) values (i)      ===>向testdb.tb1中的id列插入i这个值
->set i =i+1                           ======>设置每次i的值+1
->end while                            ======>当满足条件结束循环
->end $$                    ======>结束语句(与之前delimiter $$设置有关)

执行test定义:

mysql> call test()$$

查看表空间的占用情况:
mysql> show table status like ‘tb1’\G;

Replication相关文件:
1)master.info 文件:
master.info 文件存在于Slave 端的数据目录下,里面存放了该Slave 的Master 端的相关信息,包括Master 的主机地址,连接用户,连接密码,连接端口,当前日志位置,已经读取到的日志位置等信息。

2)relay 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 线程以及某些管理操作随时能够获取当前复制的相关信息。

其他文件:
1)system config file
MySQL 的系统配置文件一般都是my.cnf,默认存放在”/etc”目录下,my.cnf文件中包含多种参数选项组(group),每一种参数组都通过中括号给定了固定的组名,如“[mysqld]”组中包括了mysqld服务启动时候的初始化参数,“[client]”组中包含着客户端工具程序可以读取的参数。
2)pid file
pid file 是mysqld 应用程序在Unix/Linux 环境下的一个进程文件,和许多其他
Unix/Linux 服务端程序一样,存放着自己的进程id。
3)socket file
socket 文件也是在Unix/Linux 环境下才有的,用户在Unix/Linux 环境下客户端连接可以不通过TCP/IP 网络而直接使用Unix Socket 来连接MySQL。
mysql有两种连接方式,常用的一般是tcp
mysql –h mysql主机ip -uroot -pxxx
mysql -S /path /mysql.sock
这里写图片描述
注:采用unix socket连接方式,比用tcp的方式更快,但只适用于mysql和应用同在一台PC上。

mysql的连接方式:
1.TCP/IP连接:默认连接方式
2.unix socket连接:比TCP/IP方式快,但只适用于mysql用户和mysql应用在同一台PC上的用户

MySQL自带工具使用介绍
MySQL在存储数据的同时,还提供了大量的客户端工具程序,如mysql,mysqladmin,mysqldump等
1.mysql [OPTIONS] [database]
例如:mysql -e
这里写图片描述
可以不进入mysql使用mysql命令

猜你喜欢

转载自blog.csdn.net/leo15561050003/article/details/73836147