MySQL升级是非常必要的. 我们在Percona Support上列出了关于MySQL升级最佳实践的各种问题.这篇文章推荐了一些不同情况下升级MySQL的方法.
为什么MySQL升级是必须的? 原因有很多,比如:为了使用新增的特性,基于性能方面的考量, 修复的bug. 但是在没有充分的测试以前就应用到你的应用中是非常危险的, 因为升级可以能会让你的应用不能正常运作- 也可能引起性能的问题. 此外, 我建议你关注MySQL的发布信息和Percona Server - 看看最近的版本有什么变化. 也许在在最新的版本中已修复了某个你正在烦恼的问题.
--------------------------------------分割线 --------------------------------------
Ubuntu 14.04下安装MySQL
Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL
Ubuntu 12.04 LTS 构建高可用分布式 MySQL 集群
Ubuntu 12.04下源代码安装MySQL5.6以及Python-MySQLdb
--------------------------------------分割线 --------------------------------------
通过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,来具体看一下彼此的升级过程。
通常情况下,有两中升级方式:
直接升级:安装好新版本数据库后,利用已经存在的数据文件夹,同时运行mysql_upgrade脚本来升级。
SQL 导出: 从一个较老版本的mysql把数据导出,然后恢复到新版本的数据库中。(利用mysqldump工具)。
相比之下,第二种方式更安全些,但是这也会使得升级的过程要慢一些。
理论上讲,最安全的方式是:
导出所有用户的权限
导出所有数据并恢复到新版本数据库中
恢复用户权限到新数据库中
下面是基本的操作步骤(在开始之前最好停止有关数据库操作的应用).
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
3) 停止数据库
$ service mysql stop
or
$ /etc/init.d/mysql stop
4) 移动旧数据库(5.5版本)的数据目录(假设是/var/lib/mysql,此处应该改为你自己的数据目录)
$ mv /var/lib/mysql/ /var/lib/mysql-55