MariaDB數(shù)據(jù)庫(kù)的相關(guān)介紹

2016年11月14日04:10:46 發(fā)表評(píng)論 3,630 ℃

MariaDB數(shù)據(jù)庫(kù)管理系統(tǒng)是MySQL的一個(gè)分支,主要由開(kāi)源社區(qū)在維護(hù),采用GPL授權(quán)許可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品。在存儲(chǔ)引擎方面,使用XtraDB(英語(yǔ):XtraDB)來(lái)代替MySQL的InnoDB。 MariaDB由MySQL的創(chuàng)始人Michael Widenius(英語(yǔ):Michael Widenius)主導(dǎo)開(kāi)發(fā),他早前曾以10億美元的價(jià)格,將自己創(chuàng)建的公司MySQL AB賣(mài)給了SUN,此后,隨著SUN被甲骨文收購(gòu),MySQL的所有權(quán)也落入Oracle的手中。MariaDB名稱(chēng)來(lái)自Michael Widenius的女兒Maria的名字。

MariaDB基于事務(wù)的Maria存儲(chǔ)引擎,替換了MySQL的MyISAM存儲(chǔ)引擎,它使用了Percona的 XtraDB,InnoDB的變體,分支的開(kāi)發(fā)者希望提供訪(fǎng)問(wèn)即將到來(lái)的MySQL 5.4 InnoDB性能。這個(gè)版本還包括了 PrimeBase XT (PBXT) 和 FederatedX存儲(chǔ)引擎。

MariaDB數(shù)據(jù)庫(kù)的版本

MariaDB直到5.5版本,均依照MySQL的版本。因此,使用MariaDB5.5的人會(huì)從MySQL 5.5中了解到MariaDB的所有功能。

從2012年11月12日起發(fā)布的10.0.0版開(kāi)始,不再依照MySQL的版號(hào)。10.0.x版以5.5版為基礎(chǔ),加上移植自MySQL 5.6版的功能和自行開(kāi)發(fā)的新功能。

MariaDB數(shù)據(jù)庫(kù)的發(fā)展

成立于2009年,MySQL之父Michael “Monty” Widenius用他的新項(xiàng)目MariaDB完成了對(duì)MySQL的“反戈一擊”。開(kāi)發(fā)這個(gè)分支的原因之一是:甲骨文公司收購(gòu)了MySQL后,有將MySQL閉源的潛在風(fēng)險(xiǎn),因此社區(qū)采用分支的方式來(lái)避開(kāi)這個(gè)風(fēng)險(xiǎn)。 過(guò)去一年中,大型互聯(lián)網(wǎng)用戶(hù)以及Linux發(fā)行商紛紛拋棄MySQL,轉(zhuǎn)投MariaDB陣營(yíng)。MariaDB是目前最受關(guān)注的MySQL數(shù)據(jù)庫(kù)衍生版,也被視為開(kāi)源數(shù)據(jù)庫(kù)MySQL的替代品。  

MariaDB雖然被視為MySQL數(shù)據(jù)庫(kù)的替代品,但它在擴(kuò)展功能、存儲(chǔ)引擎以及一些新的功能改進(jìn)方面都強(qiáng)過(guò)MySQL。而且從MySQL遷移到MariaDB也是非常簡(jiǎn)單的:

1、數(shù)據(jù)和表定義文件(.frm)是二進(jìn)制兼容的

2、所有客戶(hù)端API、協(xié)議和結(jié)構(gòu)都是完全一致的

3、所有文件名、二進(jìn)制、路徑、端口等都是一致的

4、所有的MySQL連接器,比如PHP、Perl、Python、Java、.NET、MyODBC、Ruby以及MySQL C connector等在MariaDB中都保持不變

5、mysql-client包在MariaDB服務(wù)器中也能夠正常運(yùn)行

6、共享的客戶(hù)端庫(kù)與MySQL也是二進(jìn)制兼容的

也就是說(shuō),在大多數(shù)情況下,你完全可以卸載MySQL然后安裝MariaDB,然后就可以像之前一樣正常的運(yùn)行。

MariaDB數(shù)據(jù)庫(kù)的起源

為何改了個(gè)名字呢,這其中是有些典故的。

MySQL之父Widenius先生離開(kāi)了Sun之后,覺(jué)得依靠Sun/Oracle來(lái)發(fā)展MySQL,實(shí)在很不靠譜,于是決定另開(kāi)分支,這個(gè)分支的名字叫做MariaDB。

MariaDB跟MySQL在絕大多數(shù)方面是兼容的,對(duì)于開(kāi)發(fā)者來(lái)說(shuō),幾乎感覺(jué)不到任何不同。目前MariaDB是發(fā)展最快的MySQL分支版本,新版本發(fā)布速度已經(jīng)超過(guò)了Oracle官方的MySQL版本。

在Oracle控制下的MySQL開(kāi)發(fā),有兩個(gè)主要問(wèn)題:1. MySQL核心開(kāi)發(fā)團(tuán)隊(duì)是封閉的,完全沒(méi)有Oracle之外的成員參加。很多高手即使有心做貢獻(xiàn),也沒(méi)辦法做到。2. MySQL新版本的發(fā)布速度,在Oracle收購(gòu)Sun之后大為減緩。Widenius有一個(gè)ppt,用數(shù)據(jù)比較了收購(gòu)之前和之后新版本的發(fā)布速度。有很多bugfix和新的feature,都沒(méi)有及時(shí)加入到發(fā)布版本之中。

以上這兩個(gè)問(wèn)題,導(dǎo)致了各個(gè)大公司,都開(kāi)發(fā)了自己定制的MySQL版本,包括Yahoo!/Facebook/Google/阿里巴巴+淘寶網(wǎng)等等。

MySQL是開(kāi)源社區(qū)的資產(chǎn),任何個(gè)人/組織都無(wú)權(quán)據(jù)為己有。為了依靠廣大MySQL社區(qū)的力量來(lái)更快速的發(fā)展MySQL,另外開(kāi)分支是必須的。

MariaDB默認(rèn)的存儲(chǔ)引擎是Maria,不是MyISAM。Maria可以支持事務(wù),但是默認(rèn)情況下沒(méi)有打開(kāi)事務(wù)支持,因?yàn)槭聞?wù)支持對(duì)性能會(huì)有影響??梢酝ㄟ^(guò)以下語(yǔ)句,轉(zhuǎn)換為支持事務(wù)的Maria引擎。ALTER TABLE `tablename` ENGINE=MARIA TRANSACTIONAL=1;

MariaDB數(shù)據(jù)庫(kù)的特點(diǎn)

MariaDB 是一個(gè)采用 Maria 存儲(chǔ)引擎的MySQL分支版本,是由原來(lái) MySQL 的作者M(jìn)ichael Widenius創(chuàng)辦的公司所開(kāi)發(fā)的免費(fèi)開(kāi)源的數(shù)據(jù)庫(kù)服務(wù)器。

這個(gè)項(xiàng)目的很多代碼都改編于 MySQL 6.0,例如 “pool of threads”功能提供解決多數(shù)據(jù)連接問(wèn)題。MariaDB 5.1.41 RC可以到這里下載,32位和64位已編譯Linux版本,還包括源代碼包。MariaDB基于GPL 2.0發(fā)布。

MariaDB數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)

與 MySQL 相比較,MariaDB 更強(qiáng)的地方在于:

Maria 存儲(chǔ)引擎

PBXT 存儲(chǔ)引擎

XtraDB 存儲(chǔ)引擎

FederatedX 存儲(chǔ)引擎

更快的復(fù)制查詢(xún)處理

線(xiàn)程池

更少的警告和bug

運(yùn)行速度更快

更多的 Extensions (More index parts, new startup options etc)

更好的功能測(cè)試

數(shù)據(jù)表消除

慢查詢(xún)?nèi)罩镜臄U(kuò)展統(tǒng)計(jì)

支持對(duì) Unicode 的排序

相對(duì)于MySQL最新的版本5.6來(lái)說(shuō),在性能、功能、管理、NoSQL擴(kuò)展方面,MariaDB包含了更豐富的特性。比如微秒的支持、線(xiàn)程池、子查詢(xún)優(yōu)化、組提交、進(jìn)度報(bào)告等。詳情見(jiàn)列表。

High Performance

Developers

DBAs

NoSQL

Thread pool

線(xiàn)程池

Microsecond precision & type

微秒支持

Segmented MyISAM keycache

MyISAM緩存分段

HandleSocket

直接InnoDB/XtrDB訪(fǎng)問(wèn)

Group commit for the binary log

binlog組提交

SphinxSE for full-text search

SphinxSE全文索引支持

Authentication plugins - PAM, Active   Directory

授權(quán)插件

Dynamic columns

動(dòng)態(tài)列

Non-blocking client library

非阻塞庫(kù)

Subqueries materialize

子查詢(xún)優(yōu)化

LIMIT ROWS EXAMINED

LIMIT行檢查限制

GIS functionality

地理信息系統(tǒng)支持

Progress reporting

進(jìn)度報(bào)告

MariaDB數(shù)據(jù)庫(kù)的目標(biāo)

目標(biāo)是提供一個(gè)由社區(qū)開(kāi)發(fā)的、穩(wěn)定的、總是免費(fèi)的MySQL分支,在用戶(hù)級(jí)別上兼容主流版本。我們?yōu)樽约旱陌姹竞蜕嫌?、社區(qū)版的互操作性提高而努力。

MariaDB分支與最新的MySQL發(fā)布版本的分支保持一致性, 例如MariaDB 5.1.47對(duì)應(yīng)MySQL 5.1.47,等等。

MariaDB數(shù)據(jù)庫(kù)第三方工具

MariaDB的API和協(xié)議兼容MySQL,另外又添加了一些功能,以支持本地的非阻塞操作和進(jìn)度報(bào)告。這意味著,所有使用MySQL的連接器、庫(kù)和應(yīng)用程序也將會(huì)在MariaDB下工作。在此基礎(chǔ)上,由于擔(dān)心甲骨文MySQL的一個(gè)更加封閉的軟件項(xiàng)目,F(xiàn)edora的計(jì)劃在Fedora 19中的以MariaDB取代MySQL ,維基媒體基金會(huì)的服務(wù)器同樣也使用MariaDB取代了MySQL。

如下是支持MariaDB的客戶(hù)端工具: 

DBEdit 一個(gè)免費(fèi)的MariaDB數(shù)據(jù)庫(kù)和其他數(shù)據(jù)庫(kù)管理應(yīng)用程序。

Navicat 一系列Windows、Mac OS X、Linux下專(zhuān)有數(shù)據(jù)庫(kù)管理應(yīng)用程序。

HeidiSQL 一個(gè)Windows上自由和開(kāi)放源碼的MySQL客戶(hù)端。它支持MariaDB的5.2.7版本和以后的版本。[5][6]

phpMyAdmin 一個(gè)基于網(wǎng)絡(luò)的MySQL數(shù)據(jù)庫(kù)管理應(yīng)用程序

MariaDB數(shù)據(jù)庫(kù)的兼容性

MariaDB是MySQL的二進(jìn)制替代品

出于實(shí)用的目的,MariaDB是同一MySQL版本的二進(jìn)制替代品(例如MySQL 5.1->MariaDB 5.1, MariaDB5.2和MariaDB 5.3是兼容的。MySQL 5.5將會(huì)和MariaDB 5.5保持兼容)。這意味著:

·數(shù)據(jù)和表定義文件(.frm)文件是二進(jìn)制兼容的。

·所有客戶(hù)端APIs,協(xié)議和結(jié)構(gòu)都是相同的。

·所有的文件名、二進(jìn)制文件的路徑、端口、套接字等等……應(yīng)該是相同的。

·所有MySQL的連接器(PHP Python Perl Java .NET MyODBC Ruby MySQL C連接器等) 和MariaDB的不變。

——有一些和PHP5的安裝問(wèn)題要注意(一個(gè)和老的PHP5如何檢查庫(kù)兼容性的bug)。

·mysql-client包還可以與MariaDB服務(wù)器一起工作。

這意味著對(duì)于大多數(shù)情況下,您可以卸載MySQL和安裝MariaDB,可以工作很好。(不需要轉(zhuǎn)換成任何數(shù)據(jù)文件,如果使用同一主版本,比如5.1)。

我們每月會(huì)與MySQL代碼庫(kù)合并來(lái)確保我們的兼容性和得到任何Oracle修正的bug和所有特性。

我們?cè)谀_本升級(jí)方面也做了大量的工作,從MySQL 5.0升級(jí)到MariaDB 5.1比從MySQL 5.0到MySQL 5.1更容易。

這就是說(shuō):MariaDB有許多的新選項(xiàng)、擴(kuò)展,存儲(chǔ)引擎和bug修復(fù),而MySQL是沒(méi)有的。您可以在MariaDB分發(fā)版本差異頁(yè)面找到不同版本的功能特性集??稍贛ariaDB versus MySQL – Features看到。

MariaDB 5.1與MySQL 5.1的不兼容性

為了讓MariaDB比MySQL提供更多更好的信息,極少情況下MariaDB會(huì)出現(xiàn)不兼容情況。

如果使用MariaDB 5.1替代MySQL5.1,您將看到如下列舉的全部已知用戶(hù)級(jí)不兼容情況:

·安裝的包名稱(chēng),用MariaDB代替MySQL。

·時(shí)間控制可能不同,MariaDB在許多情況下比MySQL快。

·mysqld在MariaDB讀取是my.cnf中[MariaDB ]的部分。

·如果它不是完全相同的MariaDB編譯版本,不能使用僅提供二進(jìn)制的存儲(chǔ)引擎庫(kù)給MariaDB使用 (這是因?yàn)榉?wù)器內(nèi)部結(jié)構(gòu)THD在MySQL和MariaDB之間不同。這也是與常見(jiàn)的MySQL版本不同的)。這應(yīng)該不是問(wèn)題,因?yàn)閷?duì)于大多數(shù)人不加載新存儲(chǔ)引擎,MariaDB比MySQL帶有更多的存儲(chǔ)引擎。

·CHECKSUM TABLE可能產(chǎn)生不同的結(jié)果,由于MariaDB并不忽視NULL的列,MySQL 5.1忽略(未來(lái)的MySQL版本應(yīng)該計(jì)算checksums和MariaDB一樣)。在MariaDB 開(kāi)啟mysqld –old選項(xiàng),您可以得到“舊式”的校驗(yàn)和。但是要注意,這個(gè)MyISAM存儲(chǔ)引擎和Aria 存儲(chǔ)引擎在MariaDB實(shí)際上在內(nèi)部使用新的checksum,因此,如果您使用的是—old , CHECKSUM命令將會(huì)更慢,因?yàn)樗枰?一行一行的計(jì)算checksum。

·慢速查詢(xún)?nèi)罩居懈嘈畔㈥P(guān)于查詢(xún), 如果有一個(gè)腳本解析慢速查詢(xún)?nèi)罩具@可能是一個(gè)問(wèn)題。

·MariaDB默認(rèn)情況下比MySQL需要更多的內(nèi)存,因?yàn)槲覀冇心J(rèn)情況下啟用Aria存儲(chǔ)引擎處理內(nèi)部臨時(shí)表。如果需要MariaDB使用很少的內(nèi)存(這是以犧牲性能為代價(jià)的),您可以設(shè)置aria_pagecache_buffer_size的值為 1M(默認(rèn)值為128M)。

如果正在使用MariaDB的新命令選項(xiàng),新特性或新存儲(chǔ)引擎,那么就不能在MySQL和MariaDB之間輕易來(lái)回切換了。

MariaDB 5.2與MySQL 5.1的不兼容性

同MariaDB 5.1和MySQL 5.1的一樣,再補(bǔ)充一條:

·新增SQL_MODE的取值:IGNORE_BAD_TABLE_OPTIONS。如果未設(shè)置該值,使用一個(gè)表、字段或索引的屬性(選項(xiàng))不被支持的存儲(chǔ)引擎將會(huì)導(dǎo)致錯(cuò)誤。這個(gè)變化可能引起警告不正確的表定義出現(xiàn)在錯(cuò)誤日志中,請(qǐng)利用mysql_upgrade修復(fù)這個(gè)警告。

實(shí)際上,MariaDB 5.2是MariaDB 5.1和MySQL 5.1替代品。

MariaDB 5.3與MySQL 5.1和MariaDB 5.2的不兼容性

·一些錯(cuò)誤信息涉及到錯(cuò)誤轉(zhuǎn)換的,MariaDB的差別在于消息中提供了更多的信息關(guān)于到底是哪里出了錯(cuò)。

·MariaDB專(zhuān)用的錯(cuò)誤編號(hào)已經(jīng)從1900開(kāi)始,為的是不與MySQL的錯(cuò)誤沖突。

·MariaDB在所有工作場(chǎng)景中可以基于微秒計(jì)時(shí)工作;而MySQL在某些情況下,如datetime和time,確實(shí)會(huì)丟失微秒部分。

·舊的--maria啟動(dòng)選項(xiàng)被刪除。應(yīng)該使用--aria前綴代替。(MariaDB 5.2都支持這—maria-和- aria-)

·SHOW PROCESSLIST有一個(gè)額外的process列,顯示一些命令的進(jìn)度。您可以啟動(dòng)mysqld用–old 標(biāo)志禁用它。

·INFORMATION_SCHEMA.PROCESSLIST對(duì)進(jìn)度報(bào)告有三個(gè)新列: STAGE, MAX_STAGE和 PROGRESS。

·以/*M! 或/*M!#####起頭的長(zhǎng)注釋會(huì)得到執(zhí)行。

·如果使用max_user_connections = 0(也就是說(shuō)任何數(shù)量的連接)啟動(dòng)mysqld,您就不能在mysqld運(yùn)行時(shí)修改全局變量了。這是因?yàn)楫?dāng)mysqld以max_user_connections = 0啟動(dòng)時(shí),它不分配計(jì)數(shù)結(jié)構(gòu)(包括每個(gè)連接的互斥鎖)。如果稍后改變變量,這將導(dǎo)致錯(cuò)誤的計(jì)數(shù)器。如果希望在運(yùn)行時(shí)能改變這個(gè)變量,請(qǐng)?jiān)趩?dòng)時(shí)將它設(shè)置為一個(gè)較高的值。

·可以設(shè)置max_user_connections(包括全局變量和GRANT選項(xiàng)兩種場(chǎng)景)為-1來(lái)阻止用戶(hù)連接到服務(wù)器。全局變量max_user_connections變量不影響擁有super特權(quán)的用戶(hù)連接。

IGNORE指令并不會(huì)忽略所有錯(cuò)誤(比如致命錯(cuò)誤),只是會(huì)忽略可以安全忽略的那些。

MariaDB 5.5與MariaDB 5.3的不兼容性

XtraDB

XtraDB提供者Percona,在5.5代碼庫(kù)并未提供XtraDB所有早些時(shí)候的功能特性。正因?yàn)槿绱?MariaDB 5.5也不能提供它們所有功能特性。

在5.5版本中XtraDB缺少的選項(xiàng)

以下選項(xiàng)XtraDB 5.5是不支持的。如果在my.cnf文件中使用到這些選項(xiàng),請(qǐng)刪除后再升級(jí)到5.5。

·innodb-adaptive-checkpoint;請(qǐng)使用innodb_adaptive_flushing_method 替代。

·innodb-auto-lru-dump;請(qǐng)使用innodb_buffer_pool_restore_at_startup 替代。

·innodb-blocking-lru-restore;請(qǐng)使用innodb-blocking-buffer-pool-restore 替代。

·innodb-enable-unsafe-group-commit

·innodb-expand-import;請(qǐng)使用 innodb_import_table_from_xtrabackup 替代。

·innodb-extra-rsegments;請(qǐng)使用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;請(qǐng)使用innodb_corrupt_table_action 替代。

·innodb-use-purge-thread

·xtradb-enhancements

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫(kù)、COS、CDN、短信等云產(chǎn)品特惠熱賣(mài)中

發(fā)表評(píng)論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: