1.4 如何将MySQL迁移至MariaDB
以MySQL 5.1版本为例,若要升级到MySQL 5.6,需要进行一次全库mysqldump导出再导入,当数据库很大时,比如为100GB,那么升级起来会非常困难。但如果升级为MariaDB 10版本,则会非常轻松,按照官方文档阐述,只需把MySQL卸载掉,并用MariaDB启动,然后通过mysql_upgrade命令升级即可完成,如图1-13所示。
图1-13 升级步骤
当处理内部的临时表时,MariaDB 5.5/10.0用Aria引擎代替MyISAM引擎,MariaDB 10.1可以通过设置参数default_tmp_storage_engine = InnoDB作为内部临时表存储引擎,这将使某些GROUP BY和DISTINCT请求速度更快,因为Aria有比MyISAM更好的缓存机制。如果临时表很多,则要增加aria_pagecache_buffer_size参数的值(缓存数据和索引),默认为128MB(而不是tmp_table_size参数)。如果没有MyISAM表,那么建议把key_buffer_size调低,而且要调得非常低,例如64KB,仅提供给MySQL库中的系统表使用,如图1-14所示。
图1-14 内部临时表存储引擎
什么是Aria呢?Aria是早期MariaDB版本的默认存储引擎,自2007年以来它一直在开发,当前版本是Aria 1.5,下一个版本是Aria 2.0。Aria引擎前身为Maria,后来怕和MariaDB数据库搞混淆,又重新命名,是增强版的MyISAM,解决了MyISAM崩溃安全恢复问题,也就是说,mysqld的进程崩溃后,Aria将恢复所有表。
1.Aria引擎的宕机恢复
数据和索引支持崩溃安全恢复,在崩溃后,表数据的变化将回滚语句的开始状态或最后一个LOCK TABLES的命令状态(见图1-15)。
图1-15 崩溃恢复
2.Aria引擎的未来和发展
官方在未来会让Aria全面支持事务,但现在只是加入计划当中,并不在它们内部开发的优先级列表中。目前这个引擎官方都已暂停开发,现在重点都放在了改善MariaDB上。当前的目标是保持稳定和修复所有发现的bug并进行修复。
3.实验验证当前版本不支持事务
下面做个实验验证当前版本是否支持事务,启用关键字TRANSACTIONAL=1。
MariaDB[test]>create table t5(id INT)ENGINE=ARIA TRANSACTIONAL=1; Query OK, 0 rows affected (0.99 sec) MariaDB [test]> begin; Query OK, 0 rows affected (0.07 sec) MariaDB [test]> insert into t5 values(1); Query OK, 1 row affected (0.94 sec) MariaDB [test]> rollback; Query OK, 0 rows affected, 1 warning (0.00 sec) MariaDB [test]> select * from t5; +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec)
从以上代码中可以看到并没有进行回滚。