MyISAM

二十四、mysql数据备份与还原

左心房为你撑大大i 提交于 2019-12-02 06:17:08
数据表备份与还原 备份: 将当前已有的数据或者记录保留。 还原: 将已经保留的数据恢复到对应的表中。 做备份和还原的原因: 防止数据丢失 被盗、误删除等 保护数据记录 数据备份还原的方式有: 数据表备份、单表数据备份、SQL备份、增量备份。 数据表备份 定义: 不需要通过SQL来备份,直接进入到数据库文件夹复制对应的表结构及数据文件,以后还原的时候,直接将备份的内容放进去即可。 数据表备份有前提条件, 根据不同的存储引擎有不同的区别; 存储引擎: mysql进行数据存储的方式,主要是innodb和myisam两种; 各种存储引擎简介如下图: myisam和innodb存储引擎的对比: innodb只有表结构,数据全部存储到idbatal文件中;而myisam表数据和索引全部单独分开存储,其中.frm是结构文件,.myd是数据,.myi是索引,这种文件备份通常适用于myisam引擎,直接复制三个文件即可;而innodb的数据表是依赖于数据库的,不能单独拿出一个表进行使用; 单表数据备份 定义: 每次只能备份一张表,只能备份数据(表结构不能备份),通常的使用是将表的数据进行导出,导出到文件; 基本的备份操作: 从表中选出一部分数据保存到外部的文件中(outfile) 基本语法: select */字段列表 into outfile 文件所在路径 from 数据源; 注意事项

聚簇索引与非聚簇索引

廉价感情. 提交于 2019-12-02 05:49:24
聚簇索引与非聚簇索引(也叫二级索引) 通俗点讲 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因 澄清一个概念:innodb中,在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找,非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引,辅助索引叶子节点存储的不再是行的物理位置,而是主键值 何时使用聚簇索引与非聚簇索引 cluster.png 聚簇索引具有唯一性 由于聚簇索引是将数据跟索引结构放到一块,因此一个表仅有一个聚簇索引 一个误区:把主键自动设为聚簇索引 聚簇索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键来作为聚簇索引。InnoDB 只聚集在同一个页面中的记录。包含相邻健值的页面可能相距甚远。如果你已经设置了主键为聚簇索引,必须先删除主键,然后添加我们想要的聚簇索引,最后恢复设置主键即可。 此时其他索引只能被定义为非聚簇索引。这个是最大的误区

MySQL各大存储引擎

痴心易碎 提交于 2019-12-02 05:02:33
MySQL各大存储引擎: 最好先看下你下的MySQL支持什么数据库引擎 存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Blackhole, 5. CSV, 6. Performance_Schema, 7. Archive, 8. Federated , 9 Mrg_Myisam 但是我们主要分析使用MyIsam 和InnoDB。其余略微带过,详情请分别百度。 (1)InnoDB: 定义: (默认的存储引擎) InnoDB是一个事务型的存储引擎,有行级锁定和外键约束。 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别,关于数据库事务与其隔离级别的内容请见数据库事务与其隔离级别这类型的文章。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎不支持FULLTEXT类型的索引,而且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时需要扫描全表。当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。但是使用行级锁也不是绝对的

MySQL学习笔记:count(1)、count(*)、count(字段)的区别

[亡魂溺海] 提交于 2019-12-02 02:44:36
关于数据库中行数统计,无论是MySQL还是Oracle,都有一个函数可以使用,那就是COUNT。 但是,就是这个常用的COUNT函数,却暗藏着很多玄机,尤其是在面试的时候,一不小心就会被虐。不信的话请尝试回答下以下问题: 1、COUNT有几种用法? 2、COUNT(字段名)和COUNT(*)的查询结果有什么不同? 3、COUNT(1)和COUNT(*)之间有什么不同? 4、COUNT(1)和COUNT(*)之间的效率哪个更高? 5、为什么《阿里巴巴Java开发手册》建议使用COUNT(*) 6、MySQL的MyISAM引擎对COUNT(*)做了哪些优化? 7、MySQL的InnoDB引擎对COUNT(*)做了哪些优化? 8、上面提到的MySQL对COUNT(*)做的优化,有一个关键的前提是什么? 9、SELECT COUNT(*) 的时候,加不加where条件有差别吗? 10、COUNT(*)、COUNT(1)和COUNT(字段名)的执行过程是怎样的? 以上10道题,如果可以全部准确无误的回答的话,那说明你真的很了解 COUNT 函数了。 1.初识COUNT 1、 COUNT(expr) ,返回SELECT语句检索的行中expr的值不为NULL的数量。结果是一个 BIGINT 值。 2、如果查询结果没有命中任何记录,则返回0 3、但是,值得注意的是, COUNT(*) 的统计结果中

MySQL的COUNT函数

六月ゝ 毕业季﹏ 提交于 2019-12-02 02:06:22
COUNT()函数主要用于统计表行数,主要用法是COUNT( * )、COUNT(1)和COUNT(字段名)。 因为COUNT( * )是SQL92定义的标准统计行数的语法,所以MySQL对它进行了很多优化。 MyISAM不支持事务,MyISAM中的锁是表级锁InnoDB支持事务,支持行级锁。MyISAM表级锁,所以同张表上的操作是串行的,所以MyISAM做了个优化,把表的总行数单独记录下来供COUNT( * )查询[表级锁,不会有并发的数据库行数修改,得到的行数是准确的]。而InnoDB支持事务,其中大部分操作是行级锁,所以表的行数可能被并发修改,就不缓存记录总行数了而是扫表,InnoDB中索引分聚簇索引和非聚簇索引,聚簇索引的叶子节点中保存整行记录,而非聚簇索引的叶子节点保存的是该行记录的主键的值。扫表的时候选择最小的非聚簇索引。 当然,这些优化的前提是没有进行where和group的条件查询。 InnoDB中COUNT( *)和COUNT(1)实现上没有区别,而且效率一样。但是COUNT(字段名)需要进行全表扫描,然后进行字段非NULL判断,所以效率更低。 来源: https://www.cnblogs.com/qiaoqianshitou/p/11725135.html

[转载]MySQL的存储引擎

限于喜欢 提交于 2019-12-01 20:14:23
[转载]MySQL的存储引擎 来源: https://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html 其实这是个只有在MySQL中才存在的问题。 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合。 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。 1 MyISAM: 这种引擎是mysql最早提供的。这种引擎又可以分为静态MyISAM、动态MyISAM 和压缩MyISAM三种: 静态MyISAM: 如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型。因为数据表中每一条记录所占用的空间都是一样的,所以这种表存取和更新的效率非常高。当数据受损时,恢复工作也比较容易做。 动态MyISAM: 如果数据表中出现varchar、xxxtext或xxxBLOB字段时,服务器将自动选择这种表类型。相对于静态MyISAM,这种表存储空间比较小,但由于每条记录的长度不一,所以多次修改数据后

MySQL Atomic UPDATE in InnoDB vs MyISAM

空扰寡人 提交于 2019-12-01 17:18:58
Is this "compare and swap" statement always atomic regardless of engine (e.g. InnoDB or MyISAM)? : UPDATE tbl_name SET locked=1 WHERE id=ID AND locked <> 1; I ask this because I intend to use this statement to do pseudo row-level locking that is compatible with both transactional and non-transactional database tables. This is the method that is recommended for MyISAM , but I am uncertain as to whether this works for InnoDB since the documentation suggests using transactions instead. Yes. In InnoDB, the row will be locked (make you have an unique index on id, the update locks all rows it has to

MySQL运行机制原理&架构

谁说胖子不能爱 提交于 2019-12-01 16:48:42
1.MySQL知识普及: MySQL是一个开放源代码的关系数据库管理系统。 MySQL架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。 2.MySQL逻辑架构: 1).Connectors MySQL首先是一个网络程序,其在TCP之上定义了自己的 应用层协议 。所以要使用MySQL,我们可以编写代码,跟MySQL Server建立TCP连接,之后按照其定义好的协议进行交互。当然这样比较麻烦,比较方便的办法是调用SDK,比如Native C API、JDBC、PHP等各语言MySQL Connector,或者通过ODBC。但通过SDK来访问MySQL,本质上还是在TCP连接上通过MySQL协议跟MySQL进行交互。 2).Connection Management 每一个基于TCP的网络服务都需要管理客户端链接,MySQL也不例外。MySQL会为每一个连接绑定一个线程,之后这个连接上的所有查询都在这个线程中执行。为了避免频繁创建和销毁线程带来开销,MySQL通常会缓存线程或者使用线程池,从而避免频繁的创建和销毁线程。 客户端连接到MySQL后,在使用MySQL的功能之前,需要进行认证,认证基于用户名、主机名、密码。如果用了SSL或者TLS的方式进行连接,还会进行证书认证。 3).SQL

大牛总结的MySQL锁优化【转】

泪湿孤枕 提交于 2019-12-01 16:28:57
MySQL 就是其中之一,它经历了多个版本迭代。数据库锁是 MySQL 数据引擎的一部分,今天我们就一起来学习 MySQL 的数据库锁和它的优化。 MySQL 锁分类 当多个事务或者进程访问同一个资源的时候,为了保证数据的一致性,就需要用到锁机制。 从锁定资源的角度来看,MySQL 中的锁分为: 表级锁 行级锁 页面锁 表级锁:对整张表加锁。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:对某行记录加锁。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。 在实际开发过程中,主要会使用到表级锁和行级锁两种。既然锁是针对资源的,那么这些资源就是数据,在 MySQL 提供插件式存储引擎对数据进行存储。 插件式存储引擎的好处是,开发人员可以根据需要选择适合的存储引擎。 在众多的存储引擎中,有两种引擎被比较多的使用,他们分别是: MyISAM 存储引擎,它不支持事务、表锁设计,支持全文索引,主要面向一些在线分析处理(OLAP)数据库应用。说白了主要就是查询数据,对数据的插入,更新操作比较少。 InnoDB 存储引擎,它支持事务,其设计目标主要面向在线事务处理(OLTP)的应用。 其特点是行锁设计、支持外键,并支持类似于 Oracle