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存儲引擎,創建的數據庫對應的文件夾中,只有表的結構和定義,數據,在數據庫目錄下,這樣不好??梢赃M行改進
每個表,都會有自己獨立的表文件了
啟用: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.www58058.com/91620