MySQL升级是非常必要的. 我们在Percona Support上列出了关于MySQL升级最佳实践的各种问题.这篇文章推荐了一些不同情况下升级MySQL的方法.
为什么MySQL升级是必须的? 原因有很多,比如:为了使用新增的特性,基于性能方面的考量, 修复的bug. 但是在没有充分的测试以前就应用到你的应用中是非常危险的, 因为升级可以能会让你的应用不能正常运作- 也可能引起性能的问题. 此外, 我建议你关注MySQL的发布信息和Percona Server - 看看最近的版本有什么变化. 也许在在最新的版本中已修复了某个你正在烦恼的问题.
通过SQL Dump升级主版本:
把Percona Server从5.1升级到5.5版本或者是从5.5升级到5.6版本的升级模式同样适用于Oracle MySQL.
首先, 主版本升级并不是说可以不做任何准备,或者没有任何风险. 在升级之前你需要阅读相关的“升级”文档,比如:MySQL5.1到MySQL5.5的升级文档,MySQL5.5到MySQL5.6的升级文档.在这些文档里面你需要特别注意“Incompatible Change”部分,并检查你是否会受到这些变化的影响.它们可能是配置参数名字变更, 去掉旧的参数,引入新的参数等- 你需要根据这些变化在my.cnf文件做相应的变更.Percona Server 5.5需要特别注意的文档在这里, Percona Server 5.6需要特别注意的文档在这里.
现在,你有几种可行的方式升级,其中一种较灵活,另一种则依赖你当前系统的拓扑结构和数据库数据大小 - 这种方法比前一种更安全。我们看个例子从 Percona Server 5.5 升级到 Percona Server 5.6,来具体看一下彼此的升级过程。
通常情况下,有两中升级方式:
相比之下,第二种方式更安全些,但是这也会使得升级的过程要慢一些。
理论上讲,最安全的方式是:
导出所有用户的权限 导出所有数据并恢复到新版本数据库中 恢复用户权限到新数据库中
下面是基本的操作步骤(在开始之前最好停止有关数据库操作的应用).
1) 获取用户和权限信息. 该操作会备份所有用户的权限.
$ wget percona.com/get/pt-show-grants;$ perl pt-show-grants --user=root --ask-pass --flush > /root/grants.sql |
2) dump 5.5数据库实例的所有信息(除去mysql, information_schema 和performance_schema数据库).
$ mysql -BNe "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql', 'performance_schema', 'information_schema')" | tr 'n' ' ' > /root/dbs-to-dump.sql$ mysqldump --routines --events --single-transaction --databases $(cat /root/dbs-to-dump.sql) > /root/full-data-dump.sql |