MariaDB 与MySQL 的大部分功能是类似的,相互具有良好的兼容性,相同的数据文件、日志文件几乎都可以在各版本之间正常使用。各版本兼容情况如表1-5 所示。事实上,MariaDB5.1、5.2、5.3 是基于MySQL 5.1 的源代码创建的, 而MariaDB 5.5 则基于MySQL 5.5、MariaDB 5.3 的代码创建而成。MariaDB 10.0 基于MariaDB 5.5 的代码,而非MySQL 5.6。
如表1-5 所示,MySQL 5.1 与MariaDB 5.1~5.3 兼容,MySQL 5.5 与MariaDB 5.5~10.0 兼容。此处的“兼容”是指,MariaDB 的各版本是在相应版本的MySQL 源代码基础上创建而成的,还表示大部分数据文件、客户端与服务器端的通信协议、相关实用工具均可通用。但是,MariaDB 与MySQL 也不完全一样。虽然它们大部分内容是相互兼容的,但是暴露给用户的部分仍存在差别,有些部分的操作也略有不同。下面看看各版本需要关注的部分。
1. MariaDB 5.1 与MySQL 5.1
MariaDB的安装程序(rpm或msi)名称由MySQL 变为MariaDB;
MariaDB的mysqld程序也可以从设置文件中识别“[mariadb]”节区;
处理CHECKSUM TABLE 命令时,MariaDB 不会忽略NULL列值,所以可能得到与MySQL不同的校验和;
MariaDB 的慢查询日志会将各查询的简单执行计划(关于执行全表扫描还是使用临时表等基本信息)一并显示;MariaDB 在内部使用Aria 存储引擎,而不是MyISAM 存储引擎,Aria 存储引擎占用的内存更多。
2. MariaDB 5.2 与MySQL 5.1(包含MariaDB 5.1 与MySQL 5.1 的不同)将IGNORE_BAD_TABLE_OPTIONS 选项添加到SQL_MODE。若没有该项,存在存储引擎无法识别的表选项时,将产生错误。
3. MariaDB 5.3 与MySQL 5.1(包含MariaDB 5.2 与MySQL 5.1 的不同)
仅在MariaDB中发生的错误代码从1900开始(防止与MySQL 错误号发生冲突);
借助DATETIME 与TIME 数据类型可以将时间精确到微秒级;
UNIX_TIMESTAMP() 函数返回的时间戳可以精确到小数点后6位;
SHOW PROCESSLIST 命令返回的结果中添加了Progress表项,用于显示查询处理进展情况;
IGNORE 选项在安全情形下被忽略,除此之外(发生FATAL错误时)会发生错误;
添加了大量查询优化器功能(optimizer_switch选项),增加了优化器优化方式调优功能。
4. MariaDB 5.5 与MySQL 5.5
INSERT IGNORE 中发生重复键错误时,会出现警告信息。以上简单介绍了MariaDB 与MySQL 各版本兼容与非兼容的内容。其实它们之间的非兼容部分非常少,从我多年的使用经验看,这些微小差异不会对主要功能的使用产生太大影响。