MySQL系列 - MySQL升级最佳实践

三、MySQL系列 - MySQL各版本升级最佳实践


一、升级前注意事项

在开始之前,你要意识到这是一个很慎重的操作,将一步跨过一个重要的MySQL版本。也就是说,这是有风险的。用二进制文件升级是不建议的,而且这样直接跨越一个重要版本也是不安全的,所以你绝不能这样5.0->5.5,5.1->5.6,或者5.0->5.6做。有一个问题是,MySQL版本不是所有改变都前向兼容的。新版本中介绍的一些改变可能不仅会影响数据如何处理,还会影响服务器行为包括SQL语句和MySQL服务器和内部存储引擎(此处不知标准否)。另一个问题是MySQL5.0与5.6版本之间的变化,一些默认的设置变量被改变了,这可能会导致结果完全不一样或者行为完全不同。例如:MySQL5.5的默认存储引擎是InnoDB,MySQL5.6的存储引擎InnoDB将可以为每个数据库表创建单独表空间(separate tablespace),还有GTID复制(GTID replication)也被引入。有太多细节这里就不一一列举了,所有这些改变都被描述在MySQL的“升级文档”中,详情可以查看升级文档

二、两种升级方式

  • 通常情况下,有两中升级方式:
    • 直接升级:安装好新版本数据库后,利用已经存在的数据文件夹,同时运行mysql_upgrade脚本来升级。
    • SQL 导出: 从一个较老版本的mysql把数据导出,然后恢复到新版本的数据库中。(利用mysqldump工具)。
      相比之下,第二种方式更安全些,但是这也会使得升级的过程要慢一些。
      理论上讲,最安全的方式是:
      • 导出所有用户的权限
      • 导出所有数据并恢复到新版本数据库中
      • 恢复用户权限到新数据库中

三、具体步骤

  • 获取用户和权限信息. 该操作会备份所有用户的权限.
  1. $ wget percona.com/get/pt-show-grants;
  2. $ perl pt-show-grants --user=root --password=root --flush > /root/grants.sql
  • dump 数据库实例的所有信息(除去mysql, information_schema 和performance_schema数据库).
  1. $ mysql -uroot -proot -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
  2. $ mysqldump --routines --events --single-transaction --databases $(cat /root/dbs-to-dump.sql) > /root/full-data-dump.sql
  • 停止数据库
  1. $ service mysql stop
  2. or
  3. $ /etc/init.d/mysql stop
  • 移动旧数据库(5.5版本)的数据目录(假设是/var/lib/mysql,此处应该改为你自己的数据目录)
  1. $ mv /var/lib/mysql/ /var/lib/mysql-55
  • 安装5.6版本(按照正常安装流程). 如果你不是用的yum/apt-get方式安装的,你需要执行 mysql_install_db 和mysql_upgrade两个命令.
  • 将在1)操作中导出的用户信息导入到新数据库中.
  1. mysql -uroot < /root/grants.sql
  • 将2)导出的数据导入到新数据库.
  1. $ mysql -e "SET GLOBAL max_allowed_packet=1024*1024*1024";
  2. $ mysql -uroot -p --max-allowed-packet=1G < /root/full-data-dump.sql;

四、MySQL官方文档步骤






posted @ 2017-02-09 11:23  sunofsummer  阅读(13298)  评论(0编辑  收藏  举报