当前位置: 首页 > news >正文

MySQL存储引擎和日志管理

MySQL存储引擎和日志管理

    • 一、存储引擎的概念
      • 1、Myisam的特点
      • 2、Myisam表支持 3 种不同的存储格式
      • 3、innodb
      • 4、死锁
      • 5、查看系统支持的存储引擎
      • 6、查看表使用的存储引擎
      • 7、修改存储引擎
      • 8、通过 create table 创建表时指定存储引擎
    • 二、日志管理
      • 1、错误日志
      • 2、通用查询日志
      • 3、慢查询日志
      • 4、二进制日志
      • 5、日志查询

一、存储引擎的概念

  • MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎。

  • 存储引擎是MySQL将数据存储在文件系统中的存储方式或者存储格式

  • MySQL常用的存储引擎:MylSAM,InnoDB。

  • MySQL数据库中的组件,负责执行实际的数据I/O操作。

  • MySQL系统中,存储引擎处于文件系统之上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储。

1、Myisam的特点

MyISAM不支持事务,也不支持外键约束,只支持全文索引,数据文件和索引文件是分开保存的。

访问速度快,对事务完整性没有要求。
MyISAM 适合查询、插入为主的应用。

MyISAM在磁盘上存储成三个文件,文件名和表名都相同,但是扩展名分别为
.frm 文件存储表结构的定义
数据文件的扩展名为 .MYD (MYData)
索引文件的扩展名是 .MYI (MYIndex)

表级锁定形式,数据在更新时锁定整个表
数据库在读写过程中相互阻塞:
会在数据写入的过程阻塞用户数据的读取
也会在数据读取的过程中阻塞用户的数据写入
数据单独写入或读取,速度过程较快且占用资源相对少

2、Myisam表支持 3 种不同的存储格式

(1)静态(固定长度)表
静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。
(2)动态表
动态表包含可变字段,记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁的更新、删除记录会产生碎片,需要定期执行 OPTIMIZE TABLE 语句或 myisamchk -r 命令来改善性能,并且出现故障的时候恢复相对比较困难。
(3 )压缩表
压缩表由 myisamchk 工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。

3、innodb

(1)支持事务,支持4个事务隔离级别(数据不一致问题)
MySQL从5.5.5版本开始,默认的存储引擎为 InnoDB
5.5之前默认是myisam
(2)读写阻塞与事务隔离级别相关
能非常高效的缓存索引和数据
表与主键以簇的方式存储
支持分区、表空间,类似oracle数据库
支持外键约束,5.5前不支持全文索引,5.5后支持全文索引
(3)对硬件资源要求还是比较高的场合
行级锁定,但是全 表扫描仍然会是表级锁定,如
update table set a=1 where user like ‘%lic%’;
(4)InnoDB 中不保存表的行数
如 select count() from table; 时,InnoDB 需要扫描一遍整个表来计 算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。需要注意的是,当 count()语句包含 where 条件时 MyISAM 也需要扫描整个表。对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其他字段一起建立组合索引。

清空整个表时,InnoDB 是一行一行的删除,效率非常慢。Myisam 则会重建表

4、死锁

(1)MyISAM:表级锁定 innodb :行级锁定
当两个请求分别访问/读取2行记录,同时又需要读取对方的记录数据,因为(行锁的限制)而造成了阻寨的现象

(2)如何解决死锁

  1. 业务场景如果并发两大,什么并发量大,读写的并发量大,那我们建议使用innoDB
  2. 如果单独的写入或是插入单独的查询,那我们建议使用没有INNODB

表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢:会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

MyISAM不支持事务,也不支持外键约束,只支持全文索引,数据文件和索引文件是分开保存的需要考虑每个存储引擎提供了哪些不同的核心功能及应用场景。

锁定类型:不同存储引擎支持不同级别的锁定

  • 表锁定:myisam支持。
  • 行锁定:innodb支持。

索引的支持

  • 建立索引在搜索和恢复数据库中的数据时能显著提高性能

  • 不同的存储弓|擎提供不同的制作索引的技术

  • 有些存储引擎根本不支持索引

  • 事务处理的支持

  • 提高在向表中更新和插入信息期间的可靠性

  • 根据企业业务是否要支持事务选择存储引擎

5、查看系统支持的存储引擎

mysql> show engines;

在这里插入图片描述

6、查看表使用的存储引擎

方法一:show table status from 库名 where name='表名'\G;例:show table status from db2 where name='account'\G

在这里插入图片描述

方法二:use 库名;
show create table 表名;例:use db2;
show create table account;

在这里插入图片描述

7、修改存储引擎

(1)通过 alter table 修改

use 库名;
alter table 表名 engine=MyISAM;例:use db2;
alter table account engine=myisam;
show create table account\G

在这里插入图片描述
(2)通过修改 /etc/my.cnf 配置文件

修改 /etc/my.cnf 配置文件,指定默认存储引擎并重启服务

quit
vim /etc/my.cnf
[mysqld]
default-storage-engine=INNODBsystemctl restart mysqld.service
#注意:此方法只对修改了配置文件并重启mysql服务后新创建的表有效,已经存在的表不会有变更。

在这里插入图片描述
在这里插入图片描述
注:此方法只对修改了配置文件并重启mysql服务后新创建的表有效,已经存在的表不会有变更。

8、通过 create table 创建表时指定存储引擎

use 库名;
create table 表名(字段1 数据类型,...) engine=MyISAM;例:mysql -u root -p
use db2;
create table emp(id int,name char,age int) engine=myisam;   #创建表时指定引擎show table status from db2 where name='emp'\G      #查看引擎

在这里插入图片描述

二、日志管理

1、错误日志

错误日志,用来记录当MySQL启动、停止或运行时发生的错误信息,默认已开启。

 vim /etc/my.cnf[mysqld]log-error=/home/mysql/mysql_error.log   #指定日志的保存位置

2、通用查询日志

通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的。

 vim /etc/my.cnf[mysqld]general_log=ONgeneral_log_file=/home/mysql/mysql_general.log

3、慢查询日志

慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,以便于优化,默认是关闭的。

   vim /etc/my.cnf[mysqld]slow_query_log=ONslow_query_log_file=/home/mysql/mysql_slow_query.log long_query_time=5    #慢查询时间,设置超过5秒执行的语句被记录,缺省时为10秒

4、二进制日志

二进制日志(binlog)用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认已开启。

  vim /etc/my.cnf[mysqld]log-bin=mysql-bin      #也可以log_bin=mysql-bin#使用相对路径,则文件存储在默认目录/usr/local/mysql/data/中

5、日志查询

#登入mysql
mysql -u root -p[密码]#查看通用查询日志是否开启
show variables like 'general%';	
#查看二进制日志是否开启
show variables like 'log_bin%';									
#查看慢查询日功能是否开启
show variables like '%slow%';								
#查看慢查询时间设置
show variables like 'long_query_time';						
#在数据库中设置开启慢查询的方法
set global slow_query_log=ON;									
http://www.lryc.cn/news/39825.html

相关文章:

  • Arduino 驱动DS1307时钟模块使用介绍
  • 为什么 Python 没有 main 函数?
  • 【无标题】使用Bibtex4word 整理毕业论文参考文献
  • 19--网络API(java版)
  • ElasticSearch - 分片内部原理之动态更新索引、近实时搜索、持久化变更、段合并
  • 模拟数据采集卡之ADCTDC 模拟时间/数字转换器组合应用选型指南
  • R语言编程基础
  • 2023-03-15:屏幕录制并且显示视频,不要用命令。代码用go语言编写。
  • STM32外设-DMA
  • 【面试题】面试官:如果后端给你 1w 条数据,你如何做展示?
  • 第十二届蓝桥杯省赛详解
  • ssh创建秘钥对
  • JS中sort()方法返回值?
  • 07从零开始学Java之如何正确的编写Java代码?
  • Python学习笔记14:网络编程
  • 初入了解——什么是VUE
  • 代码规范(C++)
  • React教程详解四(hooks、pureComponent、Context通信、错误边界、children props与render props)
  • 【Spring从成神到升仙系列 二】2023年再不会 IOC 源码,就要被淘汰了
  • 菜鸟的进阶--手写一个小型dubbo框架
  • js逆向爬取某音乐网站某歌手的歌曲
  • 为什么软件测试面试了几个月都没有offer,从HR角度分析
  • DC-7 靶场学习
  • 深入理解JavaScript的事件冒泡与事件捕获
  • 格密码学习笔记(六):格中模运算
  • 【C++】非常重要的——多态
  • 发票账单很多?python助你批量完成数据提取
  • [闪存2.1] NAND FLASH特性串烧 | 不了解闪存特性,你能用好闪存产品吗?
  • 面试官问我按钮级别权限怎么控制,我说v-if,面试官说再见
  • 阿里云服务器使用教程:CentOS 7安装nginx详细步骤