数据库存储引擎—InnoDB

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

14周-存储引擎

  • InnoDB引擎特点

支持事务,适合处理大量短期事务

行级锁

读写阻塞与事务隔离级别相关

可缓存数据和索引

支持聚簇索引

崩溃恢复性更好

支持MACC高并发

从MySQL5.5后支持全文索引

从MySQL5.5.5开始为默认的数据库引擎

 

删除数据库

MariaDB [dingDB]> drop database dingDB;

 

 

创建数据库的时候不定义存储引擎,存储引擎是基于表的,所以叫表类型,而不叫数据库类型

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hellodb` /*!40100 DEFAULT CHARACTER SET utf8 */;

 

即使是一个数据库中,也可两张表使用不同的存储引擎,这样做容易乱,不要这样玩!

 

从运维标准化来讲,应该用一种,要想实现自动化,就需要先实现标准化,标准化是运维自动化的前提。

 

也可以在导出的文件中,把MyISAM存储引擎的数据库,修改为InnoDB的存储引擎,替换一下ENGINE=InnoDB就好

 

 

[root@localhost ~]# sed -i.bak ‘s/ENGINE=MyISAM/ENGINE=InnoDB/g’ hellodb_MyISAM.sql

 

[root@localhost ~]# ll

-rw-r–r–. 1 root root 7786 Feb  8 05:12 hellodb_MyISAM.sql

-rw-r–r–. 1 root root 7786 Feb  7 18:24 hellodb_MyISAM.sql.bak

 

 

导入数据库

[root@localhost ~]# mysql < hellodb_MyISAM.sql

 

 

查看

MariaDB [(none)]> show table status from hellodb\G

*************************** 1. row ***************************

Name: classes

Engine: InnoDB

Version: 10

Row_format: Compact

 

InnoDB的小缺点是不支持全文索引,后来才支持,在一个大文章中搜索关键字

[c] InnoDB support for FULLTEXT indexes is available in MySQL 5.6 and later.

 

存放文件的类型,只哟偶表结构,表数据在数据库目录下

[root@localhost /var/lib/mysql/hellodb]# ll

total 88

-rw-rw—-. 1 mysql mysql 8636 Feb  8 05:13 classes.frm

 

数据文件

[root@localhost /var/lib/mysql]# ll

-rw-rw—-. 1 mysql mysql 18874368 Feb  7 21:20 ibdata1

 

修改导入的数据库备份文件

[root@localhost ~]# vim hellodb_MyISAM.sql

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hellodb2` /*!40100 DEFAULT CHARACTER SET utf8 */;

 

USE `hellodb2`;

 

重新导入

[root@localhost ~]# mysql < hellodb_MyISAM2.sql

 

查看

MariaDB [(none)]> show databases;

| hellodb            |

| hellodb2           |

 

本地数据文件,没有变大,文件的大小已经能够放的下新导入的数据了,时间变了

[root@localhost /var/lib/mysql]# ll -h

-rw-rw—-. 1 mysql mysql  18M Feb  7 21:22 ibdata1

 

不同的数据库,都是InnoDB存储引擎,创建的数据库对应的文件夹中,只有表的结构和定义,数据,在数据库目录下,这样不好。可以进行改进

 

每个表,都会有自己独立的表文件了

启用:innodb_file_per_table=ON

两类文件放在数据库独立目录中

 

修改配置文件

[root@localhost ~]# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

innodb_file_per_table ON可以不加,默认就是NO

 

 

MariaDB [hellodb2]> show variables like ‘%innodb_file_per_table%’;

+———————–+——-+

| Variable_name         | Value |

+———————–+——-+

| innodb_file_per_table | ON    |

+———————–+——-+

1 row in set (0.00 sec)

 

重启服务

[root@localhost ~]# systemctl restart mariadb

 

旧的数据不会拆成多个文件,新的会放到独自的文件夹中

 

删除数据库重新导入一次

MariaDB [(none)]> drop database hellodb2;

 

MariaDB [(none)]> source /root/hellodb_MyISAM.sql

 

 

拆分前

[root@localhost /var/lib/mysql/hellodb]# ll

total 88

-rw-rw—-. 1 mysql mysql 8636 Feb  8 07:51 classes.frm

-rw-rw—-. 1 mysql mysql 8630 Feb  8 07:51 coc.frm

 

拆分后的表

[root@localhost /var/lib/mysql/hellodb2]# ll

total 1432

-rw-rw—-. 1 mysql mysql  8636 Feb  8 07:53 classes.frm 表定义、表结构

-rw-rw—-. 1 mysql mysql 98304 Feb  8 07:53 classes.ibd 表数据、表索引

-rw-rw—-. 1 mysql mysql  8630 Feb  8 07:53 coc.frm

-rw-rw—-. 1 mysql mysql 98304 Feb  8 07:53 coc.ibd

 

索引和数据都放入到单独的文件中了

 

修改配置文件后,添加的InnoDB表才会拆成两个文件!

 

 

把文件备份数来、先停止数据库,拷贝数据库数据文件和表结构文件,做hash完整性校验,防止数据在拷贝的过程中丢失!

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/91620

(0)
无言胜千言无言胜千言
上一篇 2018-02-22 17:16
下一篇 2018-02-23 16:12

相关推荐

  • 第六周作业-练习题sed,crontab,bash

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;    方法一用sed:          方法二用vim       &…

    Linux干货 2017-01-16
  • N25第五周博客作业

    第五周博客作业   1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;   2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;   3、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行; &nbs…

    Linux干货 2016-12-28
  • 描述计算机的组成及其功能

    CPU:计算器,控制器,寄存器内存输入输出设备

    Linux干货 2016-08-15
  • 第十二周作业

    1、 请描述一次完整的http请求处理过程;  HTTP:超文本传输协议 完整的http请求过程 1)、建立TCP/IP连接:经过3次握手,建立连接或拒绝。 2)、浏览器向服务器发送HTTP请求。 3)、浏览器发送请求头信息。 4)、服务器应答:服务器接受请求后,会回送应答。 5)、服务器发送应答头信息。 6)、服务器向浏览器发送数据。 7)、服务…

    2017-05-17
  • 8-8 处理文本工具sed及vim文本编辑工具

    处理文本工具sed及vim文本编辑工具 Sed:   sed是一种在线编辑器、行编辑器,一次处理一行内容。在处理时,把当前处理的行存储在临时缓冲区中,该缓冲区称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完毕后,把缓冲区的内容送到标准输出;然后紧接着处理下一行,重复完成相同的操作,直到文件末尾;sed处理的整个过程中,对象文件…

    Linux干货 2016-08-11
  • Shell脚本编程基础之一

      Linux为高效管理系统,提供了CLI命令行接口,供用户在命令提示符下输入命令,它有很多bash shell基础特,根据这些特性能够很灵活的使用命令,也支持使同时输入多个命令执行,命令之间用冒号分隔;但是要完成复杂多次重复性的操作,非常不便,系统管理工作变得很是繁忙,很难轻松完成工作任务;不过Linux的shell支持脚本编程,通过编写纯文本格…

    Linux干货 2016-08-15