MariaDB FAQ(Part 1)

MariaDB是什么?

MariaDB是一个向后兼容、替代MySQL的数据库服务器。它包含所有主要的开源存储引擎。

MariaDB源代码公开存放于Launchpad项目托管平台,同时也提供了二进制和编译包供下载

MariaDB目标是什么?

目标是提供一个由社区开发的、稳定的、总是免费的MySQL分支,在用户级别上兼容主流版本。我们为自己的版本和上游、社区版的互操作性提高而努力。

MariaDB分支与最新的MySQL发布版本的分支保持一致性, 例如MariaDB 5.1.47对应MySQL 5.1.47,等等。

我们合并MySQL分支的每一个新版本或有一些关键的错误修复应用到主分支。

我们努力尽可能使我们的主版本没有bug,任何时候使用我们主版本,应该是安全的。

MariaDB幕后是谁?

MariaDB项目是原来MySQL®和Monty Program Ab创始人Michael Widenius的点子。

核心团队由Monty Program Ab雇佣的开发人员、Monty Program一些合作伙伴和在MariaDB社区的人员组成。MariaDB是一批技术控,我们希望我们的核心成员反映这一点。

Monty Program Ab所担任的角色就是MariaDB项目的主管。Monty Program Ab同时也为保证MariaDB产品的高质量而负责。Monty Program Ab归属于其员工,其核心业务是开发和维护MariaDB。

最新列出的活跃核心贡献者(maria-captains)可以在Launchpad开放平台上找到。任何拥有足够的技能技术水平和愿意积极参与MariaDB开发的人都可以成为团队的一员。您不需要在Monty Program Ab公司工作也能参与或提交代码!

MariaDB周围有一个活跃的社区您可以成为其中的一员。开发人员的贡献可以在MariaDB贡献者日志列表中找到。

Monty:

这里可能会有些疑问,MariaDB是一个公司的还是一个社区的开源项目。在Monty Program Ab,我们把MariaDB看做一个社区的开源项目,因为:

  • 所有MariaDB代码都是开源的,Monty Program Ab不打算发布任何闭源模块的代码给MariaDB,可见我们对社区的承诺
  • 那些符合MariaDB核心贡献者标准的人才拥有提交源码到MariaDB代码库的权利。他们中有很多人是Monty Program Ab公司之外的人员
  • 任何人都可以贡献文章到askmonty.org知识库,这里限制很少。
  • Monty Program Ab拥有MariaDB商标,但我们准备把广泛的权力给别人。我们正在研究一种公共商标政策,并且它将不久就会发布。

就像之前别人所评论的,相比于其他从事MariaDB工作的个体,askmonty.orgmariadb.org确实包含更多有关Monty Program Ab的信息。这就是可以预期只有Monty Program Ab对于这些网站是最积极的贡献者,因为它相对于其它的个体,更容易写有关对我们所做的事和知道的事的信息,我们不可能有无限的资源来做所有的事情。随着时间的流逝,更多的人开始为MariaDB贡献,这将会改变。

为什么项目叫MariaDB?

MySQL这一名字已是Oracle的商标,他们选择了保留自己的商标。MySQL名字(就像MyISAM存储引擎)来自Monty的第一个女儿“My”。MariaDB继续这个传统,取自于他的小女儿。

MariaDB与MySQL-兼容性

Monty Program提供MariaDB与MySQL白皮书供下载

参阅MariaDB与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的不变。
    • 有一些和PHP5的安装问题要注意(一个和老的PHP5如何检查库兼容性的bug)。
  • 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的一样,再补充一条:

  • 新增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

XtraDB改变默认值的选项 

参数名称

旧值

新值

innodb_adaptive_checkpoint

TRUE

FALSE

innodb_change_buffering

inserts

all

innodb_flush_neighbor_pages

1

area

XtraDB 5.5新增选项

下面的新选项已经被添加到XtraDB/InnoDB 5.5。(这里列出的只是在同一个地方的所有XtraDB信息)

  • innodb-adaptive-flushing-method
  • innodb-adaptive-hash-index-partitions
  • innodb-blocking-buffer-pool-restore
  • innodb-buffer-pool-instances
  • innodb-buffer-pool-restore-at-startup
  • innodb-change-buffering-debug
  • innodb-corrupt-table-action
  • innodb-flush-checkpoint-debug
  • innodb-force-load-corrupted
  • innodb-import-table-from-xtrabackup
  • innodb-large-prefix
  • innodb-purge-batch-size
  • innodb-purge-threads
  • innodb-recovery-update-relay-log
  • innodb-rollback-segments
  • innodb-sys-columns
  • innodb-sys-fields
  • innodb-sys-foreign
  • innodb-sys-foreign-cols
  • innodb-sys-tablestats
  • innodb-use-global-flush-log-at-trx-commit
  • innodb-use-native-aio

参阅: Perconas guide of how to upgrade to 5.5 

过时的、不再支持的配置选项 

如果在/etc/my.cnf或其他my.cnf文件中使用到下列任何选项,请删除它们。这也同样适用于MySQL 5.1或更新版本:

  • skip-bdb 

替换MySQL RPM包 

如果为了安装MariaDB而卸载MySQL RPM,注意MySQL RPM在卸载时会重命名/etc /my.cnf为/etc/my.cnf.rpmsave。

在安装MariaDB之后必须做如下操作来恢复旧的配置选项:mv –vi /etc/my.cnf.rpmsave /etc/my.cnf

 评论

by elenst

如果您正在用MariaDB5.2或MariaDB5.3取代MySQL 5.1(例如使用MariaDB 5.2.10或当下最新的MariaDB 5.3.4 替换 MySQ 5.1.61), 运行mysql_upgrade是明智的,即便MariaDB运行服务器包含同一MySQL版本。MariaDB有一个略微不同于mysql.event的表结构,这导致在服务器启动时事件调度器被禁用,相应的消息在错误日志文件中。运行mysql_upgrade后重新启动服务器即可修复此问题。

by elenst

在卸载MySQL-server RPM后安装MariaDB-server时,可能会遇到一些依赖项错误。正如MariaDB 5.1.60,5.2.10和5.3.3 RHEL rpm同MySQL 5.1.60相比,这些依赖关系如下:

  • perl-DBI
  • libmysqlclient.so.16
  • libmysqlclient_r.so.16
  • libhsclient.so.0 (5.3 only)

perl-DBI is used in scripts:

  • mysql_convert_table_format
  • mysql_setpermission
  • mysqlhotcopy

如果不打算使用脚本,则可以忽略它。事实上,对MySQL-server-5.1.60也一样,依赖仅限如此,所以很有可能的是,如果之前您不需要它们,现在也不需要担心。

Mysqltest 需要libmysqlclient_r,如果不打算运行测试套件,这应该没有问题。

mysql_upgrade需要libmysqlclient,对于服务器升级,它是一种重要的工具。因此最好从MariaDB-shared包安装这个库。它也将解决前面的问题。

HandlerSocket插件需要libhsclient,如果有计划使用此插件,请查看安装说明了解详情。或者通过rpm命令的’–nodeps’ 选项也可以忽视依赖。

One thought on “MariaDB FAQ(Part 1)

  1. Pingback: MariaDB FAQ CN | MySQLOPS 数据库与运维自动化技术分享

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>