关于mariadb:技术分享-MariaDB-迁移到-MySQL-的部分注意事项

1次阅读

共计 1791 个字符,预计需要花费 5 分钟才能阅读完成。

作者:秦福朗

爱可生 DBA 团队成员,负责我的项目日常问题解决及公司平台问题排查。酷爱 IT,喜爱在互联网里畅游,善于摄影、厨艺,不会厨艺的 DBA 不是好司机,didi~

本文起源:原创投稿

* 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。


一、背景

MariaDB 的产生背景想必大家都晓得,是由 MySQL 的创始人,在 MySQL 卖给 SUN 又被甲骨文收买后,以本人女儿名字命名的一款开源数据库。最后以其与 MySQL 的根本齐全的兼容互通和收费开源受到大家的欢送,甚至 CentOS7 都应用 MariaDB 替换了 MySQL。所以对于 MariaDB 与 MySQL 的迁徙的案例也较多,本公众号之前也有共事写过相干文章,有趣味能够去看看,本篇写一下最近我的项目上遇到的迁徙产生的问题及注意事项。

环境为 MariaDB 10.3 到 MySQL 5.7.25。

二、简略操作过程

因 MariaDB 在 5.5 之后便不在追随 MySQL 的版本号,所以 5.5 之后是以 10.0.0 为版本号起始,官网查问到 MariaDB 10.3 与 MySQL 5.7 是实践上可兼容的,我的项目操作者把 MariaDB 的 my.cnf 配置文件去掉了不存在 MySQL 中的局部参数,而后用此配置文件装置了 MySQL,之后 mysqldump 了 MariaDB 的库表数据,导入到 MySQL 中(这是通常应用的迁徙形式)。

三、导入数据报错

1、md5(uuid())

在导入过程中有报错信息如下:

从图中可看出导入过程中语法错误,MySQL 不辨认 md5(uuid()),依据提醒查看表构造:

能够看到主键列 instance_id 有个 default 属性,md5 函数嵌套 uuid 函数。在印象中没见过此种用法,遂以此为方向,去查看官网文档规定,如下:

  • MariaDB:

明确阐明了,在 10.2.1 之后,default 能够与表达式或函数一起应用。

  • MySQL:

能够看到 MySQL 中,default 子句中指定的默认值必须是文字常量,不能是表达式或函数。这里就解释了为什么会导入报错,MySQL 不反对 default 中有 md5(uuid()) 这种函数模式。

2、PAGE_CHECKSUM

从图中仍旧能够看出是导入过程中有语法错误,MySQL 不辨认“PAGE_CHECKSUM=1”,依据提醒查看表构造:

能够看到 engine 为 Aria,在 engine 的 default 的前面有此参数,查看 MariaDB 官网文档,如下:

可知,PAGE_CHECKSUM 只实用于 Aria 表,而与 MySQL 文档比照可知,Aria 引擎为 MariaDB 独有,MySQL 没有,所以 MySQL 也没有 PAGE_CHECKSUM 参数属性,所以此处会报错。

此 Aria 引擎是 MariaD B 用来替换 Myisam 引擎的,甚至在 10.4 版本后连零碎表都是此引擎,故在此之后的版本,更要留神该问题。

四、利用测试报错

利用测试执行 SQL 语句时报错如下:

从报错可知为比拟经典的 select 前面查问的字段没有呈现在 group by 中的例子,但 my.cnf 用的是 MariaDB 的,应该是没有变动才对,而后查看了 MySQL 的 sql_mode:

能够看到 ONLY_FULL_GROUP_BY 呈现在其中,这能够解释为什么会报错的起因,但此参数在 MariaDB 中查问却没有,且 sql_mode 参数没有存在于 my.cnf 文件中,那又是为什么,此时持续查看官网文档(真好货色):

  • MySQL:

能够看到 MySQL 5.7 的 sql_mode 的默认值是蕴含 ONLY_FULL_GROUP_BY 参数的。

  • MariaDB:

在 MariaDB 中能够看到在 10.2.4 之后的 sql_mode 的默认值并不蕴含 ONLY_FULL_GROUP_BY。

由此能够阐明,sql_mode 没有配置在 my.cnf 文件中,部署了新的 MySQL 应用的便是 sql_mode 的默认值,所以此时 sql_mode 会蕴含 ONLY_FULL_GROUP_BY,而业务程序 SQL 是以没有开启 ONLY_FULL_GROUP_BY 设计的,所以会在运行时产生报错。

批改了 sql_mode 之后,业务运行失常了。

五、结语

两个数据库的迁徙,不是看看网上的文档或者官网文档提到的兼容与不兼容项,操作就稳如泰山了,迁徙还是心愿能在全面测试的根底上联合官网文档,尽量做到发现各种细节上的不统一,再去做正式的迁徙,毕竟数据安全应用最重要。

正文完
 0