搜索
首页数据库mysql教程详细讲解安全升级MySQL的方法_MySQL

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.     直接升级:安装好新版本数据库后,利用已经存在的数据文件夹,同时运行mysql_upgrade脚本来升级。
  2.     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

5) 安装5.6版本(按照正常安装流程). 如果你不是用的yum/apt-get方式安装的,你需要执行 mysql_install_db 和mysql_upgrade两个命令.

6) 将在1)操作中导出的用户信息导入到新数据库中.

 
mysql -uroot < /root/grants.sql

7) 将2)导出的数据导入到新数据库.
 

$ mysql -e "SET GLOBAL max_allowed_packet=1024*1024*1024";
$ mysql -uroot -p --max-allowed-packet=1G < /root/full-data-dump.sql;

此时, 所有的表都在MySQL 5.6中重建及重新加载完成,所以所有的二进制文件对MySQL 5.6可用. 同时也你完成了最干净/最稳定的升级过程,你可以恢复你的应用- 这个升级过程和valina MySQL与Percona Server的升级过程是一样的.甚至你可以把Oracle MySQL升级到Percona Server. 比如: 把Oracle MySQL 5.5升级到Percona Server 5.6. 再次强调: MySQL的升级过程和Percona Server的升级过程是一样的,只需要将Percona Server 替换成Oracle MySQL即可.

"SQL dump" 也可以称为逻辑备份.用升级后的MySQL二进制文件来重建所有的表基本没有兼容问题,从这一方面来说"SQL dump"更安全. 但是对于TB, GB级的大数据来说,这种方法非常的耗时. 另一方面, 备份/重新加载如此大的数据集,比如重建InnoDB表,你需要恢复很多的空闲磁盘,这样会引起的磁盘碎片整理优化.对于常更新或者删除的数据来说, 这么做是有益的.

用In-Place升级小版本:

这种升级方式是在一个主版本内做小版本升级, 比如把MySQL 5.5.35升级到MySQL 5.5.38或者是把Percona Server 5.6.14升级到最新的Percona Server 5.6.20

这被称为一个就地升级,你只安装一个新的二进制包,然后运行mysql_upgrade脚本,如果必要的话,检查和更新系统表。仍然,就地升级我们强烈推荐检查新功能的发布说明,bug修复等。Percona Server 5.5 和 Percona Server 5.6 发行说明可以分别在这儿和那儿找到。

当我们需要升级Percona服务器时,针对它的Percona-specific的一些特性,对于Percona服务器我们有额外的文档描述一些细节,可以在这儿和那儿找到。这也包括完成就地升级过程的和yum/apt的包管理器。

同时,在安全方面你可以升级那些使用较早描述的逻辑转储程序,mysqldump或mydumper程序——前者并行备份和恢复和逻辑备份,升级是最安全的方法。

直接升级到最新版本:

跳过5.1版本直接把MySQL从5.0版本升级到5.5版本,或者跳过5.5版本直接从MySQL 5.1升级到5.6.甚至,可以直接从MySQL 5.0升级到MySQL 5.6虽然现在只有少数人还在使用MySQL 5.0版本. 这种同样使用于Percona Server.

在这里我们假设跳过5.5版本,把Oracle MySQL或者Percona Server直接从5.1版本升级到5.6版本.


在开始之前,你要意识到这是一个很慎重的操作,将一步跨过一个重要的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的“升级文档”中,详情可以查看升级文档。


这里重点提一下,极不推荐跳过一个重要版本来升级。从MySQL5.1升级到5.6不应该一步完成,我建议先从5.1升级到5.5,再从5.5升级到5.6,每步都要运行MySQL自动升级(mysql_upgrade)。这将比较有效处理手册上所说的升级改变。

MySQL的升级预防措施:

MySQL的升级预防措施是升级的一个基本部分。在你升级之前,确保你在新的MySQL版本中彻底测试了所有的应用功能。这对重要版本之间的升级尤为重要,对重要版本之间的跨越升级也很重要(例如,从MySQL5.1升级到MySQL5.6)。

确保你认真阅读了发行说明,并且你清楚所有改变。你可以从以下链接中获取Oracle MySQL 5.5和5.6的发行说明:

http://dev.mysql.com/doc/relnotes/mysql/5.5/en/

http://dev.mysql.com/doc/relnotes/mysql/5.6/en/

Percona Server有单独的发行说明,按上面说的顺序可以参看以下链接:

http://www.percona.com/doc/percona-server/5.5/release-notes/release-notes_index.html
http://www.percona.com/doc/percona-server/5.6/release-notes/release-notes_index.html

如果你计划升级到 Oracle MySQL 5.6 或者 Percona Server 5.6,我建议你首先检查以下已经存在的关键bugs。以下是你需要注意的一些bugs:

http://bugs.mysql.com/bug.php?id=66546
http://bugs.mysql.com/bug.php?id=68953
http://bugs.mysql.com/bug.php?id=69444
http://bugs.mysql.com/bug.php?id=70922
http://bugs.mysql.com/bug.php?id=72794
http://bugs.mysql.com/bug.php?id=73820


升级的层次结构:

这也是每一次MySQL升级的关键。你需要根据一个升级层次结构来做你的每次升级。建议的次序结构是:首先升级 dev/QA servers,然后升级 staging server,最后升级到 production servers上。实际上,你可以缩小升级的步伐,一步一步升级到你想要的版本,每步都可以充分地测试原来的应用。

一旦你对在test servers, staging servers等上运行的升级感到满意后,你就可以在你的production servers上进行升级了。在副本环境下,我建议你先升级MySQL slaves(一个接一个的)最后升级MySQL master。实际上,你可以先升级一个slaves,让它在安全环境下运行几天,同时观察仔细观察它的运行情况。如果你的服务器中没有副本环境的设置,那么还是值得建立一个副本环境来测试新版的MySQL的。一旦你对升级结果感到满意,你可以升级其他的slaves,最后升级master。

Percona软件包帮助你MySQL升级:

在MySQL升级中,Percona Toolkit 都能帮助你。Percona Toolkit 的一些工具将会起到很大的作用。

pt-upgrade 是其中的一个工具。它使你能测试新版MySQL实例是否能够达到像老版本处理一些特定查询的时候一样的速度。新版本可能有一些本质上的改变,因为MySQL的查询优化器从5.1到5.6已经有了重大改变,还有数据统计可能刷新,因此查询计划会改变。你可以在手册中看到更多优化器的改变。

pt-query-digest 是另一个能给你极大帮助的工具。你可以多次运行你的slow query log,以比较确认在现在的版本和新版本之间的表现差别。

你也可以从MySQL的Percona Cloud Tools中获得帮助,这是一个托管服务,可以为所有MySQL的使用提供查询性能分析。现在你可以免费注册这个服务,因为现在这项服务在进行公开测试。Percona Cloud Tools在许多同类产品中,能让你可视化的观察到每次MySQL升级后的查询表现。

再次重申,强烈建议你每次更新MySQL前备份数据。Percona XtraBackup就是一款免费、开源的(就像所有Percona软件一样)。这是一个热备份工具,它允许你在线备份数据而不影响你对数据库的读写操作,而且它备份数据时产生很小的影响。 
结论:

一次MySQL升级看起来是个简单的任务,但实际上并没有那么简单。我试图在这篇文章中最大限度覆盖所有有关MySQL升级中你可能遇到的情况。再次强调,我建议你在应用更新的版本之前,先测试一下你的应用在新版本中的效果。否则,可能会使你的应用崩溃,或者得到的不是提高查询效率而是降低查询效率。最后,我建议你准备一个降级计划或措施,以防你升级之后出现不可预料的错误。在问题出现的时候,有一个规划好的降级程序将会极大的减少你的应用停工期。期待你在下面发表评论和提问。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
您可以使用哪些工具来监视MySQL性能?您可以使用哪些工具来监视MySQL性能?Apr 23, 2025 am 12:21 AM

如何有效监控MySQL性能?使用mysqladmin、SHOWGLOBALSTATUS、PerconaMonitoringandManagement(PMM)和MySQLEnterpriseMonitor等工具。1.使用mysqladmin查看连接数。2.用SHOWGLOBALSTATUS查看查询数。3.PMM提供详细性能数据和图形化界面。4.MySQLEnterpriseMonitor提供丰富的监控功能和报警机制。

MySQL与SQL Server有何不同?MySQL与SQL Server有何不同?Apr 23, 2025 am 12:20 AM

MySQL和SQLServer的区别在于:1)MySQL是开源的,适用于Web和嵌入式系统,2)SQLServer是微软的商业产品,适用于企业级应用。两者在存储引擎、性能优化和应用场景上有显着差异,选择时需考虑项目规模和未来扩展性。

在哪些情况下,您可以选择SQL Server而不是MySQL?在哪些情况下,您可以选择SQL Server而不是MySQL?Apr 23, 2025 am 12:20 AM

在需要高可用性、高级安全性和良好集成性的企业级应用场景下,应选择SQLServer而不是MySQL。1)SQLServer提供企业级功能,如高可用性和高级安全性。2)它与微软生态系统如VisualStudio和PowerBI紧密集成。3)SQLServer在性能优化方面表现出色,支持内存优化表和列存储索引。

MySQL如何处理角色集和碰撞?MySQL如何处理角色集和碰撞?Apr 23, 2025 am 12:19 AM

mySqlManagesCharacterSetsetSandCollat​​ionsyutusututf-8asthEdeFault,允许ConfigurationAtdataBase,table和columnlevels,AndrequiringCarefullageLignmentToavoidMismatches.1)setDefeaultCharactersetTercharactersetEtCollacterSeteTandColletationForAdataBase.2)conformentcollecharactersettersetertersetcollat​​ertersetcollat​​ioncollat​​ion

MySQL中有什么触发器?MySQL中有什么触发器?Apr 23, 2025 am 12:11 AM

MySQL触发器是与表相关联的自动执行的存储过程,用于在特定数据操作时执行一系列操作。1)触发器定义与作用:用于数据校验、日志记录等。2)工作原理:分为BEFORE和AFTER,支持行级触发。3)使用示例:可用于记录薪资变更或更新库存。4)调试技巧:使用SHOWTRIGGERS和SHOWCREATETRIGGER命令。5)性能优化:避免复杂操作,使用索引,管理事务。

您如何在MySQL中创建和管理用户帐户?您如何在MySQL中创建和管理用户帐户?Apr 22, 2025 pm 06:05 PM

在MySQL中创建和管理用户账户的步骤如下:1.创建用户:使用CREATEUSER'newuser'@'localhost'IDENTIFIEDBY'password';2.分配权限:使用GRANTSELECT,INSERT,UPDATEONmydatabase.TO'newuser'@'localhost';3.修正权限错误:使用REVOKEALLPRIVILEGESONmydatabase.FROM'newuser'@'localhost';然后重新分配权限;4.优化权限:使用SHOWGRA

MySQL与Oracle有何不同?MySQL与Oracle有何不同?Apr 22, 2025 pm 05:57 PM

MySQL适合快速开发和中小型应用,Oracle适合大型企业和高可用性需求。1)MySQL开源、易用,适用于Web应用和中小型企业。2)Oracle功能强大,适合大型企业和政府机构。3)MySQL支持多种存储引擎,Oracle提供丰富的企业级功能。

与其他关系数据库相比,使用MySQL的缺点是什么?与其他关系数据库相比,使用MySQL的缺点是什么?Apr 22, 2025 pm 05:49 PM

MySQL相比其他关系型数据库的劣势包括:1.性能问题:在处理大规模数据时可能遇到瓶颈,PostgreSQL在复杂查询和大数据处理上表现更优。2.扩展性:水平扩展能力不如GoogleSpanner和AmazonAurora。3.功能限制:在高级功能上不如PostgreSQL和Oracle,某些功能需要更多自定义代码和维护。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版