从MySQL迁移/升级到GreatSQL


本文介绍如何从MySQL迁移/升级到GreatSQL数据库。

1. 为什么要迁移/升级

GreatSQL相对于MySQL社区版有着众多优秀特性,包括且不仅限以下:

2. 性能提升扩展GreatSQL 8.0.32-25MySQL 8.0.32
AP引擎✔️仅云上HeatWave
InnODB并行查询✔️仅主键扫描
并行LOAD DATA✔️
InnoDB事务ReadView无锁优化✔️
InnoDB事务大锁拆分优化✔️
InnoDB Mutexes拆分优化✔️
MEMORY引擎优化✔️
InnoDB Flushing优化✔️
InnoDB快速索引创建优化✔️
VARCHAR/BLOB/JSON类型存储单列压缩✔️
数据字典中存储单列压缩信息✔️
3. 面向开发者提升改进GreatSQL 8.0.32-25MySQL 8.0.32
InnoDB全文搜索改进✔️
更多Hash/Digest函数✔️
Oracle兼容-数据类型✔️
Oracle兼容-函数✔️
Oracle兼容-SQL语法✔️
Oracle兼容-存储程序✔️
4. 基础特性提升改进GreatSQL 8.0.32-25MySQL 8.0.32
MGR提升-地理标签✔️
MGR提升-仲裁节点✔️
MGR提升-读写节点绑定VIP✔️
MGR提升-快速单主模式✔️
MGR提升-智能选主机制✔️
MGR提升-全新流控算法✔️
information_schema表数量9565
全局性能和状态指标853434
Per-Table性能指标✔️
Per-Index性能指标✔️
Per-User性能指标✔️
Per-Client性能指标✔️
Per-Thread性能指标✔️
全局查询相应耗时统计✔️
SHOW INNODB ENGINE STATUS增强✔️
回滚段信息增强✔️
临时表信息增强✔️
用户统计信息增强✔️
Slow log信息增强✔️
5.安全性提升GreatSQL 8.0.32-25MySQL 8.0.32
国密支持✔️
备份加密✔️
审计日志入库✔️
PAM认证插件✔️仅企业版
审计插件✔️仅企业版
Keyring存储在Hashicorp Vault中✔️仅企业版
二进制日志加密✔️
临时文件加密✔️
强制加密✔️
6. 运维便利性提升GreatSQL 8.0.32-25MySQL 8.0.32
线程池(Threadpool)✔️仅企业版
备份锁✔️
SHOW GRANTS扩展✔️
表损坏动作扩展✔️
杀掉不活跃事务✔️
START TRANSACTION WITH CONSISTENT SNAPSHOT扩展✔️

2. 迁移/升级前准备

首先下载GreatSQL 8.0版本安装包,推荐选择最新的GreatSQL 8.0.32-25版本从MySQL迁移/升级到GreatSQL - 图1 (opens new window),至于选择RPM还是二进制包看具体情况及个人喜好。

本文选用二进制包方式安装。

正式迁移/升级之前,务必做好数据备份,可以采用以下几种方式:

  1. 停机维护,复制当前的数据库目录,做一个全量物理备份,这种方式恢复起来最快。
  2. 利用mysqldump/xtrabackup等备份工具,执行一个全量备份。
  3. 利用主从复制或MGR,在其中一个节点执行备份,或者令某个节点临时下线/退出,作为备用节点。

接下来,要区分本次迁移/升级属于以下哪种情况:

  1. 从MySQL 5.7直接一次性迁移+升级到GreatSQL 8.0.32。
  2. 从MySQL 8.0.32及以下版本迁移/升级到GreatSQL 8.0.32。
  3. 从MySQL 5.6及更低版本迁移+升级到GreatSQL 8.0.32,则应该先逐次升级大版本,例如5.5=>5.6,5.6=>5.7最新版本,而后再一次性升级到GreatSQL 8.0.32-25。

如果是前两种,直接参考文档:GreatSQL 5.7升级到8.0 的方法进行迁移/升级即可,过程是完全一样的。

本文重点说说第三种场景。

3. 迁移过程

GreatSQL数据库是不支持直接原地(in-place)降级的,因此需要采用 逻辑备份+导入 的方式完成迁移。

如果是直接在MySQL 8.0.33及以上版本的datadir下,指定GreatSQL 8.0.32-25版本的mysqld二进制文件启动,则可能会报告类似下面的错误:

  1. [ERROR] [MY-012530] [InnoDB] Unknown redo log format (5). Please follow the instructions at http://dev.mysql.com/doc/refman/8.0/en/ upgrading-downgrading.html.
  2. [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
  3. [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
  4. [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
  5. [ERROR] [MY-010119] [Server] Aborting

即便用xtrabackup工具物理备份的文件恢复后,也是无法启动的,也会报告类似上面的错误信息。

因此,只有一种方法,那就是 逻辑备份+导入

首先,用 mysqldump 备份全部数据:

  1. $ mysqldump -S/data/MySQL/mysql.sock -A --triggers --routines --events > /backup/MySQL/fullbackup-`date +'%Y%m%d'`.sql

将备份文件copy到GreatSQL版本环境中,并执行导入即可,导入过程中可能会报错,加上 -f 选项并忽略这些错误就好(高版本中有些表在低版本中不存在,略过)。

  1. $ mysql -S/data/GreatSQL/mysql.sock -f < /backup/MySQL/fullbackup-`date +'%Y%m%d'`.sql
  2. #可能会报告类似下面的错误信息,忽略即可
  3. ...
  4. ERROR 3723 (HY000) at line 543: The table 'replication_group_configuration_version' may not be created in the reserved tablespace 'mysql'.
  5. ERROR 1146 (42S02) at line 554: Table 'mysql.replication_group_configuration_version' doesn't exist
  6. ERROR 1146 (42S02) at line 555: Table 'mysql.replication_group_configuration_version' doesn't exist
  7. ERROR 1146 (42S02) at line 556: Table 'mysql.replication_group_configuration_version' doesn't exist
  8. ERROR 1146 (42S02) at line 557: Table 'mysql.replication_group_configuration_version' doesn't exist
  9. ERROR 3723 (HY000) at line 567: The table 'replication_group_member_actions' may not be created in the reserved tablespace 'mysql'.
  10. ERROR 1146 (42S02) at line 583: Table 'mysql.replication_group_member_actions' doesn't exist
  11. ERROR 1146 (42S02) at line 584: Table 'mysql.replication_group_member_actions' doesn't exist
  12. ERROR 1146 (42S02) at line 585: Table 'mysql.replication_group_member_actions' doesn't exist
  13. ERROR 1146 (42S02) at line 586: Table 'mysql.replication_group_member_actions' doesn't exist
  14. ...

如果数据量较大的话,逻辑备份+导入过程耗时较久,要有心理准备。

4. 注意事项

在MySQL 8.0.26中引入MGR组视图UUID特性(group_replication_view_change_uuid从MySQL迁移/升级到GreatSQL - 图2 (opens new window))。因此,如果当前有个MGR集群的版本是8.0.25及以下,则无法实现平滑升级迁移到8.0.26版本。需要申请一次停机维护时间,对MGR集群中的各个节点实施in-place升级,完成从8.0.25到8.0.26及更高版本的升级。

详情请参考:将MGR集群从GreatSQL-8.0.25平滑升级到GreatSQL-8.0.32从MySQL迁移/升级到GreatSQL - 图3 (opens new window)

参考文档

问题反馈

联系我们

扫码关注微信公众号

greatsql-wx