数据库存储引擎—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

相关推荐

  • 马哥网络21-第5周作业

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; [root@localhost proc]# grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf root (hd0,0) kernel /vmlinuz-2…

    Linux干货 2016-08-08
  • 相关练习

    1、请使用命令行展开功能来完成以下练习:    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d  mkdir /tmp/{a,b}_{c,d}    (2)、创建/tmp/mylinux目录下的:  mkdir -pv /tmp/mylinux/{bin,boot/grub,de…

    Linux干货 2016-11-05
  • 用“逐步排除”的方法定位Java服务线上“系统性”故障

    一、摘要 由 于硬件问题、系统资源紧缺或者程序本身的BUG,Java服务在线上不可避免地会出现一些“系统性”故障,比如:服务性能明显下降、部分(或所有)接口超 时或卡死等。其中部分故障隐藏颇深,对运维和开发造成长期困扰。笔者根据自己的学习和实践,总结出一套行之有效的“逐步排除”的方法,来快速定位Java 服务线上“系统性”故障。 二、导言 Java 语言是广…

    2015-02-28
  • PHP字符串的编码问题

        大家都知道,不同字符编码,其在内存占用的字节数不一样。如ASCII编码字符占用1个字节,UTF-8编码的中文字符是3字节,GBK为2个字节。     PHP 也自带几种字符串截取函数,其中常用到的就是 substr 和 mb_substr。     使用substr截取中…

    Linux干货 2015-10-22
  • N28第五周

    1、简述rpm与yum命令的常见选项,并举例
    2、自建yum仓库,分别为网络源和本地源
    3、简述at和crontab命令,制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00
    4、简述sed常用操作命令,并举例

    Linux干货 2018-01-03
  • Linux文本处理工具grep,egrep

    简介:     grep即(Global search REgular expression and Print out the line)全局的搜索正则表达式并且打印显示出来。     通俗点讲:根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。 &n…

    Linux干货 2015-05-11