您的位置:首页 > 数据库 > MariaDB

MariaDB之与MySQL的兼容性比较

2015-08-01 15:32 671 查看
MariaDB之与MySQL的兼容性比较

MariaDB是为了替换MySQL的一个二进制发行版本

因为各种现实原因,MariaDB是用来替换同版本的MySQL的不同的二进制发行版本(如MySQL5.1与MariaDB5.1/5.2/5.3都是兼容的,MySQL5.5与MariaDB5.5是兼容的,实际上它与MariaDB10.0也同样兼容)。这意味着:

数据和表定义文件(.frm)是二进制兼容的

后文会介绍具体的不兼容特性

全部的客户端API、协议在结构上是一致的

全部的文件名称、二进制、路径、端口、套接字等等,都应该是相同的

全部的MySQL驱动(PHP、Perl、Python、Java、.NET、MyODBC、Ruby、MySQLC等等)在MariaDB中不需要修改即可使用

在与PHP5集成时有已知的安装问题(老版本的PHP5客户端会检查依赖库的兼容性存在缺陷)

mysql-client包在MariaDB中同样工作

共享的client库与MySQL的client库二进制兼容

这意味着大多数情况下,你可以轻松卸载MySQL并安装MariaDB,建议你这么做。(无需转换任何数据文件如果你使用的主版本号完全一致,如5.1).然而,你仍然需要通过执行mysql_upgrade来完成升级。这可以保证msyql的权限表和事件表得到更新以包含MariaDB新增的字段。

我们通过每个月将MySQL的代码合入到MariaDB来保证我们与MySQL的兼容性同时也会将Oracle在MySQL上所做的缺陷修改和新增特性加入到MariaDB中。

我们做了大量的工作来更新升级脚本,现在使用升级脚本将MySQL5.0升级到MariaDB5.1将会比升级到MySQL5.1更加容易.

换言之,MariaDB拥有很多的新增选项、扩展、存储引擎、在MySQL中还未修改的缺陷。你可以在MariaDB分布页面找到不同版本间特性差异。

MariaDB5.1与MySQL5.1的不兼容性

在一些极少的情况下,MariaDB必须牺牲于MySQL的兼容性来提供更多更好的信息,下文列出了使用MariaDB5.1替换MySQL5.1的过程中所有已知的用户级不兼容性:

安装包名以MariaDB打头而非MySQL

计时不同,因为MariaDB在很多情况下比MySQL更快

mysqld在读取my.cnf配置文件时也会读取mariadb段

不能使用与MariaDB不同版本的MySQL的二进制存储引擎库与MariaDB协同工作。(这是因为服务器内部结构THD对于MariaDB和MySQL是不同的,而且通常MySQL的不同版本之间THD也是不同的)。这通常不是问题,因为用户不会加载更新的存储引擎,同时MariaDB也会提供比MySQL更多的存储引擎。

CHECKSUMTABLE可能给出不同的结果,因为MariaDB不会忽略字段的NULL值,而MySQL5.1会忽略。(将来的MySQL版本会采取与MariaDB相同的计算方法)。你可以通过为mysqld指定—old选项强制按照老的方式生成CHECKSUM,因此,当你指定了--old选项以后,CHECKSUM命令执行速度将会减慢因为它必须一行一行计算生成CHECKSUM。

慢查询(原文为slowquery log,译者注)日志包含更多的关于查询的信息,因此当你有脚本解析满查询日志时可能会有问题

MariaDB默认会占用稍多的内存,因为我们缺省使能了MariaDB中的Aria存储引擎来处理内部临时表,如果你希望MariaDB占用更少的内存(以性能损失为代价)可以通过设置aria_pagecache_buffer_size=1M来实现(缺省值为128M)

如果你使用了MariaDB中新的命令选项或新特性或新的存储引擎,重新迁移至MySQL将不会太轻松

MariaDB5.2与MySQL5.1的不兼容性

除了上述MariaDB5.1与MySQL5.1的不兼容性之外,还有以下几点:

新增了值为IGNORE_BAD_TABLE_OPTIONS的SQL_MODE。如果该选项没有被设置,当在表、字段、索引属性上使用了存储引擎不支持的属性时会出错。这一改变可能会在数据库mysql的错误日志中增加关于表定义时使用了错误选项的告警,可以通过mysql_upgrade来修改这一问题

MariaDB5.3与MySQL5.1和MariaDB5.1的不兼容性

定义视图时指定了ALGORITHM=MERGE或ALGORITHM=TEMPTABLE的视图会出现偶发性交换(accidentallyswapped)。必须带该选项重新创建视图才能解决这个问题。

一些跟转换错误相关的错误信息变化,因为MariaDB在错误信息中提供了更多关于出错的信息

MariaDB才有的错误码移动到1900以后以避免与MySQL的错误码冲突

MariaDB现在支持在所有的上下文中使用毫秒。而MySQL在一些上下文中会丢失datetime或time的毫秒值

MariaDB中的UNIX_TIMESTAMP(日期字符串常量)返回包含6个整数的时间戳,而MySQL不会返回一个整数。这通常在使用UNIX_TIMESTAMP作为分割函数时出现问题。可以通过使用FLOOR(UNIX_TIMESTAMP(...))或改变日期字符串为日期数字,如20080101000000

MariaDB执行更加严格的date、datetime、timestamp值检查。如UNIX_TIMESTAMP('x')现在返回NULL而不是0

老--maria-启动选项被移除,现在应该使--aria-前缀来替代这些老的命令(MariaDB5.2支持两种)

SHOWPROCESSLIST增加列Progress显示出命令的进度。可以通过指定mysqld的启动选项—old-mode=NO_PROGRESS_INFO或--old标识(参考OLD_MODE

INFORMATION_SCHEMA.PROCESSLIST增加3列用来描述处理进度:STAGE,MAX_STAGE,PROGRESS.

以/*M!或/*M!#####打头的长注释会被执行

如果使用了max_user_connections=0(支持任意数量的用户连接)选项启动mysqld,将不能通过指定全局变量来修改mysqld运行时配置。因为带该选项启动时,mysqld将不会分配特定数量的结构(通常还会为每会话分配互斥锁),如果动态修改该变量,将会导致访问错误的计数器,如果希望运行时修改配置,应该在启动时指定该值为一个足够大的值

可以通过设置max_user_connections=-1来禁止用户连接到服务器(需同时设置全局变量和grant选项)。全局变量不会影响SUPER权限用户

IGNORE指令不会忽略全部错误(如fatal错误),仅忽略那些安全的错误

MariaDB5.5与MariaDB5.3的不兼容性

XtraDB

XtraDB的提供者是Percona,Percona不再提供全部早期XtraDB特性,所以MariaDB5.5中也不再提供这些特性。

MariaDB5.5中不再支持的XtraDB选项

以下特性MariaDB5.5中将不再支持:

innodb_adaptive_checkpoint;使用
innodb_adaptive_flushing_method代替.

innodb_auto_lru_dump; 使用innodb_buffer_pool_restore_at_startup代替
(innodb_buffer_pool_load_at_startup in MariaDB 10.0).

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_segments代替.

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_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

nnodb_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

参阅Perconas5.5升级指导

MariaDB 5.5与MariaDB5.3和MySQL5.5的不兼容性

通过选项ALGORITHM=MERGE或ALGORITHM=TEMPTABLE定义的试图在
MariaDB和
MySQL中偶发交换!必须指定这些参数重新创建试图来解决这个问题。

INSERTIGNORE在主键重复错误时会给出警告.可以通过设置OLD_MODE=NO_DUP_KEY_WARNINGS_WITH_IGNORE来关闭告警(查阅OLD_MODE).

在 MariaDB5.5.31之前 ,X'HHHH'是二进制字符串的标准SQL语法,被错误的认为等同于0xHHHH,根据上下文可能是数字或字符串。在5.5.31
在所有上下文都被视为字符串(永不会被认为是数字),引入一个与早期MariaDB不兼容特性,同样与所有的MySQL版本也不兼容.查看CAST的更多范例

查看MariaDB5.5
MySQL5.5系统变量差异引起的崩溃

MariaDB 10.0和MariaDB 5.5 / MySQL 5.5的不兼容性

在MariaDB10.0
中SETOPTION
语法被废弃, MySQL5.6.
仅适用 SET.

MariaDB 10.0 与MySQL 5.6的不兼容性

全部 MySQL二进制程序
(mysqld,myisamchk etc.)
给出警告如果在选项中适用了前缀(如--big-table替换为--big-tables).MariaDB
二进制程序和其他UNIX程序采用相同方式适用这些选项但并不给出警告

MariaDB GTID 与MySQL5.6不兼容。意味着不能讲MySQL5.6作为MariaDB10.0的备份。但是,MariaDB10.0可以是MySQL5.6或任务早期MySQL/MariaDB版本的备份

为使CREATETABLE ... SELECT
与基于语法或基于行的工作方式一致,默认复制为CREATEOR REPLACE TABLE并在从服务器上执行。这样做的好处是如果从服务器在CREATE... SELECT指间宕机也可以继续工作

课使用slave-ddl-exec-mode变量来指定CREATETABLE
和 DROPTABLE将会如何复制

查看MariaDB5.5
MySQL5.5系统变量差异引起的崩溃

MySQL 5.6缺省启用性能表。考虑到性能问题,MariaDB10.0缺省禁用该特性。可以通过指定mysqld启动选项为--performance-schema来启用该特性

老的,不再受支持的选项

如果你在配置文件/etc/my.cnf或其他my.cnf配置文件中使用了以下选项,应该删除这些配置,在MySQL5.1
或更新版本中总是true

skip-bdb

替换MySQLRPM

如果希望卸载MySQLRPM
并安装MariaDB,切记MySQLRPM
卸载时会重命名/etc/my.cnf为/etc/my.cnf.rpmsave.

在安装完MariaDB以后,应该执行以下命令使得老的配置仍然可以工作:

mv -vi/etc/my.cnf.rpmsave /etc/my.cnf

IMariaDB 和MySQL-Proxy的不兼容性

MySQL客户端API可以通过MySQL-Proxy连接MariaDB,但是MariaDB的客户端
API将会受到进度报告信息如MySQL-Proxy未实现,要获取所有情况下兼容性只需要在客户端和拂去禁用进度报告。

相关连接

MariaDBvs MySQL
- Features

Movingfrom MySQL

TroubleshootingInstallation Issues

Projectsand applications that works with MariaDB
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: