再见 mysql_upgrade

alt

在数据库管理的世界里,随着技术的不断进步和业务的不断发展,数据库的版本升级成为了一个不可避免的过程。

MySQL 作为业界领先的开源关系型数据库管理系统,其版本迭代与功能优化同样不容忽视。

而在这个过程中,升级工具就显得尤为重要,比如 mysql_upgrade

但是,mysql_upgrade 已经成为过去式,且来往下看。

mysql_upgrade 介绍

mysql_upgrade 是 MySQL 提供的一个用于升级 MySQL 服务器的实用程序。

它检查服务器上的所有数据库,查看是否需要任何更改以利用新版本的 MySQL 服务器提供的特性。

mysql_upgrade 还会升级系统表,以使用当前 MySQL 版本提供的任何新特性。

简而言之,mysql_upgrade 就是一个帮助用户平滑过渡到新版本 MySQL 的桥梁。

使用 mysql_upgrade 的过程相对简单。

首先,停止旧版本的 MySQL 服务,建议用户备份整个数据库,以防万一升级过程中出现问题。

然后,安装新版本的 MySQL 服务器软件,并启动新版本的 MySQL 服务。

最后,运行 mysql_upgrade 命令,它会检查数据库中的表,并根据需要进行升级。

通常只需向几个表添加新字段,或者修改字段长度,或者补充修订数据。

也可能会出现罕见的情况,比如系统表的存储引擎发生变更,比如由 MyISAM 变更为 InnoDB。

mysql_upgrade 使用示例

举个栗子,

从 MySQL 5.7.18 升级到 MySQL 5.7.19,会增加一个 'mysql.session'@'localhost' 保留账户。

该帐户由插件在内部使用来访问服务器。 它被锁定,因此不能用于客户端连接。

具体案例如下:

现在,我们有一个 MySQL 5.7.18 服务器正在运行。

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.18    |
+-----------+
1 row in set (0.00 sec)

查看用户列表。

mysql> select user from mysql.user;
+-----------+
| user      |
+-----------+
| mysql.sys |
| root      |
+-----------+
2 rows in set (0.00 sec)

我们来停止旧版本的 MySQL 服务。

systemctl stop mysqld

接下来,准备升级到 MySQL 5.7.19,RPM 包已经准备好。

$ ls m*rpm
mysql-community-client-5.7.19-1.el7.x86_64.rpm
mysql-community-common-5.7.19-1.el7.x86_64.rpm
mysql-community-devel-5.7.19-1.el7.x86_64.rpm
mysql-community-embedded-5.7.19-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.19-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.19-1.el7.x86_64.rpm
mysql-community-libs-5.7.19-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.19-1.el7.x86_64.rpm
mysql-community-server-5.7.19-1.el7.x86_64.rpm

使用 yum 命令进行升级。

yum update mysql-community-*
Updated:
  mysql-community-client.x86_64 0:5.7.19-1.el7                             
  mysql-community-common.x86_64 0:5.7.19-1.el7                             
  mysql-community-devel.x86_64 0:5.7.19-1.el7                              
  mysql-community-embedded.x86_64 0:5.7.19-1.el7                           
  mysql-community-embedded-compat.x86_64 0:5.7.19-1.el7                    
  mysql-community-embedded-devel.x86_64 0:5.7.19-1.el7                     
  mysql-community-libs.x86_64 0:5.7.19-1.el7                               
  mysql-community-libs-compat.x86_64 0:5.7.19-1.el7                        
  mysql-community-server.x86_64 0:5.7.19-1.el7                             

Complete!

安装完成,启动新版本的 MySQL 服务。

systemctl start mysqld

登陆数据库,查看用户列表。

mysql> select user from mysql.user;
+-----------+
| user      |
+-----------+
| mysql.sys |
| root      |
+-----------+
2 rows in set (0.00 sec)

可以看到,mysql.session 用户尚未被添加到数据库中。

这里我们开启 general 日志,来观察升级命令都执行了哪些 SQL。

mysql> show variables like '%gen%';
+------------------+-----------------------------+
| Variable_name    | Value                       |
+------------------+-----------------------------+
| general_log      | ON                          |
| general_log_file | /var/lib/mysql/shawnyan.log |
+------------------+-----------------------------+
2 rows in set (0.00 sec)

下一步,运行 mysql_upgrade 命令。

mysql_upgrade
[root@shawnyan ~ 07:42:50]$ mysql_upgrade -uroot -p
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.engine_cost                                  OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.gtid_executed                                OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.innodb_index_stats                           OK
mysql.innodb_table_stats                           OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.server_cost                                  OK
mysql.servers                                      OK
mysql.slave_master_info                            OK
mysql.slave_relay_log_info                         OK
mysql.slave_worker_info                            OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
The sys schema is already up to date (version 1.5.1).
Checking databases.
sys.sys_config                                     OK
Upgrade process completed successfully.
Checking if update is needed.

通过 general 日志,可以看到 mysql.session 用户被写入用户表。

[root@shawnyan ~ 07:43:42]$ grep 'mysql.session' /var/lib/mysql/shawnyan.log
2024-03-15T23:43:09.277088Z     6 Query SELECT COUNT(*) FROM mysql.user WHERE user = 'mysql.session'
2024-03-15T23:43:10.888664Z     6 Query INSERT IGNORE INTO mysql.user VALUES ('localhost','mysql.session','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','Y','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0,'mysql_native_password','*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE','N',CURRENT_TIMESTAMP,NULL,'Y')
2024-03-15T23:43:10.889540Z     6 Query INSERT IGNORE INTO mysql.tables_priv VALUES ('localhost', 'mysql', 'mysql.session', 'user', 'root\@localhost', CURRENT_TIMESTAMP, 'Select', '')
2024-03-15T23:43:10.890429Z     6 Query INSERT IGNORE INTO mysql.db VALUES ('localhost', 'performance_schema', 'mysql.session','Y','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N')
[root@shawnyan ~ 07:44:02]$ 

再次登陆数据库,查看用户列表,确认新用户已经添加成功。

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.19    |
+-----------+
1 row in set (0.00 sec)

mysql>
 select user from mysql.user;
+---------------+
| user          |
+---------------+
| mysql.session |
| mysql.sys     |
| root          |
+---------------+
3 rows in set (0.00 sec)

mysql_upgrade 废弃

不过,从 MySQL 8.0.16 开始, mysql_upgrade 被废弃,并将从未来的版本中移除。

DBA 不再需要额外地手动调用 mysql_upgrade 来进行升级操作。

取而代之的是,服务器新增了 --upgrade 选项,默认值为 AUTO

服务器会自行判断是否需要升级,如需要会在启动时自动执行升级操作。

如果执行 mysql_upgrade 命令,会输出下面一段信息:

The mysql_upgrade client is now deprecated. The actions executed by the upgrade client are now done by the server. To upgrade, please start the new MySQL binary with the older data directory. Repairing user tables is done automatically. Restart is not required after upgrade. The upgrade process automatically starts on running a new MySQL binary with an older data directory. To avoid accidental upgrades, please use the --upgrade=NONE option with the MySQL binary. The option --upgrade=FORCE is also provided to run the server upgrade sequence on demand. It may be possible that the server upgrade fails due to a number of reasons. In that case, the upgrade sequence will run again during the next MySQL server start. If the server upgrade fails repeatedly, the server can be started with the --upgrade=MINIMAL option to start the server without executing the upgrade sequence, thus allowing users to manually rectify the problem.

总结

总的来说,在 MySQL 8.0.16 之前,mysql_upgrade 是一个功能强大且实用的工具,它能够帮助用户平滑地过渡到新版本的 MySQL。

随着 MySQL 版本的不断更新和升级,mysql_upgrade 的功能已经内嵌到 MySQL 服务器,其也将伴随 MySQL 5.7 逐步退出历史舞台。

-- END --

alt

如果这篇文章为你带来了灵感或启发,就帮忙点『赞』or『在看』or『转发』吧,这对我非常重要,感谢!(๑˃̵ᴗ˂̵)

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/291489.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 Mac 上打开、编辑、复制、移动或删除存储在 Windows NTFS 格式 USB 驱动器上的文件 Tuxera NTFS for Mac使用教程

当您获得一台新 Mac 时,它只能读取 Windows NTFS 格式的 USB 驱动器。要将文件添加、保存或写入您的 Mac,您需要一个附加的 NTFS 驱动程序。Tuxera 他可以帮忙实现这一功能! Tuxera可以轻松转换驱动器:无论使用Windows PC还是Mac&…

Day26 手撕各种集合底层源码(一)

Day26 手撕各种集合底层源码(一) 一、手撕ArrayList底层源码 1、概念: ArrayList的底层实现是基于数组的动态扩容结构。 2、思路: 1.研究继承关系 2.研究属性 3.理解创建集合的过程 – 构造方法的底层原理 4.研究添加元素的过程…

Typora for Mac/Win:让Markdown编辑更高效,创作更自由

在数字化时代,文本编辑已成为我们日常生活与工作中的重要环节。Markdown作为一种轻量级标记语言,以其简洁、易读、易写的特性,受到了广大用户的喜爱。而Typora,作为一款专为Markdown设计的文本编辑器,更是让Markdown编…

对接中泰极速行情 | DolphinDB XTP 插件使用教程

XTP 是中泰证券推出的高性能交易平台,专为专业投资者提供高速行情及交易系统,旨在提供优质便捷的市场接入通道。目前支持股票、基金、ETF、债券、期权等多个市场,可满足不同投资者需求。 基于 XTP 官方 C SDK,DolphinDB 开发了 X…

【SAP2000】在框架结构中应用分布式面板荷载Applying Distributed Panel Loads to Frame Structures

在框架结构中应用分布式面板荷载 Applying Distributed Panel Loads to Frame Structures 使用"Uniform to Frame"选项,可以简单地将荷载用于更多样化的情况。 With the “Uniform to Frame” option, loads can be easily used for a greater diversity of situat…

2024Web自动化测试的技术框架和工具有哪些?

Web 自动化测试是一种自动化测试方式,旨在模拟人工操作对 Web 应用程序进行测试。这种测试方式可以提高测试效率和测试精度,减少人工测试的工作量和测试成本。在 Web 自动化测试中,技术框架和工具起着至关重要的作用。本文将介绍几种常见的 W…

Fastjson配置消息转换器(时间格式问题)

问题: 我们可以看见,日期的格式有点问题。 由于ArticleListVO类的createTime成员变量是Date类型,默认是由java的Jackson来处理,使用 ISO-8601 规范来处理日期时间格式。ISO-8601 是一种国际标准的日期时间表示法,例如&…

Oracle中实现根据条件对数据的增删改操作——Merge Into

一、需求描述 在我们进行项目开发的过程中,会遇到这样的场景,需要根据某个条件对数据进行增、删、改的操作;遇到这种情况我们有2种方法进行解决: 方法一:①查询指定条件;②根据查询出的指定条件结果在执行…

conda配置完整的pytorch虚拟环境

新建环境 conda create -n py38 python3.8虚拟环境中安装CUDA,conda安装的cudatoolkit和NVIDIA提供的CUDA Toolkit不一样,前者是系统CUDA的子集。在虚拟环境中安装了cudatoolkit,则pytorch就会用虚拟环境中的cudatoolkit进行编译。注意cudato…

Centos安装部署

Centos安装部署 linux安装JDK 下载地址:https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html 创建文件夹,输入命令: mkdir /usr/local/jdk 查看JDK信息,输入命令: java -version 将下载的…

配置visual studio code 用秘钥远程连接SSH服务器

配置visual studio code 用秘钥远程连接SSH服务器 文章目录 配置visual studio code 用秘钥远程连接SSH服务器简介1. 生成SSH密钥对2. 将公钥添加到Ubuntu服务器3. 将私钥添加到visual studio code的SSH配置文件中 简介 通过SSH密钥认证,用户无需在每次连接时输入密…

C++11 shared_from_this学习

最近学习网络变成发现一些C源码库中封装对象时会公有继承enable_shared_from_this&#xff1b; 用一个案例进行说明&#xff0c;案例代码如下&#xff1a; #include <iostream> #include <memory> #include <stdio.h>using namespace std;class C : public…

谈一谈BEV和Transformer在自动驾驶中的应用

谈一谈BEV和Transformer在自动驾驶中的应用 BEV和Transformer都这么火&#xff0c;这次就聊一聊。 结尾有资料连接 一 BEV有什么用 首先&#xff0c;鸟瞰图并不能带来新的功能&#xff0c;对规控也没有什么额外的好处。 从鸟瞰图这个名词就可以看出来&#xff0c;本来摄像头…

啥是MCU,MCU科普

啥是MCU&#xff0c;MCU科普 附赠自动驾驶学习资料和量产经验&#xff1a;链接 MCU是Microcontroller Unit 的简称&#xff0c;中文叫微控制器&#xff0c;俗称单片机&#xff0c;是把CPU的频率与规格做适当缩减&#xff0c;并将内存、计数器、USB、A/D转换、UART、PLC、DMA等…

剑指Offer题目笔记21(计数排序)

面试题74&#xff1a; 问题&#xff1a; ​ 输入一个区间的集合&#xff0c;将重叠的区间合并。 解决方案&#xff1a; ​ 先将所有区间按照起始位置排序&#xff0c;然后比较相邻两个区间的结束位置就能知道它们是否重叠。如果它们重叠就将它们合并&#xff0c;然后判断合并…

VS Code常用前端开发插件和基础配置

VS Code插件安装 VS Code提供了非常丰富的插件功能&#xff0c;根据你的需要&#xff0c;安装对应的插件可以大大提高开发效率。 完成前端开发&#xff0c;常见插件介绍&#xff1a; 1、Chinese (Simplified) Language Pack 适用于 VS Code 的中文&#xff08;简体&#xff…

再次加深理解Java中的并发编程

目录 一、线程、进程、程序 二、线程状态 三、线程的七大参数 四、lock与synchronized锁机制 一&#xff09;、lock与synchronized锁区别 二&#xff09;、synchronized锁原理 三&#xff09;、Lock锁原理 五、synchronized锁升级原理 一&#xff09;、锁升级基础知识 …

AIGC重塑金融:AI大模型驱动的金融变革与实践

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-tVrfBkGvUD0Qi13F {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

【微服务】配置Nacos管理SpringBoot配置文件(附解压包)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 一、什么是Nacos Nacos可以帮助我们配置和管理微服务&#xff0c;是阿里的一个开源产品&#xff0c;是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。Nacos可以用来实现配置中心和服务注册中心。 …

我国伺服系统市场规模逐渐扩大 未来有望实现完全国产替代

我国伺服系统市场规模逐渐扩大 未来有望实现完全国产替代 伺服系统又称为随动系统&#xff0c;是用于精确地跟随或复现某个过程的反馈控制系统。伺服系统主要包括驱动器、指令机构和电机等&#xff0c;可根据控制指令&#xff0c;对功率进行放大、变换与调控等处理&#xff0c;…