Maison base de données tutoriel mysql 详细讲解安全升级MySQL的方法_MySQL

详细讲解安全升级MySQL的方法_MySQL

Jun 01, 2016 pm 12:59 PM
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
Copier après la connexion

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
Copier après la connexion

3) 停止数据库


$ service mysql stop
Copier après la connexion

or

$ /etc/init.d/mysql stop
Copier après la connexion

4) 移动旧数据库(5.5版本)的数据目录(假设是/var/lib/mysql,此处应该改为你自己的数据目录)

$ mv /var/lib/mysql/ /var/lib/mysql-55
Copier après la connexion

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

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

 
mysql -uroot < /root/grants.sql
Copier après la connexion

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

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

此时, 所有的表都在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升级中你可能遇到的情况。再次强调,我建议你在应用更新的版本之前,先测试一下你的应用在新版本中的效果。否则,可能会使你的应用崩溃,或者得到的不是提高查询效率而是降低查询效率。最后,我建议你准备一个降级计划或措施,以防你升级之后出现不可预料的错误。在问题出现的时候,有一个规划好的降级程序将会极大的减少你的应用停工期。期待你在下面发表评论和提问。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment résoudre MySQL ne peut pas être démarré Comment résoudre MySQL ne peut pas être démarré Apr 08, 2025 pm 02:21 PM

Il existe de nombreuses raisons pour lesquelles la startup MySQL échoue, et elle peut être diagnostiquée en vérifiant le journal des erreurs. Les causes courantes incluent les conflits de port (vérifier l'occupation du port et la configuration de modification), les problèmes d'autorisation (vérifier le service exécutant les autorisations des utilisateurs), les erreurs de fichier de configuration (vérifier les paramètres des paramètres), la corruption du répertoire de données (restaurer les données ou reconstruire l'espace de la table), les problèmes d'espace de la table InNODB (vérifier les fichiers IBDATA1), la défaillance du chargement du plug-in (vérification du journal des erreurs). Lors de la résolution de problèmes, vous devez les analyser en fonction du journal d'erreur, trouver la cause profonde du problème et développer l'habitude de sauvegarder régulièrement les données pour prévenir et résoudre des problèmes.

MySQL a-t-il besoin d'Internet MySQL a-t-il besoin d'Internet Apr 08, 2025 pm 02:18 PM

MySQL peut s'exécuter sans connexions réseau pour le stockage et la gestion des données de base. Cependant, la connexion réseau est requise pour l'interaction avec d'autres systèmes, l'accès à distance ou l'utilisation de fonctionnalités avancées telles que la réplication et le clustering. De plus, les mesures de sécurité (telles que les pare-feu), l'optimisation des performances (choisissez la bonne connexion réseau) et la sauvegarde des données sont essentielles pour se connecter à Internet.

La clé principale de MySQL peut être nul La clé principale de MySQL peut être nul Apr 08, 2025 pm 03:03 PM

La clé primaire MySQL ne peut pas être vide car la clé principale est un attribut de clé qui identifie de manière unique chaque ligne dans la base de données. Si la clé primaire peut être vide, l'enregistrement ne peut pas être identifié de manière unique, ce qui entraînera une confusion des données. Lorsque vous utilisez des colonnes entières ou des UUIdes auto-incrémentales comme clés principales, vous devez considérer des facteurs tels que l'efficacité et l'occupation de l'espace et choisir une solution appropriée.

Comment utiliser substring_index dans mysql Comment utiliser substring_index dans mysql Apr 08, 2025 pm 02:09 PM

Dans les opérations de la base de données MySQL, le traitement des chaînes est un lien inévitable. La fonction substring_index est conçue pour cela, qui peut extraire efficacement les sous-chaînes en fonction des séparateurs. Exemple d'application de fonction substring_index L'exemple suivant montre la flexibilité et la praticité de la fonction substring_index: extraire des pièces spécifiques de l'URL par exemple, extraire le nom de domaine: selectSubString_index ('www.mysql.com' ','. ', 2); Extraire l'extension de fichier pour obtenir facilement l'extension du fichier: selectSubString_index ('file.pdf', '.', - 1); Le traitement n'existe pas

Mysql peut-il renvoyer JSON Mysql peut-il renvoyer JSON Apr 08, 2025 pm 03:09 PM

MySQL peut renvoyer les données JSON. La fonction JSON_Extract extrait les valeurs de champ. Pour les requêtes complexes, envisagez d'utiliser la clause pour filtrer les données JSON, mais faites attention à son impact sur les performances. Le support de MySQL pour JSON augmente constamment, et il est recommandé de faire attention aux dernières versions et fonctionnalités.

MySQL peut-il fonctionner sur Android MySQL peut-il fonctionner sur Android Apr 08, 2025 pm 05:03 PM

MySQL ne peut pas fonctionner directement sur Android, mais il peut être implémenté indirectement en utilisant les méthodes suivantes: à l'aide de la base de données légère SQLite, qui est construite sur le système Android, ne nécessite pas de serveur distinct et a une petite utilisation des ressources, qui est très adaptée aux applications de périphériques mobiles. Connectez-vous à distance au serveur MySQL et connectez-vous à la base de données MySQL sur le serveur distant via le réseau pour la lecture et l'écriture de données, mais il existe des inconvénients tels que des dépendances de réseau solides, des problèmes de sécurité et des coûts de serveur.

MySQL doit-il payer MySQL doit-il payer Apr 08, 2025 pm 05:36 PM

MySQL a une version communautaire gratuite et une version d'entreprise payante. La version communautaire peut être utilisée et modifiée gratuitement, mais le support est limité et convient aux applications avec des exigences de stabilité faibles et des capacités techniques solides. L'Enterprise Edition fournit une prise en charge commerciale complète pour les applications qui nécessitent une base de données stable, fiable et haute performance et disposées à payer pour le soutien. Les facteurs pris en compte lors du choix d'une version comprennent la criticité des applications, la budgétisation et les compétences techniques. Il n'y a pas d'option parfaite, seulement l'option la plus appropriée, et vous devez choisir soigneusement en fonction de la situation spécifique.

Comment optimiser les performances MySQL pour les applications de haute charge? Comment optimiser les performances MySQL pour les applications de haute charge? Apr 08, 2025 pm 06:03 PM

Guide d'optimisation des performances de la base de données MySQL dans les applications à forte intensité de ressources, la base de données MySQL joue un rôle crucial et est responsable de la gestion des transactions massives. Cependant, à mesure que l'échelle de l'application se développe, les goulots d'étranglement des performances de la base de données deviennent souvent une contrainte. Cet article explorera une série de stratégies efficaces d'optimisation des performances MySQL pour garantir que votre application reste efficace et réactive dans des charges élevées. Nous combinerons des cas réels pour expliquer les technologies clés approfondies telles que l'indexation, l'optimisation des requêtes, la conception de la base de données et la mise en cache. 1. La conception de l'architecture de la base de données et l'architecture optimisée de la base de données sont la pierre angulaire de l'optimisation des performances MySQL. Voici quelques principes de base: sélectionner le bon type de données et sélectionner le plus petit type de données qui répond aux besoins peut non seulement économiser un espace de stockage, mais également améliorer la vitesse de traitement des données.

See all articles