数据库存储引擎—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
下一篇 2018-02-23

相关推荐

  • Centos7 编译安装 zabbix3.0

    服务安装配置: 系统版本:CentOS Linux release 7.2.1511 (Core)   zabbix 安装 关闭firewall:   systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机…

    Linux干货 2016-06-23
  • 0805 作业

     201608051、当天课程内容笔记2、当天练习3、预习4、取本机ip地址 5、取各分区利用率的数值 6、统计/etc/init.d/functions 文件中每个单词出现的次数,并按频率从高到低显示 7、/etc/rc.d/init.d/functions或/etc/rc.d/init.d/functions/"  取目录名…

    Linux干货 2016-08-07
  • Linux 基础 (1)

    su nano shell type hash alias date cal screen echo $ tab (df bc rz(sz) ifconfig ping tty who whoami w) 1.用户  root为超级用户 1) useradd oracle  创建一个oracle用户     su &#…

    2017-07-13
  • Linux Network Manager

    Linux Network Manager Network简述 Switch,Router简述 Linux Network 配置方法 ifcfg家族命令 ip家族命令 rhel7 nmcli命令 配置文件 Network简述 Network是什么? 网络是将分布在地理位置不同的计算机通过物理线路的连接,在网络软件的管理下,实现数据通信的过程。&nb…

    Linux干货 2016-04-05
  • 第三次作业

    第三次作业 一、软链接与硬链接的区别    硬链接就是同一个文件使用了多个别名(他们有共同的 inode)。 硬链接可由命令 link 或 ln 创建,如: 1 2 #link oldfile newfile  #ln oldfile newfile   由于硬链接是有着相同 i…

    Linux干货 2016-08-03
  • 从需求和安全角度开始linux(一)-20151211

    突然想从需求和安全的角度来展开各种命令。因为我觉得linux中所有的常用命令基本都是需求和安全的产物。 当我打开一个CLI(command line interface)界面的linux操作系统时: 一、我希望能够看到里面有什么,因此有了ls的命令。      ls – list&nbs…

    Linux干货 2015-12-15