https://baike.baidu.com/item/mariaDB/6466119?fr=aladdin
MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL受權許可 MariaDB的目的是徹底兼容MySQL,包括API和命令行,使之能輕鬆成爲MySQL的代替品。在存儲引擎方面,使用XtraDB(英語:XtraDB)來代替MySQL的InnoDB。 MariaDB由MySQL的創始人Michael Widenius(英語:Michael Widenius)主導開發,他早前曾以10億美圓的價格,將本身建立的公司MySQL AB賣給了SUN,此後,隨着SUN被甲骨文收購,MySQL的全部權也落入Oracle的手中。MariaDB名稱來自Michael Widenius的女兒Maria的名字。
MariaDB基於事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎,它使用了Percona的 XtraDB,InnoDB的變體,分支的開發者但願提供訪問即將到來的MySQL 5.4 InnoDB性能。這個版本還包括了 PrimeBase XT (PBXT) 和 FederatedX
存儲引擎。
-
中文名
-
MariaDB數據庫管理系統
-
外文名
-
MariaDB
-
所
屬
-
MySQL的一個分支
-
主要維護者
-
開源社區
-
類
別
-
存儲引擎
-
進
制
-
二進制
-
受權許可
-
GPL
版本
MariaDB直到5.5版本,均依照MySQL的版本。所以,使用MariaDB5.5的人會從MySQL 5.5中瞭解到MariaDB的全部功能。
從2012年11月12日起發佈的10.0.0版開始,再也不依照MySQL的版號。10.0.x版以5.5版爲基礎,加上移植自MySQL 5.6版的功能和自行開發的新功能。
[1]
發展
成立於2009年,MySQL之父Michael 「Monty」 Widenius用他的新項目MariaDB完成了對MySQL的「反戈一擊」。開發這個分支的緣由之一是:甲骨文公司收購了MySQL後,有將MySQL閉源的潛在風險,所以社區採用分支的方式來避開這個風險。 過去一年中,大型互聯網用戶以及Linux發行商紛紛拋棄MySQL,轉投MariaDB陣營。
MariaDB是目前最受關注的MySQL數據庫衍生版,也被視爲開源數據庫MySQL的替代品。
[1]
MariaDB雖然被視爲MySQL數據庫的替代品,但它在擴展功能、存儲引擎以及一些新的功能改進方面都強過MySQL。並且從MySQL遷移到MariaDB也是很是簡單的:
一、數據和表定義文件(.frm)是二進制兼容的
二、全部客戶端API、協議和結構都是徹底一致的
三、全部文件名、二進制、路徑、端口等都是一致的
四、全部的MySQL鏈接器,好比PHP、Perl、Python、Java、.NET、MyODBC、Ruby以及MySQL C connector等在MariaDB中都保持不變
五、mysql-client包在MariaDB服務器中也可以正常運行
六、共享的客戶端庫與MySQL也是二進制兼容的
也就是說,在大多數狀況下,你徹底能夠卸載MySQL而後安裝MariaDB,而後就能夠像以前同樣正常的運行。
[2]
起源
爲什麼改了個名字呢,這其中是有些典故的。
MySQL之父Widenius先生離開了Sun以後,以爲依靠Sun/Oracle來發展MySQL,實在很不靠譜,因而決定另開分支,這個分支的名字叫作MariaDB。
MariaDB跟MySQL在絕大多數方面是兼容的,對於開發者來講,幾乎感受不到任何不一樣。目前MariaDB是發展最快的MySQL分支版本,新版本發佈速度已經超過了Oracle官方的MySQL版本。
在Oracle控制下的MySQL開發,有兩個主要問題:1. MySQL核心開發團隊是封閉的,徹底沒有Oracle以外的成員參加。不少高手即便有心作貢獻,也沒辦法作到。2. MySQL新版本的發佈速度,在Oracle收購Sun以後大爲減緩。Widenius有一個ppt,用數據比較了收購以前和以後新版本的發佈速度。有不少bugfix和新的feature,都沒有及時加入到發佈版本之中。
以上這兩個問題,致使了各個大公司,都開發了本身定製的MySQL版本,包括Yahoo!/Facebook/Google/阿里巴巴+淘寶網等等。
MySQL是開源社區的資產,任何我的/組織都無權據爲己有。爲了依靠廣大MySQL社區的力量來更快速的發展MySQL,另外開分支是必須的。
MariaDB默認的存儲引擎是Maria,不是MyISAM。Maria能夠支持事務,可是默認狀況下沒有打開事務支持,由於事務支持對性能會有影響。能夠經過如下語句,轉換爲支持事務的Maria引擎。ALTER TABLE `tablename` ENGINE=MARIA TRANSACTIONAL=1;
特色
MariaDB 是一個採用 Maria 存儲引擎的MySQL分支版本,是由原來 MySQL 的做者Michael Widenius創辦的公司所開發的免費開源的數據庫服務器。
[3]
MariaDB相關書籍
這個項目的不少代碼都改編於 MySQL 6.0,例如 「pool of threads」功能提供解決多
數據鏈接問題。MariaDB 5.1.41 RC能夠到這裏下載,32位和64位已編譯Linux版本,還包括源代碼包。MariaDB基於GPL 2.0發佈。
與 MySQL 相比較,MariaDB 更強的地方在於:
PBXT 存儲引擎
更快的複製查詢處理
更少的警告和bug
運行速度更快
更多的 Extensions (More index parts, new startup options etc)
更好的功能測試
數據表消除
支持對 Unicode 的排序
相對於MySQL最新的版本5.6來講,在性能、功能、管理、NoSQL擴展方面,MariaDB包含了更豐富的特性。好比微秒的支持、線程池、子查詢優化、組提交、進度報告等。詳情見列表。
High Performance
|
Developers
|
DBAs
|
NoSQL
|
Thread pool
線程池
|
Microsecond precision & type
微秒支持
|
Segmented MyISAM keycache
MyISAM緩存分段
|
HandleSocket
直接InnoDB/XtrDB訪問
|
Group commit for the binary log
binlog組提交
|
SphinxSE for full-text search
SphinxSE全文索引支持
|
Authentication plugins - PAM, Active Directory
受權插件
|
Dynamic columns
動態列
|
Non-blocking client library
非阻塞庫
|
Subqueries materialize
子查詢優化
|
LIMIT ROWS EXAMINED
LIMIT行檢查限制
|
|
|
GIS functionality
地理信息系統支持
|
Progress reporting
進度報告
|
|
目標
目標是提供一個由
社區開發的、穩定的、老是免費的MySQL分支,在用戶級別上兼容主流版本。咱們爲本身的版本和上游、社區版的互操做性提升而努力。
MariaDB分支與最新的MySQL發佈版本的分支保持一致性, 例如MariaDB 5.1.47對應MySQL 5.1.47,等等。
第三方工具
MariaDB
[4]
的API和協議兼容
MySQL,另外又添加了一些功能,以支持本地的非阻塞操做和進度報告。這意味着,全部使用MySQL的鏈接器、庫和應用程序也將會在MariaDB下工做。在此基礎上,因爲擔憂甲骨文MySQL的一個更加封閉的軟件項目,
Fedora的計劃在Fedora 19中的以MariaDB取代
MySQL
[5]
,維基媒體基金會的服務器一樣也使用MariaDB取代了MySQL。
以下是支持MariaDB的客戶端工具:
DBEdit 一個免費的MariaDB數據庫和其餘數據庫管理應用程序。
Navicat 一系列Windows、Mac OS X、Linux下專有數據庫管理應用程序。
HeidiSQL 一個Windows上自由和開放源碼的MySQL客戶端。它支持MariaDB的5.2.7版本和之後的版本。[5][6]
phpMyAdmin 一個基於網絡的MySQL數據庫管理應用程序
兼容性
MariaDB是MySQL的二進制替代品
出於實用的目的,MariaDB是同一MySQL版本的二進制替代品(例如MySQL 5.1->MariaDB 5.1, MariaDB5.2和MariaDB 5.3是兼容的。MySQL 5.5將會和MariaDB 5.5保持兼容)。這意味着:
-
數據和表定義文件(.frm)文件是二進制兼容的。
-
全部客戶端APIs,協議和結構都是相同的。
-
全部的文件名、二進制文件的路徑、端口、套接字等等……應該是相同的。
-
全部MySQL的鏈接器(PHP Python Perl Java .NET MyODBC Ruby MySQL C鏈接器等) 和MariaDB的不變。
-
-
mysql-client包還能夠與MariaDB服務器一塊兒工做。
這意味着對於大多數狀況下,您能夠卸載
MySQL和安裝MariaDB,能夠工做很好。(不須要轉換成任何數據文件,若是使用同一主版本,好比5.1)。
咱們每個月會與MySQL代碼庫合併來確保咱們的兼容性和獲得任何Oracle修正的bug和全部特性。
咱們在腳本升級方面也作了大量的工做,從MySQL 5.0升級到MariaDB 5.1比從MySQL 5.0到MySQL 5.1更容易。
這就是說:MariaDB有許多的新選項、擴展,存儲引擎和bug修復,而MySQL是沒有的。您能夠在MariaDB分發版本差別頁面找到不一樣版本的功能特性集。可在MariaDB versus MySQL – Features看到。
MariaDB 5.1與MySQL 5.1的不兼容性
爲了讓MariaDB比MySQL提供更多更好的信息,極少狀況下MariaDB會出現不兼容狀況。
若是使用MariaDB 5.1替代MySQL5.1,您將看到以下列舉的所有已知用戶級不兼容狀況:
-
安裝的包名稱,用MariaDB代替MySQL。
-
時間控制可能不一樣,MariaDB在許多狀況下比MySQL快。
-
mysqld在MariaDB讀取是my.cnf中[MariaDB ]的部分。
-
若是它不是徹底相同的MariaDB編譯版本,不能使用僅提供二進制的存儲引擎庫給MariaDB使用 (這是由於服務器內部結構THD在MySQL和MariaDB之間不一樣。這也是與常見的MySQL版本不一樣的)。這應該不是問題,由於對於大多數人不加載新存儲引擎,MariaDB比MySQL帶有更多的存儲引擎。
-
CHECKSUM TABLE可能產生不一樣的結果,因爲MariaDB並不忽視NULL的列,MySQL 5.1忽略(將來的MySQL版本應該計算checksums和MariaDB同樣)。在MariaDB 開啓mysqld –old選項,您能夠獲得「舊式」的校驗和。可是要注意,這個MyISAM存儲引擎和Aria 存儲引擎在MariaDB實際上在內部使用新的checksum,所以,若是您使用的是—old , CHECKSUM命令將會更慢,由於它須要,一行一行的計算checksum。
-
慢速查詢日誌有更多信息關於查詢, 若是有一個腳本解析慢速查詢日誌這多是一個問題。
-
MariaDB默認狀況下比MySQL須要更多的內存,由於咱們有默認狀況下啓用Aria存儲引擎處理內部臨時表。若是須要MariaDB使用不多的內存(這是以犧牲性能爲代價的),您能夠設置aria_pagecache_buffer_size的值爲 1M(默認值爲128M)。
若是正在使用MariaDB的新命令選項,新特性或新存儲引擎,那麼就不能在MySQL和MariaDB之間輕易來回切換了。
MariaDB 5.2與MySQL 5.1的不兼容性
同MariaDB 5.1和MySQL 5.1的同樣,再補充一條:
實際上,MariaDB 5.2是MariaDB 5.1和MySQL 5.1替代品。
MariaDB 5.3與MySQL 5.1和MariaDB 5.2的不兼容性
-
一些錯誤信息涉及到錯誤轉換的,MariaDB的差異在於消息中提供了更多的信息關於究竟是哪裏出了錯。
-
MariaDB專用的錯誤編號已經從1900開始,爲的是不與MySQL的錯誤衝突。
-
MariaDB在全部工做場景中能夠基於微秒計時工做;而MySQL在某些狀況下,如datetime和time,確實會丟失微秒部分。
-
舊的--maria啓動選項被刪除。應該使用--aria前綴代替。(MariaDB 5.2都支持這—maria-和- aria-)
-
SHOW PROCESSLIST有一個額外的process列,顯示一些命令的進度。您能夠啓動mysqld用–old 標誌禁用它。
-
INFORMATION_SCHEMA.PROCESSLIST對進度報告有三個新列: STAGE, MAX_STAGE和 PROGRESS。
-
以/*M! 或/*M!#####起頭的長註釋會獲得執行。
-
若是使用max_user_connections = 0(也就是說任何數量的鏈接)啓動mysqld,您就不能在mysqld運行時修改全局變量了。這是由於當mysqld以max_user_connections = 0啓動時,它不分配計數結構(包括每一個鏈接的互斥鎖)。若是稍後改變變量,這將致使錯誤的計數器。若是但願在運行時能改變這個變量,請在啓動時將它設置爲一個較高的值。
-
能夠設置max_user_connections(包括全局變量和GRANT選項兩種場景)爲-1來阻止用戶鏈接到服務器。全局變量max_user_connections變量不影響擁有super特權的用戶鏈接。
IGNORE指令並不會忽略全部錯誤(好比致命錯誤),只是會忽略能夠安全忽略的那些。
MariaDB 5.5與MariaDB 5.3的不兼容性
XtraDB
XtraDB提供者Percona,在5.5代碼庫並未提供XtraDB全部早些時候的功能特性。正由於如此,MariaDB 5.5也不能提供它們全部功能特性。
在5.5版本中XtraDB缺乏的選項
如下選項XtraDB 5.5是不支持的。若是在my.cnf文件中使用到這些選項,請刪除後再升級到5.5。
-
innodb-adaptive-checkpoint;請使用innodb_adaptive_flushing_method 替代。
-
innodb-auto-lru-dump;請使用innodb_buffer_pool_restore_at_startup 替代。
-
innodb-blocking-lru-restore;請使用innodb-blocking-buffer-pool-restore 替代。
-
innodb-enable-unsafe-group-commit
-
innodb-expand-import;請使用 innodb_import_table_from_xtrabackup 替代。
-
innodb-extra-rsegments;請使用innodb_rollback_segment 替代。
-
innodb-extra-undoslots
-
innodb-fast-recovery
-
innodb-flush-log-at-trx-commit-session
-
innodb-overwrite-relay-log-info
-
innodb-pass-corrupt-table;請使用innodb_corrupt_table_action 替代。
-
innodb-use-purge-thread
-
xtradb-enhancements