MySQL-版本及服務介紹

1、MySQL各版本

1.MySQL產品

下載地址:https://www.mysql.com/downloads/mysql

Oracle MySQL Cloud Service(commercial)
商業付費軟件,基於MySQL企業版和Oracle雲服務提供企業級的MySQL數據庫服務。linux

MySQL Enterprise Edition (commercial)
商業付費軟件,提供如下服務算法

  • MySQL Database(MySQL數據庫)
  • MySQL Storage Engines (InnoDB, MyISAM, etc.) (MySQL存儲引擎)
  • MySQL Connectors (JDBC, ODBC, .Net, etc.) (MySQL鏈接器)
  • MySQL Replication (MySQL複製)
  • MySQL Partitioning (MySQL分區)
  • MySQL Utilities (MySQL實用程序)
  • MySQL Workbench (MySQL建模工具)
  • MySQL Enterprise Backup (MySQL企業備份)
  • MySQL Enterprise Monitor (MySQL企業監視器)
  • MySQL Enterprise HA (MySQL企業高可用)
  • MySQL Enterprise Security (MySQL企業安全)
  • MySQL Enterprise Transparent Data Encryption (TDE) (MySQL企業透明數據加密)
  • MySQL Enterprise Firewall (MySQL企業防火牆)
  • MySQL Enterprise Encryption (MySQL企業加密)
  • MySQL Enterprise Audit (MySQL企業審計)

MySQL Cluster CGE (commercial)
商業付費軟件,基於MySQL Cluster和企業版擁有的各項功能提供企業級的高併發、高吞吐的數據庫服務。sql

MySQL Community Edition (GPL)
免費社區軟件,提供基礎的數據庫服務和其餘衍生服務。數據庫

2.MySQL社區產品服務

下載地址:https://dev.mysql.com/downloads/windows

MySQL Community Server (GPL)
MySQL社區服務是世界上最流行的開源數據庫。後端

MySQL Cluster (GPL)
MySQL集羣是一個實時的、開放源碼的事務數據庫。基於MySQL數據庫而實現的集羣服務,自身提供高併發高負載等特性。安全

MySQL Router (GPL)
MySQL路由器是輕量級的中間件,能夠在您的應用程序和任何後端MySQL服務器之間提供透明的路由。性能優化

MySQL Utilities (GPL)
MySQL實用程序提供了用於維護和管理MySQL服務器的命令行實用程序的集合。服務器

MySQL Shell (GPL)
是一個交互式的Javascript、Python或sql接口,支持的開發和管理MySQL服務,是MySQL服務的一個組件。

MySQL Workbench (GPL)
是一個下一代可視化數據庫設計應用程序,能夠用來高效地設計、管理和記錄數據庫模式。它既是開源的,也是商業版的。

MySQL Connectors
MySQL鏈接器提供了標準的數據庫驅動程序鏈接,以便使用與工業標準ODBC和jdbc兼容的應用程序和工具。

MySQL on Windows (Installer & Tools)
爲您提供了一套工具,用於開發和管理基於windows的MySQL業務關鍵應用程序。

MySQL Yum Repository
提供了一個Yum軟件庫,用於簡化在各類linux操做系統上安裝和更新MySQL產品。

MySQL APT Repository
MySQL provides an APT-style software repository for installing the MySQL server, client, and other components on a variety of Linux operating systems.
提供了一個APT-style軟件庫以便在各類linux操做系統上安裝MySQL服務器、客戶端和其餘組件。

MySQL SUSE Repository
MySQL存儲庫使用在包管理工具提供了一種簡單而方便的方法,能夠經過最新的軟件包來安裝和更新MySQL產品。

2、MySQL Community Server各版本

1.各版本主要區別

MySQL 4.0版本
增長了子查詢的支持,字符集增長UTF-8,GROUP BY語句增長了ROLLUP,mysql.user表採用了更好的加密算法,InnoDB開始支持單獨的表空間

MySQL 5.0版本
增長了Stored procedures、Views、Cursors、Triggers、XA transactions的支持,增長了INFORATION_SCHEMA系統數據庫

MySQL 5.1版本
增長了Event scheduler,Partitioning,Pluggable storage engine API ,Row-based replication、Global級別動態修改general query log和slow query log的支持。

MySQL 5.5版本
1)默認存儲引擎更改成InnoDB
2)提升性能和可擴展性

  • 提升了默認線程併發數(innodb_thread_concurrency)
  • 後臺輸入/輸出線程控制(innodb_read_io_threads、innodb_write_io_threads)
  • 主線程輸入/輸出速率控制(innodb_io_capacity)
  • 操做系統內存分配程序使用控制(innodb_use_sys_malloc)
  • 適應性散列索引(Hash Index)控制,用戶能夠關閉適應性散列功能。
  • 插入緩衝(Insert Buffering)控制,用戶能夠關閉innodb的插入緩衝功能。
  • 經過快速加鎖算法提升可擴展性,innodb不在使用代理(posix)線程,而是使用原生的獨立操做來完成互斥和讀寫鎖定。
  • 恢復組提交(Restored Group Commit)
  • 提升恢復性能
  • 多緩衝池實例
  • 多個回滾段(Multiple Rollback Segments),以前的innodb版本最大能處理1023個併發處理操做,如今mysql5.5能夠處理高達128K的併發事物,
  • Linux系統固有的異步輸入/輸出,mysql5.5數據庫系統也提升了linux系統的輸入輸出請求的併發數。
  • 擴展變化緩衝:添加了刪除緩衝和清除緩衝
  • 改善了日誌系統互斥和單獨刷新(Flush)列表互斥
  • 改善清除程序進度,在mysql5.5中清楚操做線程是獨立的線程,並支持併發,可使用innodb_purge_treads配置。
  • 改善事務處理中的元數據鎖定。例如,事物中一個語句須要鎖一個表,會在事物結束時釋放這個表,而不是像之前在語句結束時釋放表。

3)提升實用性

  • 半同步複製(Semi-synchronous Replication)
  • 複製Heartbeat
  • 中繼日誌自動恢復(Automatic Relay Log Recovery)
  • 根據服務器過濾項複製(Replication Per Server Filtering)
  • 從服務器複製支持的數據類型轉換(Replication Slave Side Data Type Conversions)

4)提升易管理性和效率

  • 創建快速索引(Faster Index Creation)
  • 高效的數據壓縮(Efficient Data Compression)
  • 爲大物件和可變長度列提供高效存儲
  • 增長了INFORMATION_SCHEMA表,新的表提供了與InnoDB壓縮和事務處理鎖定有關的具體信息。

5)提升可用性

  • 針對SIGNAL/RESIGNAL的新SQL語法
  • 新的表/索引分區選項。MySQL5.5將表和索引RANG和LIST分區範圍擴展到了非整數列和日期,並增長了在多個列上分區的能力。

6)改善檢測和診斷
Mysql5.5引入了一種新的性能架構(performancn_shema,P_S),用於監控mysql監控服務器運行時的性能。

MySQL 5.6版本
提升InnoDB性能,支持延遲複製
1)InnoDB如今能夠限制大量表打開的時候內存佔用過多的問題(好比這裏提到的)(第三方已有補丁)
2)InnoDB性能增強。如分拆kernel mutex;flush操做從主線程分離;多個perge線程;大內存優化等
3)InnoDB死鎖信息能夠記錄到 error 日誌,方便分析
4)MySQL5.6支持延時複製,可讓slave跟master之間控制一個時間間隔,方便特殊狀況下的數據恢復。
5)表分區功能加強
6)MySQL行級複製功能增強,能夠下降磁盤、內存、網絡等資源開銷(只記錄能肯定行記錄的字段便可)
7)Binlog實現 crash-safe
8)複製事件採用crc32校驗,加強master/slave 複製數據一致性
9)新增 log_bin_basename (之前variables裏面沒有binlog位置信息,對數據庫的監管很不方便)

2.MySQL 5.7版本新特性

(1)安全性
安全性是數據庫永恆的話題,在MySQL 5.7中,有很多安全性相關的改進。包括:

  • MySQL數據庫初始化完成之後,會產生一個 root@localhost 用戶,從MySQL 5.7開始,root用戶的密碼再也不是空,而是隨機產生一個密碼,這也致使了用戶安裝5.7時發現的與5.6版本比較大的一個不一樣點
  • MySQL官方已經刪除了test數據庫,默認安裝完後是沒有test數據庫的,就算用戶建立了test庫,也能夠對test庫進行權限控制了
  • MySQL 5.7版本提供了更爲簡單SSL安全訪問配置,而且默認鏈接就採用SSL的加密方式
  • 能夠爲用戶設置密碼過時策略,必定時間之後,強制用戶修改密碼
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
  • 能夠」鎖」住用戶,用以暫時禁用某個用戶
ALTER USER  'jeffrey'@'localhost' ACCOUNT LOCK;
ALTER USER l 'jeffrey'@'localhost'  ACCOUNT UNLOCK;

(2)靈活性
MySQL 5.7的兩個全新的功能,即JSON和generate column。
1)JSON
隨着非結構化數據存儲需求的持續增加,各類非結構化數據存儲的數據庫應運而生(如MongoDB)。從最新的數據庫使用 排行榜 來看,MongoDB已經超過了PostgreSQL,其火熱程度可見一斑。
各大關係型數據庫也不甘示弱,紛紛提供對JSON的支持,以應對非結構化數據庫的挑戰。MySQL數據庫從5.7.8版本開始,也提供了對JSON的支持。其使用方式以下:

CREATE TABLE t1 (jdoc JSON);
INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');

MySQL對支持JSON的作法是,在server層提供了一堆便於操做JSON的函數,至於存儲,就是簡單地將JSON編碼成BLOB,而後交由存儲引擎層進行處理,也就是說,MySQL 5.7的JSON支持與存儲引擎沒有關係,MyISAM 存儲引擎也支持JSON 格式。

MySQL支持JSON之後,老是避免不了拿來與MongoDB進行一些比較。可是,MySQL對JSON的支持,至少有兩點可以完勝MongoDB:

  • 能夠混合存儲結構化數據和非結構化數據,同時擁有關係型數據庫和非關係型數據庫的優勢
  • 可以提供完整的事務支持

2)generate column
generated column是MySQL 5.7引入的新特性,所謂generated column,就是數據庫中這一列由其餘列計算而得。

例如,知道直角三角形的兩條直角邊,要求直角三角形的面積。很明顯,面積能夠經過兩條直角邊計算而得,那麼,這時候就能夠在數據庫中只存放直角邊,面積使用generated column,以下所示:

CREATE TABLE triangle (sidea DOUBLE, sideb DOUBLE, area DOUBLE AS (sidea * sideb / 2));
insert into triangle(sidea, sideb) values(3, 4);
select * from triangle;
+-------+-------+------+
| sidea | sideb | area |
+-------+-------+------+
|   3 |   4 |  6 |
+-------+-------+------+

在MySQL 5.7中,支持兩種generated column,即virtual generated column和stored generated column,前者只將generated column保存在數據字典中(表的元數據),並不會將這一列數據持久化到磁盤上;後者會將generated column持久化到磁盤上,而不是每次讀取的時候計算所得。很明顯,後者存放了能夠經過已有數據計算而得的數據,須要更多的磁盤空間,與virtual column相比並無優點。所以,在不指定generated column的類型時,默認是virtual column,以下所示:

show create table triangle\G
*************************** 1. row ***************************
    Table: triangle
Create Table: CREATE TABLE `triangle` (
 `sidea` double DEFAULT NULL,
 `sideb` double DEFAULT NULL,
 `area` double GENERATED ALWAYS AS (((`sidea` * `sideb`) / 2)) VIRTUAL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

若是讀者以爲generate column提供的功能,也能夠在用戶代碼裏面實現,並無什麼了不得的地方,那麼,或許還有一個功能可以吸引挑剔的你,那就是爲generate column建立索引。在這個例子中,若是咱們須要根據面積建立索引以加快查詢,就沒法在用戶代碼裏面實現,使用generate column就變得很是簡單:

alter table triangle add index ix_area(area);

(3)易用性
在MySQL 5.7中,有不少易用性方面的改進,小到一個客戶端快捷鍵 ctrl+c 的使用,大到專門提供一個系統庫(sys)來幫助DBA和開發人員使用數據庫。

  • 在linux下,咱們常用 ctrl+c 來終止一個命令的運行,在MySQL 5.7 以前,若是用戶輸入了錯誤的SQL語句,按下 ctrl+c ,雖然可以」結束」SQL語句的運行,可是,也會退出當前會話,MySQL 5.7對這一違反直覺的地方進行了改進,再也不退出會話。
  • MySQL 5.7能夠explain一個正在運行的SQL,這對於DBA分析運行時間較長的語句將會很是有用
  • 在MySQL 5.7中,performance_schema提供了更多監控信息,包括內存使用,MDL鎖,存儲過程等

sys schema

sys schema是MySQL 5.7.7中引入的一個系統庫,包含了一系列視圖、函數和存儲過程, 該項目專一於MySQL的易用性。

例如,咱們能夠經過sys schema快速的知道,哪些語句使用了臨時表,哪一個用戶請求了最多的io,哪一個線程佔用了最多的內存,哪些索引是無用索引等;

sys schema中包含了大量的視圖,那麼,這些視圖的信息來自哪裏呢?
視圖中的信息均來自performance schema統計信息。
這裏 有一個很好的比喻:

For Linux users I like to compare performance_schema to /proc, and SYS to vmstat.

也就是說,performance schema提供了信息源,可是,沒有很好的將這些信息組織成有用的信息,從而沒有很好的發揮它們的做用。而sys schema使用performance schema信息,經過視圖的方式給出解決實際問題的答案。

例如,下面這些問題,在MySQL 5.7以前,須要藉助外部工具才能知道,在MySQL 5.7中,直接查詢sys庫下相應的表就能獲得答案:

  • 如何查看數據庫中的冗餘索引
select * from sys.schema_redundant_indexes;
  • 如何獲取未使用的索引
select * from schema_unused_indexes;
  • 如何查看使用全表掃描的SQL語句
select * from statements_with_full_table_scans

(4)可用性
MySQL 5.7在可用性方面的改進也帶給人很多驚喜。這裏介紹特別有用的幾項改進,包括:

  • 在線設置複製的過濾規則,再也不須要重啓MySQL,只須要中止SQL thread,修改完成之後,啓動SQL thread
  • 在線修改buffer pool的大小
    MySQL 5.7爲了支持online buffer pool resize,引入chunk的概念,每一個chunk默認是128M,當咱們在線修改buffer pool的時候,以chunk爲單位進行增加或收縮。這個參數的引入,對innodb_buffer_pool_size的配置有了必定的影響。innodb要求buffer pool size是innodb_buffer_pool_chunk_size* innodb_buffer_pool_instances的倍數,若是不是,將會適當調大innodb_buffer_pool_size,以知足要求,所以,可能會出現buffer pool的實際分配比配置文件中指定的size要大的狀況
  • Online DDL MySQL 5.7支持重命名索引和修改varchar的大小,這兩項操做在以前的版本中,都須要重建索引或表
ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);
  • 在線開啓GTID ,在以前的版本中,因爲不支持在線開啓GTID,用戶若是但願將低版本的數據庫升級到支持GTID的數據庫版本,須要先關閉數據庫,再以GTID模式啓動,因此致使升級起來特別麻煩。MySQL 5.7之後,這個問題不復存在。

(5)性能
性能一直都是用戶最關心的問題,在MySQL每次新版本中,都會有很多性能提高。在MySQL 5.7中,性能相關的改進很是多,這裏僅介紹部分改進,包括臨時表相關的性能改進、只讀事務的性能優化、鏈接創建速度的優化和複製性能的改進。

1)臨時表的性能改進
MySQL 5.7 爲了提升臨時表相關的性能,對臨時表相關的部分進行了大幅修改,包括引入新的臨時表空間;對於臨時表的DDL,不持久化相關表定義;對於臨時表的DML,不寫redo,關閉change buffer等。全部臨時表的改動,都基於如下兩個事實 :

  • 臨時表只在當前會話中可見
  • 臨時表的生命週期是當前鏈接(MySQL宕機或重啓,則當前鏈接結束)

也就是說,對於臨時表的操做,不須要其餘數據同樣嚴格地進行一致性保證。經過不持久化元信息,避免寫redo等方式,減小臨時表操做的IO,以提升臨時表操做的性能。

2)只讀事務性能改進
衆所周知,在傳統的OLTP應用中,讀操做遠多於寫操做,而且,讀操做不會對數據庫進行修改,若是是非鎖定讀,讀操做也不須要進行加鎖。所以,對只讀事務進行優化,是一個不錯的選擇。
在MySQL 5.6中,已經對只讀事務進行了許多優化。例如,將MySQL內部實現中的事務鏈表分爲只讀事務鏈表和普通事務鏈表,這樣在建立ReadView的時候,須要遍歷事務鏈表長度就會小不少。
在MySQL 5.7中,首先假設一個事務是一個只讀事務,只有在該事務發起了修改操做時,纔會將其轉換爲一個普通事務。MySQL 5.7經過避免爲只讀事務分配事務ID ,不爲只讀事務分配回滾段,減小鎖競爭等多種方式,優化了只讀事務的開銷,提升了數據庫的總體性能。

3)加速鏈接處理
在MySQL 5.7以前,變量的初始化操做(THD、VIO)都是在鏈接接收線程裏面完成的,如今將這些工做下發給工做線程,以減小鏈接接收線程的工做量,提升鏈接的處理速度。這個優化對那些頻繁創建短鏈接的應用,將會很是有用。

4)複製性能的改進
MySQL的複製延遲是一直被詬病的問題之一,欣喜的是,MySQL 5.7版本已經支持」真正」的並行複製功能。MySQL 5.7並行複製的思想簡單易懂,簡而言之,就是」一個組提交的事務都是能夠並行回放的」,由於這些事務都已進入到事務的prepare階段,則說明事務之間沒有任何衝突(不然就不可能提交)。MySQL 5.7之後,複製延遲問題永不存在。

這裏須要注意的是,爲了兼容MySQL 5.6基於庫的並行複製,5.7引入了新的變量slave-parallel-type,該變量能夠配置成DATABASE(默認)或LOGICAL_CLOCK。能夠看到,MySQL的默認配置是庫級別的並行複製,爲了充分發揮MySQL 5.7的並行複製的功能,咱們須要將slave-parallel-type配置成LOGICAL_CLOCK。

3.選擇合適的下載版本

咱們選擇Generally Available(GA)Release 去下載。GA 是指軟件的通用版本,通常指正式發佈的版本。

相關文章
相關標籤/搜索