1.3 如何将MySQL迁移至MariaDB中
MySQL 8.0若要升级为MariaDB 10.5,需要基于mysqldump命令进行一次全库导出再导入操作,按照官方文档的阐述,卸载MySQL之前需要先导出数据,启动MariaDB后再导入数据,然后通过mysql_upgrade命令完成迁移。
但MySQL 5.7升级为MariaDB 10.5却非常轻松,不需要通过mysqldump命令导出和导入数据,只需要卸载MySQL,再用MariaDB启动,然后执行mysql_upgrade命令即可。
存在这种差异的原因是MySQL 8.0的数据格式变了。
1.需要注意的地方
迁移过程中,在处理内部临时表时,MariaDB用Aria引擎代替MyISAM引擎,可以通过设置参数“default_tmp_storage_engine=‘Aria’”将Aria作为内部临时表存储引擎。如果临时表很多,则要增加aria_pagecache_buffer_size参数的值(注意,不是key_buffer_size参数的值),该参数用于设置缓存数据和索引的大小,默认是128MB。至于key_buffer_size,建议设置为一个非常低的值(比如16KB),因为该值不被使用。从MariaDB 10.4开始,所有系统表都默认使用Aria存储引擎。
Aria是早期MariaDB版本的默认存储引擎,自2007年以来,它的版本一直都在更新,当前版本是Aria 1.5,下一个版本是Aria 2.0。Aria引擎的前身为Maria,后来为了避免与MariaDB数据库混淆,又重新命名为Aria。Aria是增强版的MyISAM,其解决了MyISAM崩溃后安全恢复的问题,也就是说,当mysqld的进程崩溃时,Aria能够恢复所有表。
据官方透露,Aria未来将全面支持事务,不过这还只是一项计划,并不在其内部开发的优先级列表中。不仅如此,目前官方也已暂停了Aria引擎的开发,当前的重点都放在了改善MariaDB上,目标是保持MariaDB的稳定性,发现漏洞并修复。
与其他内存管理器相比,官方推荐使用的jemalloc内存管理器可以获取更好的性能。安装jemalloc的命令如下:
注意,若使用的是CentOS系统,需要先安装epel.repo源。
将下面的参数加入my.cnf里,可使jemalloc内存管理器在MySQL启动时生效,如图1-1所示。
图1-1 jemalloc内存管理器已启用
2.同步复制兼容性
MariaDB和MySQL这两个数据库都提供了将数据从一个服务器复制到另一个服务器的功能。它们的主要区别是大多数MariaDB版本允许从MySQL中复制数据(这就意味着你可以轻松地将MySQL迁移到MariaDB中),但反过来却没有那么容易,因为大多数MySQL版本都不允许从MariaDB中复制数据,如图1-2所示。
图1-2 同步复制兼容性
从MySQL 8.0迁移到MariaDB 10.5时,请注意以下不兼容的情况。
1)若MariaDB是主库,MySQL是从库,在GTID模式下,从MariaDB同步复制数据时,GTID与MySQL不兼容,同步将报错。
2)若MySQL是主库,MariaDB是从库,MariaDB无法从MySQL 8.0主服务器复制,因为MySQL 8.0具有不兼容的二进制日志格式。
同步报错信息如下:
参考官方手册:https://mariadb.com/kb/en/mariadb-vs-mysql-compatibility/。