热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MariaDB与MySQL兼容性的对比分析

MariaDB是MySQL代码级量身定制的替代者鉴于所有应用,MariaDB都是MySQL的代码级量身定制的替代者,相应的版本可以直接替换(如MySQL5.1-MariaDB5.1,MariaDB5.2MariaDB5.3也是兼容的。MySQL5.5将与兼容),具体是:数据及表的定义文件(.frm)在代
MariaDB是MySQL代码级量身定制的替代者

  鉴于所有应用,MariaDB都是MySQL的代码级量身定制的替代者,相应的版本可以直接替换(如MySQL 5.1 -> MariaDB 5.1, MariaDB 5.2 & MariaDB 5.3也是兼容的。MySQL 5.5将与兼容),具体是:

数据及表的定义文件(.frm)在代码级兼容;

所有客户端的API、协议和结构都是相同的;

所有文件件名、二进制文件、路径、端口、套接字等……全都是一样的;

所有的MySQL与其他语言(PHP、Perl、Python、Java、.NET、MyODBC、Rub、MySQL C……)的连接文件无需任何改动,在MariaDB就可工作;

但有些PHP5安装要点你要知道(旧的PHP5客户端库兼容性检查程序存在bug);

mysql-client程序也可在MariaDB服务器上工作。

  意思也就是,在大多数情况下,你只要卸载MySQL后,安装MariaDB后就可工作(在使用相同的主版本(如5.1版)的情况下,不需任何数据文件的转换).

  我们每月都会将MySQL基本代码编译入MariaDB,从而保证MariaDB与Oracle添加的任何补丁和更新的MySQL相兼容。

  同时我们为了容易地从从MySQL 5.0升级到MariaDB 5.1,我们在升级脚本上也做了大量的工作。

  也就是说:相对于MySQL,MariaDB有更多新选项、扩展、存储引擎及漏洞修复,你可以在MariaDB的不同之外页上查看详细。

MariaDB 5.1与MySQL 5.1不兼容部分

  为了提供更多、更好的性能,MariaDB在有些地方与MySQL难免有所不兼容。

  下面列出的是从用户使用角度,你可能看到的MariaDB 5.1与 MySQL 5.1不同之外。

The installation package names starts with MariaDB instead of MySQL.

Timings may be different as MariaDB is in many cases faster than MySQL.

mysqld in MariaDB reads also the [mariadb] sections of your my.cnf files.

You can't use a binary only storage engine library with MariaDB if it's not compiled for exactly the same MariaDB version. (This is because the server internal structure THD is different between MySQL and MariaDB. This is common also between different MySQL versions). This should not be a problem as most people don't load new storage engines and MariaDB comes with more storage engines than MySQL.

CHECKSUM TABLE may give different result as MariaDB doesn't ignore NULL's in the columns as MySQL 5.1 does (Future MySQL versions should calculate checksums the same way as MariaDB). You can get the 'old style' checksum in MariaDB by starting mysqld with the --old option. Note however that that the MyISAM and Aria storage engines in MariaDB are using the new checksum internally, so if you are using --old, the CHECKSUM command will be slower as it needs to calculate the checksum row by row.

The slow query log has more information about the query, which may be a problem if you have a script which parses the slow query log.

MariaDB by default takes a bit more memory than MySQL because we have by default enabled the Aria storage engine for handling internal temporary tables. If you need MariaDB to take very little memory (at the expense of performance), you can set the value of aria_pagecache_buffer_size to 1M (the default is 128M).

If you are using new command options, new features of MariaDB or new storage engines, you can't move easily back and forth between MySQL and MariaDB anymore.

MariaDB 5.2与MySQL 5.1不兼容部分

The list is the same as between MariaDB 5.1 and MySQL 5.1, with one addition:

New SQL_MODE value was added: IGNORE_BAD_TABLE_OPTIONS. If it is not set, using a table, field, or index attribute (option) that is not supported by the chosen storage engine will cause an error. This change might cause warnings in the error log about incorrectly defined tables from the mysql database, fix that with mysql_upgrade.

For all practical purposes, MariaDB 5.2 is a drop in replacement for MariaDB 5.1 and MySQL 5.1.

A few error messages related to wrong conversions are different as MariaDB provides more information in the message about what went wrong.

Error numbers for MariaDB specific errors has been moved to start from 1900 to not conflict with MySQL errors.

Microseconds now works in all contexts; MySQL did, in some contexts, lose the microsecond part from datetime and time.

MariaDB does more strict checking of date, datetime and timestamp values. For example unix_timestamp('x') now returns NULL instead of 0.

The old --maria- startup options are removed. You should use the --aria- prefix instead. (MariaDB 5.2 supports both --maria- and --aria-)

SHOW PROCESSLIST has an extra Progress column which shows progress for some commands. You can disable it by starting mysqld with the --old flag.

INFORMATION_SCHEMA.PROCESSLIST has three new columns for progress reporting: STAGE, MAX_STAGE, and PROGRESS.

Long comments which start with /*M! or /*M!##### are executed.

If you use max_user_cOnnections=0 (which means any number of connections) when starting mysqld, you can't change the global variable anymore while mysqld remains running. This is because when mysqld is started with max_user_cOnnections=0 it does not allocate counting structures (which also involve a mutex for each connection). This would lead to wrong counters if you later changed the variable. If you want to be able to change this variable at runtime, set it to a high value at startup.

You can set max_user_connections (both the global variable and the GRANT option) to -1 to stop users from connecting to the server. The global max_user_connections variable does not affect users with the SUPER privilege.

The IGNORE directive does not ignore all errors (like fatal errors), only things that are safe to ignore.

XtraDB

Percona, the provider of XtraDB, does not provided all earlier features of XtraDB in the 5.5 code base. Because of that, MariaDB 5.5 can't provide them either.

XtraDB options missing in 5.5

The following options are not supported by XtraDB 5.5. If you are using them in any of your my.cnf files, you should remove them before upgrading to 5.5.

innodb_adaptive_checkpoint ; Use innodb_adaptive_flushing_method instead.

innodb_auto_lru_dump ;Use innodb_buffer_pool_restore_at_startup instead.

innodb_blocking_lru_restore ; Use innodb_blocking_buffer_pool_restore instead.

innodb_enable_unsafe_group_commit

innodb_expand_import ; Use innodb_import_table_from_xtrabackup instead.

innodb_extra_rsegments ; Use innodb_rollback_segment instead.

innodb_extra_undoslots

innodb_fast_recovery

innodb_flush_log_at_trx_commit_session

innodb_overwrite_relay_log_info

innodb_pass_corrupt_table ; Use innodb_corrupt_table_action instead.

innodb_use_purge_thread

xtradb_enhancements

XtraDB options that has changed default value
Option Old value New value
innodb_adaptive_checkpoint TRUE  FALSE
innodb_change_buffering inserts  all
innodb_flush_neighbor_pages 1  area
New options in XtraDB 5.5

The following new options has been added to XtraDB / InnoDB in 5.5. (Listed here just to have all XtraDB information in the same place)

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

See also Perconas guide of how to upgrade to 5.5

旧的、也不支持的配置选项

If you are using any of the following options in your /etc/my.cnf or other my.cnf file you should remove them. This is also true for MySQL 5.1 or newer:

Replacing a MySQL RPM

If you uninstalled a MySQL RPM to install MariaDB, note that the MySQL RPM on uninstall renames /etc/my.cnf to /etc/my.cnf.rpmsave.

After installing MariaDB you should do the following to restore your old configuration options:

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

Comments loading...


推荐阅读
  • 本文详细介绍了如何解决在使用本地SQlyog客户端尝试连接阿里云上的MariaDB数据库时遇到的2003错误,即无法连接到MySQL服务器的问题。 ... [详细]
  • MongoDB的核心特性与架构解析
    本文深入探讨了MongoDB的核心特性,包括其强大的查询语言、灵活的文档模型以及高效的索引机制。此外,还详细介绍了MongoDB的体系结构,解释了其文档、集合和数据库的层次关系,并对比了MongoDB与传统关系型数据库(如MySQL)的逻辑结构。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 本文档详细介绍了2017年8月31日关于MySQL数据库备份与恢复的教学内容,包括MySQL日志功能、备份策略、备份工具及实战演练。 ... [详细]
  • 如何在Notepad++中执行Python代码
    Notepad++是一款功能丰富的文本编辑器,不仅支持多种编程语言的语法高亮显示,还提供了便捷的代码执行功能。本文将详细介绍如何在Notepad++中配置并运行Python代码。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 本文详细介绍了一种通过MySQL弱口令漏洞在Windows操作系统上获取SYSTEM权限的方法。该方法涉及使用自定义UDF DLL文件来执行任意命令,从而实现对远程服务器的完全控制。 ... [详细]
  • 本文详细介绍了 phpMyAdmin 的安装与配置方法,适用于多个版本的 phpMyAdmin。通过本教程,您将掌握从下载到部署的完整流程,并了解如何根据不同的环境进行必要的配置调整。 ... [详细]
  • 深入解析BookKeeper的设计与应用场景
    本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。 ... [详细]
  • 本文探讨了在多种编程语言中实现Hello World输出的方法,从经典的C语言到现代的JavaScript,每种语言都有其独特的表达方式。 ... [详细]
  • Git支持通过自定义钩子来扩展其功能,这些钩子根据触发条件的不同,可以分为客户端和服务器端两种类型。客户端钩子通常与本地操作相关联,如提交代码或合并分支;而服务器端钩子则与远程仓库的交互有关。 ... [详细]
  • 当 MySQL 的 autocommit 设置为 1 时,如果在一个事务中执行了 DDL 语句,那么该事务中从开始到执行 DDL 语句之前的所有 DML 操作将自动提交。随后的 DML 操作则需要在新的事务中进行。 ... [详细]
author-avatar
x-诗儿_683
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有