MariaDB—— 14.存儲引擎

mysql中,存儲引擎是插件式的,同一個數據庫中的不同的表可以使用不同的存儲引擎,所以,存儲引擎是表級別的概念,存儲引擎也被稱爲"表類型",每張表可以使用不同的存儲引擎類型。
目前來說,mysql中最常用的存儲引擎爲innodb與myisam,每種存儲引擎都有自己的特性,適用於不同的場景,那麼,我們先來對比一下最常用的兩種存儲引擎的特性
MYISAM:支持表級鎖,不支持行級鎖,不支持事務,不支持外檢約束,支持全文索引,表空間文件相對小。
INNODB:支持表級鎖,行級鎖,支持事務,支持外檢,不支持全文索引,表空間文件相對較大。
除了上述最長用的兩種存儲引擎,其他各存儲引擎類型的特性如下:
CSV:將CSV文件(以逗號分隔字段的文本文件)作爲MySQL表文件。
MRG_MYISAM:此引擎也被稱爲MERGE存儲引擎,如果一些myisam表的表結構完全相同,可以將這些MyISAM表合併成的一張MRG_MYISAM虛擬表。
BLACKHOLE:類似於/dev/null,不真正存儲數據。
MEMORY:內存存儲引擎,速度快,但是一旦斷電數據將會丟失,支持hash索引,支持表級鎖,常用於臨時表。
PERFORMANCE_SCHEMA:從mysql5.5之後, 多出了PERFORMANCE_SCHEMA數據庫,PERFORMANCE_SCHEMA數據庫中的表的表類型均爲 PERFORMANCE_SCHEMA,此數據庫用於存儲與數據庫的性能相關的信息,用戶無法創建使用這種存儲引擎的表,但是dba可以通過 PERFORMANCE_SCHEMA數據庫中的信息進行性能分析,PERFORMANCE_SCHEMA數據庫服務啓動後此庫中將不斷的收集數 據,mysql停機後此庫中的表將不存在數據,類似於linux中的/proc。
FEDERATED: 用於訪問其它遠程MySQL服務器上表的存儲引擎接口。
ARCHIVE: 見名知義,創建此種表類型的表往往用於存儲歸檔信息、安全審計信息、歷史信息等,創建數據倉庫時,可能會用到此種表類型,使用archive表類型的表只支持select和insert操作,不能更新和刪除操作,支持行級鎖。
FEDERATED:利 用federated引擎可將本地數據表映射至遠程 MySQL 數據表,從而就可以解決應用程序中繁多的跨機器連接數據庫問題,其 實federated相當於一個訪問其他遠程mysql server的代理接口,它通過創建一個到遠程mysql server的客戶端連接,通過FEDERATED引擎創建的表只是在本地有表定義文件,數據文件則存在於遠程數據庫中。

查看存儲引擎

MariaDB [(none)]> show engines;
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                          | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| MRG_MyISAM         | YES     | Collection of identical MyISAM tables                                            | NO           | NO   | NO         |
| CSV                | YES     | Stores tables as CSV files                                                       | NO           | NO   | NO         |
| SEQUENCE           | YES     | Generated tables filled with sequential values                                   | YES          | NO   | YES        |
| MyISAM             | YES     | Non-transactional engine with good performance and small data footprint          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                        | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES          | YES  | YES        |
| Aria               | YES     | Crash-safe tables with MyISAM heritage                                           | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                               | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
8 rows in set (0.00 sec)
MariaDB [(none)]> show create table mysql.user
..............
  `max_statement_time` decimal(12,6) NOT NULL DEFAULT 0.000000,
  PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges' |

查看所有表的存儲引擎

MariaDB [mysql]> show table status \G

查看指定表的存儲引擎

MariaDB [mysql]> show table status  like 'tables' \G

指定存儲引擎

mysql> create table test1(id int primary key,name varchar(30)) engine=innodb;
Query OK, 0 rows affected (0.01 sec)

修改存儲引擎

mysql> alter table test1 engine=innodb;
Query OK, 0 rows affected (0.01 sec)

設定默認存儲引擎

vim my.cnf
default-storage-engine=innodb  
innodb_file_per_table #每表使用單獨的表空間
[root@node1 bin]# rpm -qc rh-mysql57-mysql-server
/etc/logrotate.d/rh-mysql57-mysqld
/etc/opt/rh/rh-mysql57/my.cnf.d/rh-mysql57-mysql-server.cnf
/opt/rh/rh-mysql57/service-environment
/var/opt/rh/rh-mysql57/log/mysql/mysqld.log
[root@node1 bin]# cat /etc/opt/rh/rh-mysql57/my.cnf.d/rh-mysql57-mysql-server.cnf
#
# These groups are read by MySQL server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#

# this is read by the standalone daemon and embedded servers
[server]

# this is only for the mysqld standalone daemon
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld/mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld]
datadir=/var/opt/rh/rh-mysql57/lib/mysql
................
[root@node1 bin]# cd /var/opt/rh/rh-mysql57/lib/mysql
[root@node1 mysql]# ls
auto.cnf  ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1  mysql_upgrade_info  private_key.pem  server-cert.pem  sys
blueicex  ca.pem      client-key.pem   ibdata1         ib_logfile1  mysql   performance_schema  public_key.pem   server-key.pem
[root@node1 mysql]# cd blueicex/
[root@node1 blueicex]# ls
db.opt  test1.frm  test1.ibd

每張表都有兩種後綴名的文件,分別爲frm後綴與ibd後綴。
frm後綴的文件中存儲了表的表結構信息。
ibd後綴的文件中存放了表的數據信息與索引信息。
如果在配置文件中沒有開啓innodb_file_per_table參數,在數據庫對應的目錄中則不會出現 .ibd 爲後綴的文件,因爲默認情況下會共用ibdata1,如果在一開始沒有開啓innodb_file_per_table,並且已經存在某些使用 innodb存儲類型的表,那麼這些表將共用ibdata1,如果這時,又開啓了innodb_file_per_table,那麼原來的表的數據仍然存 在於ibdata1中,新創建的表纔會使用單獨的以.ibd爲後綴的表空間文件。
使用了myisam類型的存儲引擎,每張表都有三種後綴名的文件,分別是.frm後綴、.MYD後綴、.MYI後綴。
frm後綴的文件中存放了表結構信息。
MYD後綴的文件中存放了數據信息。
MYI後綴的文件中存放了索引信息。

————Blueicex 2020/3/28 20:30 [email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章