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