1. 程式人生 > >超詳細MySQL常用數據庫引擎

超詳細MySQL常用數據庫引擎

dex 數據庫服務器 安裝 操作 查看 password 特點 常用 emctl

存儲引擎簡介

MySQL中的數據用各種不同的技術存儲在文件中,每一種技術都使用不同的存儲機制、索引技巧、鎖定水平並最終提供不同的功能和能力,這些不同的技術以及配套的功能在MySQL中稱為存儲引擎。存儲引擎就是MySQL將數據存儲在文件西永中的存儲方式或者存儲格式。MySQL存儲引擎就是MySQL數據庫服務器中的組件,負責為數據庫執行時機的數據I/O操作。使用特殊存儲引擎的主要有點之一在於,僅需提供特殊應用所需的特性,數據庫中的系統開銷較小,具有更有效和更高的數據庫性能。MySQL系統中,存儲引擎處於文件系統之上,在數據保存到數據文件之前會傳輸到存儲引擎,之後按照各個存儲引擎的存儲格式進行存儲

常見存儲引擎

  • MyISAM
  • InnoDB

MyISAM特點

1.不支持事務
2.表級鎖定形式,數據在更新時鎖定整個表
3.數據庫在讀寫過程中相互阻塞
在數據寫入的過程阻塞用戶數據的讀取
在數據讀取的過程中阻塞用戶的數據寫入
4.過key_buffer_size來設置緩存索引,提高訪問性能,減少磁盤IO的壓力
5.MyISAM存儲引擎數據單獨寫入或讀取,速度過程較快且占用資源相對少
6.ISAM存儲引擎不支持外鍵約束,只支持全文索引
7.MyISAM在磁盤上存儲成三個文件,每一個文件的名字以表的名字開始,擴展名指出文件類型:
.frm文件存儲表定義 #表頭、屬性等等
數據文件的擴展名.MYD(MYData)
索引文件的擴展名為.MYI(MYIndex)

MyISAM適用的生產場景舉例

1.公司業務不需要事務的支持
2.一般單方面讀取數據比較多的業務,或單方面寫入數據比較多的業務,因為MyISAM具有讀寫互相阻塞的特點,數據讀寫比較頻繁的場景不適合使用
3.MyISAM存儲引擎數據讀寫都比較頻繁場景不合適
4.使用讀寫並發訪問相對較低的業務
5數據修改相對較少的業務
6.對數據業務一致性要求不是非常高的業務
7.服務器硬件資源相對比較差

InnoDB特點

1.事務,支持四個事務隔離級別
2.鎖定,但是全表掃描仍然會是表級鎖定
3.阻塞與事務隔離級別相關
4.非常高效的緩存特性,能緩存索引,也能緩存數據
5.主鍵以簇的方式存儲
6.分區、表空間、類似Oracle數據庫

7.外鍵約束,5.5.之前不支持全文索引,5.5版本以後支持全文索引
8.件資源要求還是比較高的場合

InnoDB適用生產場景分析

1.業務需要事務的支持
2.行級鎖定對並發有很好的適應能力,但需確保查詢是通過索引來完成
3.業務數據更新較為頻繁的場景,如:論壇,微博等
4.業務數據一致性要求較高,例如:銀行業務
5.硬件設備內存較大,利用Innodb較好的緩存能力來提高內存利用率,減少磁盤IO的壓力

配置合適的存儲引擎

1、查看數據庫可配置的存儲引擎類型

技術分享圖片

2、查看表正在使用的存儲引擎

1).使用show table status命令查看表正在使用的存儲引擎

mysql> show table status from school where name=‘student‘\G;
school:指定當前的庫
student:指定當前的表
技術分享圖片

2).使用show create命令查看表正在使用的存儲引擎

mysql> use school; #進入數據庫
mysql> show create table student;
技術分享圖片

3、修改存儲引擎

1).方法1:使用alter table命令修改

mysql> use school
mysql> alter table student engine=MyISAM;
mysql> show create table student\G;
技術分享圖片

2).方法2:修改my.cnf主配置文件,指定默認存儲引擎

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

[mysqld]標簽中添加以下參數
[mysqld]
default-storage-engine=MyISAM

[root@redhat7_5 ~]# systemctl restart mysqld.service #重啟服務

mysql> use school
mysql> create table teacher(id int not null primary key auto_increment,tname varchar(10));
mysql> show create table teacher\G;
技術分享圖片

3).方法3:create table創建表時指定存儲引擎

mysql> use school
mysql> create table class(id int ,cname varchar(20)) engine=InnoDB; #創建庫,指定引擎InnoDB
mysql> show create table class\G;

4).5.5版本使用mysql_convert_table_format轉化存儲引擎

[root@redhat7_4 ~]# yum -y install perl-DBI perl-DBD-MySQL #需要安裝相關perl語言包
mysql> show create table test.info\G;
技術分享圖片

[root@redhat7_4 ~]# vim /usr/local/mysql/bin/mysql_convert_table_format
"e|engine|type=s" => \engine, #32行進行修改

[root@redhat7_4 ~]# mysql_convert_table_format --user=root --password=123 --host=localhost --socket=/tmp/mysql.sock --type=MyISAM test info

解析:
mysql_convert_table_format #批量轉換存儲引擎
--force                    #碰到錯誤強制進行轉換
--host                     #指定轉換的主機
--user                     #指定連接的用戶
--password                 #指定連接的用戶密碼
--socket                   #指定socket文件存在的位置
--port                     #指定端口,如果不是"localhost"可以不指定

[root@redhat7_4 ~]# mysql -uroot -p -e "show create table test.info\G;"
技術分享圖片

5).5.7版本

[root@redhat7_5 ~]# yum -y install perl-DBI perl-DBD-MySQL #需要安裝相關perl語言包

[root@redhat7_5 ~]# ls /usr/local/mysql/bin/mysql_c
技術分享圖片

超詳細MySQL常用數據庫引擎