-
mariaDB
鎖定
- 中文名
- MariaDB數據庫管理系統
- 外文名
- MariaDB
- 所 屬
- MySQL的一個分支
- 主要維護者
- 開源社區
- 類 別
- 存儲引擎
- 進 制
- 二進制
- 授權許可
- GPL
mariaDB版本
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]
mariaDB發展
成立於2009年,MySQL之父Michael “Monty” Widenius用他的新項目MariaDB完成了對MySQL的“反戈一擊”。開發這個分支的原因之一是:甲骨文公司收購了MySQL後,有將MySQL閉源的潛在風險,因此社區採用分支的方式來避開這個風險。 過去一年中,大型互聯網用户以及Linux發行商紛紛拋棄MySQL,轉投MariaDB陣營。MariaDB是目前最受關注的MySQL數據庫衍生版,也被視為開源數據庫MySQL的替代品。
[1]
MariaDB雖然被視為MySQL數據庫的替代品,但它在擴展功能、存儲引擎以及一些新的功能改進方面都強過MySQL。而且從MySQL遷移到MariaDB也是非常簡單的:
1、數據和表定義文件(.frm)是二進制兼容的
2、所有客户端API、協議和結構都是完全一致的
3、所有文件名、二進制、路徑、端口等都是一致的
5、mysql-client包在MariaDB服務器中也能夠正常運行
6、共享的客户端庫與MySQL也是二進制兼容的
mariaDB起源
為何改了個名字呢,這其中是有些典故的。
MariaDB跟MySQL在絕大多數方面是兼容的,對於開發者來説,幾乎感覺不到任何不同。目前MariaDB是發展最快的MySQL分支版本,新版本發佈速度已經超過了Oracle官方的MySQL版本。
在Oracle控制下的MySQL開發,有兩個主要問題:1. MySQL核心開發團隊是封閉的,完全沒有Oracle之外的成員參加。很多高手即使有心做貢獻,也沒辦法做到。2. MySQL新版本的發佈速度,在Oracle收購Sun之後大為減緩。Widenius有一個ppt,用數據比較了收購之前和之後新版本的發佈速度。有很多bugfix和新的feature,都沒有及時加入到發佈版本之中。
MySQL是開源社區的資產,任何個人/組織都無權據為己有。為了依靠廣大MySQL社區的力量來更快速的發展MySQL,另外開分支是必須的。
MariaDB默認的存儲引擎是Maria,不是MyISAM。Maria可以支持事務,但是默認情況下沒有打開事務支持,因為事務支持對性能會有影響。可以通過以下語句,轉換為支持事務的Maria引擎。ALTER TABLE `tablename` ENGINE=MARIA TRANSACTIONAL=1;
mariaDB特點
這個項目的很多代碼都改編於 MySQL 6.0,例如 “pool of threads”功能提供解決多數據連接問題。MariaDB 5.1.41 RC可以到這裏下載,32位和64位已編譯Linux版本,還包括源代碼包。MariaDB基於GPL 2.0發佈。
與 MySQL 相比較,MariaDB 更強的地方在於:
Maria 存儲引擎
PBXT 存儲引擎
XtraDB 存儲引擎
FederatedX 存儲引擎
更快的複製查詢處理
更少的警告和bug
運行速度更快
更多的 Extensions (More index parts, new startup options etc)
更好的功能測試
數據表消除
慢查詢日誌的擴展統計
支持對 Unicode 的排序
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 進度報告 |
mariaDB目標
MariaDB分支與最新的MySQL發佈版本的分支保持一致性, 例如MariaDB 5.1.47對應MySQL 5.1.47,等等。
mariaDB第三方工具
MariaDB
[4]
的API和協議兼容MySQL,另外又添加了一些功能,以支持本地的非阻塞操作和進度報告。這意味着,所有使用MySQL的連接器、庫和應用程序也將會在MariaDB下工作。在此基礎上,由於擔心甲骨文MySQL的一個更加封閉的軟件項目,Fedora的計劃在Fedora 19中的以MariaDB取代MySQL
[5]
,維基媒體基金會的服務器同樣也使用MariaDB取代了MySQL。
如下是支持MariaDB的客户端工具:
DBEdit 一個免費的MariaDB數據庫和其他數據庫管理應用程序。
Navicat 一系列Windows、Mac OS X、Linux下專有數據庫管理應用程序。Navicat 15 for MySOL是目前業界流行的 MySQL 和 MariaDB 數據庫的前端編輯工具,是視圖可視化的利器,可輕鬆生成關於表之間的關係運算 SOL 命令。該軟件通過對數據表的可視化連接操作,自動生成複雜的多表關係運算的 SOL 命令,並實時返回結果記錄集。
[6]
phpMyAdmin 一個基於網絡的MySQL數據庫管理應用程序
mariaDB兼容性
出於實用的目的,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的不變。
- 有一些和PHP5的安裝問題要注意(一個和老的PHP5如何檢查庫兼容性的bug)。
- mysql-client包還可以與MariaDB服務器一起工作。
我們在腳本升級方面也做了大量的工作,從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的一樣,再補充一條:
- 新增SQL_MODE的取值:IGNORE_BAD_TABLE_OPTIONS。如果未設置該值,使用一個表、字段或索引的屬性(選項)不被支持的存儲引擎將會導致錯誤。這個變化可能引起警告不正確的表定義出現在錯誤日誌中,請利用mysql_upgrade修復這個警告。
實際上,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
- 參考資料
-
- 1. 開源數據庫新軍MariaDB .TechTarget數據庫.2014-01-06[引用日期2014-07-29]
- 2. MySQL替身:MariaDB的前世與今生 .TechTarget數據庫.2014-01-03[引用日期2014-07-22]
- 3. MySQL 分支 MariaDB .開源社區網[引用日期2012-09-23]
- 4. MariaDB 5.5.35 發佈 .中國Linux聯盟[引用日期2014-02-26]
- 5. Proposed F19 Feature: Replace MySQL with MariaDB .fedora郵件列表[引用日期2013-11-20]
- 6. 曾豔芳,曾棕根,唐佳榆.Moodle課程統計功能開發研究[J].福建電腦,2022,38(2):84-86