mysql数据库升级-MySQL 5.7.25主备架构小版本In-Place升级思路

2023-10-27

一、描述
漏扫发现MySQL有低风险漏洞,自己写方案、自己做测试、自己升级。
版本:MySQL 5.7.25 升级到MySQL 5.7.28最新版本。
架构:主从架构

二、升级流程
1、下载最新版数据库软件MySQL 5.7.28
2、上传到指定目录
3、备份数据库软件、数据库数据目录、my.cnf
4、解压缩数据库软件到指定路径
5、关闭备库
6、使用新版软件启动备库,mysqld_safe &
7、登录备库,发现版本已升级,使用mysql_upgrade命令升级系统数据库
8、无报错的话,重启备库。
9、主库按照备库流程走一遍
10、最后确认主备库是否一致

三、部分内容
# mysql_upgrade -uroot -p
mysql_upgrade: [Warning] Using a password on the command line interface can be insecure.
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
Found outdated sys schema version 1.5.1.
Upgrading the sys schema.
Checking databases.
sys.sys_config                                     OK
Upgrade process completed successfully.
Checking if update is needed.

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.7.28, for linux-glibc2.12 (x86_64) using  EditLine wrapper

Connection id:        2
Current database:    
Current user:        root@localhost
SSL:            Not in use
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        5.7.28-log MySQL Community Server (GPL)
Protocol version:    10
Connection:        Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:        /tmp/mysql.sock
Uptime:            27 sec
-----------------------------------

升级案例2 

从库

一、新版本mysql环境准备

1.解压mysql 5.7.31

tar -zxf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz -C /software/

2. 替换软链接

[root@study04 software]# ll
total 0
drwxr-xr-x 3 mysql mysql 209 Apr 12 14:14 3307
drwxr-xr-x 3 mysql mysql 209 Apr 12 14:22 3308
lrwxrwxrwx 1 mysql mysql  35 Apr 12 11:36 mysql -> mysql-5.7.25-linux-glibc2.12-x86_64
drwxr-xr-x 9 mysql mysql 129 Apr 12 11:30 mysql-5.7.25-linux-glibc2.12-x86_64
drwxr-xr-x 9  7161 31415 129 Jun  2  2020 mysql-5.7.31-linux-glibc2.12-x86_64

[root@study04 software]# unlink mysql

[root@study04 software]# ln -s mysql-5.7.31-linux-glibc2.12-x86_64 mysql

[root@study04 software]# ll
total 0
drwxr-xr-x 3 mysql mysql 209 Apr 12 14:14 3307
drwxr-xr-x 3 mysql mysql 209 Apr 12 14:22 3308
lrwxrwxrwx 1 root  root   35 Apr 12 14:28 mysql -> mysql-5.7.31-linux-glibc2.12-x86_64
drwxr-xr-x 9 mysql mysql 129 Apr 12 11:30 mysql-5.7.25-linux-glibc2.12-x86_64
drwxr-xr-x 9  7161 31415 129 Jun  2  2020 mysql-5.7.31-linux-glibc2.12-x86_64

3.修改目录权限

chown -R mysql.mysql mysql-5.7.31-linux-glibc2.12-x86_64

二、停从库流量和实例并备份数据

1.检查表是否损坏

mysql> select * from information_schema.tables where TABLE_COMMENT like '%repair%';
Empty set (0.10 sec)

2.检查从库主从是否正常及有无延迟

show slave status \G

3.停从库流量及io_thread

mysql> stop slave io_thread;
Query OK, 0 rows affected (0.00 sec)

4.数据全部落盘

待slave sql_thread完全应用后全部落盘

mysql> set global innodb_fast_shutdown=0;
Query OK, 0 rows affected (0.00 sec)

登录到数据库设置innodb_fast_shutdown到0。可以使用SET GLOBAL进行动态更改,

设置为0:会做清除脏页和插入缓冲区的合并操作,也会将脏页全部刷新到磁盘上面去,但是这个时候关闭的速度也是最慢的,此时数据完整性能得到最大保障

设置为1:关闭MySQL的时候不会做清除脏页和插入缓冲区的合并操作,也不会将脏页刷新到磁盘

设置为2:不会做清除脏页和插入缓冲区的合并操作,也不会将脏页刷新到磁盘,但是会刷新到redo log里面,再下次启动mysql的时候恢复
 

5.停从库

mysql> shutdown;
Query OK, 0 rows affected (0.00 sec)

4.备份从库

通过 cp datadir 目录的方式来备份

cp -a data data0412

三、启动新版本MySQL

1.检查my.cnf配置文件

  • 1.1 检查basedir指向位置是否正确
  • 1.2 super_read_only 如果开启的话需要临时关闭,后期升级数据字典时候需要写入数据

2.检查启动脚本basedir指向是否正确

[root@study04 3308]# cat /etc/systemd/system/mysqld_3308.service | grep ExecStart
ExecStart=/software/mysql/bin/mysqld --defaults-file=/software/3308/my.cnf

3.启动msyql5.7.31

[root@study04 3308]# systemctl start mysqld_3308

[root@study04 3308]# ps -ef | grep mysqld | grep 3308
mysql     6703     1 10 14:58 ?        00:00:01 /software/mysql/bin/mysqld --defaults-file=/software/3308/my.cnf

四、运行 mysql_upgrade 升级数据字典

1.运行 mysql_upgrade

  • 1.出现Upgrade process completed successfully字样表示成功
  • 2.如果中间出现错误打断,需要再次运行

[root@study04 3308]# mysql_upgrade -uroot -S /software/3308/mysql.sock
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
...
...
...
sbtest.sbtest3                                     OK
sbtest.sbtest4                                     OK
sys.sys_config                                     OK
Upgrade process completed successfully.
Checking if update is needed.
 

然后执行mysql_upgrade,此时需要选择--skip-write-binlog选项

确保mysql数据库中的系统表与新版本完全兼容
快速检查所有表并将其标记为与新版本的MariaDB兼容
systemctl start mariadb    # 启动mariadb
mysql_upgrade --skip-write-binlog --force -uroot -p    # 执行mysql_upgrade
此时系统会自动执行以下几个步骤,等待执行完成就好:

Checking and upgrading mysql database
Installing used storage engines:Checking for tables with unknown storage engine
Fixing views
Running 'mysql_fix_privilege_tables'
Fixing table and database names
Checking and upgrading tables
Running 'FLUSH PRIVILEGES'
————————————————

2.重启MySQL 5.7.31实例

[root@study04 3308]# systemctl restart mysqld_3308

五、升级后操作

1.确认升级是否成功

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

2.检查主从状态及延迟情况

mysql> show slave status \G

主库

  • 1.停主库流量
  • 2.待主从数据一致后进行主从切换
  • 3.讲流量指向升级后新主库
  • 4.原主库重复上述步骤升级
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql数据库升级-MySQL 5.7.25主备架构小版本In-Place升级思路 的相关文章

  • Android 应用程序和 MySql 连接无法连接。打开

    当我尝试打开连接时发生错误并显示 System TypeInitializationException MySql Data MySqlClient Replication ReplicationManager 的类型初始值设定项引发异常
  • mysql select sql 中的竞争条件

    我试图完成的事情看起来很简单 数据库类型 MyISAM表结构 card id status查询 从表中选择一个未使用的card id 并将该行设置为 已使用 当两个查询同时运行并且状态更新之前 相同的card id被获取两次 这是否是竞争条
  • 检索MySQL中特定日期范围内发生的所有记录

    我有一个包含多个合同的表 每个合同都有一个开始日期和一个结束日期 如下所示 ID Contract Name Start Date End Date 1 Joe Bloggs 2012 01 01 2012 02 05 2 John Smi
  • 为什么 LOCK TABLES [table] WRITE 不阻止表读取?

    根据http dev mysql com doc refman 5 0 en lock tables html http dev mysql com doc refman 5 0 en lock tables html如果我锁定一张表以在
  • Spring boot JDBC无法连接docker容器中的mysql

    我正在尝试在两个单独的 docker 容器中运行 spring boot 应用程序 作为简单的 REST api 和 mysql 服务器 但是 我无法在 Spring 应用程序中获取 jdbc 连接来连接 mysql 它们都是独立工作的 当
  • 使用 Symfony 表单上传多个文件

    UPDATED在我的 Symfony 项目中 我能够上传单个图像 现在我正在尝试上传多个图像 class ImageFile extends AbstractType param FormBuilderInterface builder p
  • Django 管理员 - 登录

    我正在建造一个Django Web App 与 Django Suit 用于管理界面 已经让 Python 2 7 Django 1 10 和 MySQL 和谐通信并启动了一个项目 python m django admin startpr
  • 这个 SQL DELETE FROM 语法有什么问题?

    我正在尝试删除 96k 记录 删除表 xoops bb posts text 页面中没有与 xoops bb posts 匹配的 post id 的所有记录 此查询返回 91k 条记录 SELECT FROM xoops bb posts
  • MySQL 导入 125000 行 CSV 的最快方法?

    这是我第一次使用 MySQL 除了对现有数据库进行一些基本查询之外 所以我不擅长解决这个问题 我有一个包含 125 000 条记录的 CSV 我想将其加载到 MySQL 中 我安装了版本 8 和工作台 我使用导入向导加载 CSV 它开始导入
  • Java 从 SQL 数组获取 ResultSet 失败

    我试图从数据库中检索电子邮件地址 但没有成功 我的代码如下 Main System out println PortfolioData getEmails 58 So Far Returning null 投资组合数据 public sta
  • 通过我的java代码导出数据库

    我想使用我的 java 代码导出我的 MySQL 数据库 但我还没有找到任何办法 我想要做的就是我的应用程序中有一个按钮作为 导出数据库 单击该按钮时 我的数据库应导出到指定的路径 我使用了以下代码 但它不起作用 Runtime runti
  • MYSQL中收盘价的简单移动平均线计算和更新表

    我可以使用一些帮助 最好是虚拟指南 来更新下表 CREATE TABLE SYMBOL day date NOT NULL open decimal 8 3 DEFAULT NULL high decimal 8 3 DEFAULT NUL
  • MYSQL 查询返回“资源 id#12”而不是它应返回的数值

    不知道为什么 但这返回了错误的值 我正在取回此资源 ID 12 而不是我正在寻找的数值 1 执行此操作的代码是 type SELECT account type from user attribs WHERE username userna
  • Preg_replace() 删除除查询结尾之外的所有内容

    首先 为我糟糕的英语感到抱歉 我有这样的疑问 SELECT t1 SELECT COUNT FROM table a t2 WHERE t1 id t2 id c AND t2 status 1 AS aula FROM table c t
  • MySQL 按主键排序

    某些 SQL 服务器允许使用通用语句 例如ORDER BY PRIMARY KEY 我不相信这适用于 MySQL 是否有任何此类解决方法可以允许跨多个表自动选择 或者是否需要查找查询来确定主键 我一直在研究的解决方法包括调用SHOW COL
  • mysql语句中的*星号是什么意思?

    Ex mysql query SELECT FROM members WHERE id id 这意味着选择表中的所有列
  • mySQL MATCH 跨多个表

    我有一组 4 个表 我想对其进行搜索 每个都有全文索引 查询可以使用每个索引吗 CREATE TABLE categories id int 5 unsigned NOT NULL auto increment display order
  • PHP PDO相关:更新SQL语句未更新数据库内容

    我正在尝试使用准备好的语句来实现更新语句PHP http en wikipedia org wiki PHP脚本 但它似乎没有更新数据库中的记录 我不确定为什么 所以如果您能分享一些见解 我将不胜感激 Code query UPDATE D
  • 如何将 MySQL 数据库更改为 UTC?

    我使用的是 Windows 7 对数据库方面的东西有点陌生 我尝试在 Google 上搜索如何将系统时区更改为 UTC 但文档有些高级 我不太确定如何更改此字段 在 my ini 文件的 mysqld 部分下 添加以下行 default t
  • 如何以最少的查询次数获取帖子列表和关联标签

    我的表格结构如下 标签 更多的是一个类别 id 标签名称 描述 slug POSTS ID 标题 网址 邮戳 id idPost idTag USERS ID 用户名 userSlug VOTES id idPost idUser 每个帖子

随机推荐

  • 怎样才能提升广告投放效果?牢记这5点!

    在我们的日常生活中 广告可以说一个随处可见 无所不在的一个事物 各行各业的组织 企业等都会进行广告宣传 以达到推广产品或建立企业形象等商业目的 广告虽然非常常见 覆盖率比较高 广告的代言人和展现形式也不尽相同 但并不是所有的广告都能达到预期
  • UE4C++ 如何在静态函数中SpawnActor

    最近在学习用C 复刻YouTube上的一个蓝图库存系统 其中在从背包中丢弃枪械 然后在世界中生成一个枪械Actor的时候遇到了问题 由于这个生成函数是在几个不同的类中复用的 YouTube原版的做法是把这个函数写在了GameState类里面
  • Java基础面试题附带答案

    091内部类可以引用它的包含类 外部类 的成员吗 有没有什么限制 一个内部类对象可以访问创建它的外部类对象的成员 包括私有成员 092Anonymous Inner Class 匿名内部类 是否可以继承其它类 是否可以 实现接口 可以继承其
  • 黑苹果睡眠唤醒usb失灵_(已解决)睡眠唤醒重启的问题

    Time stamp Domain Message Duration Delay UUID 0C11AC44 B57D 4895 8067 C95A
  • Intent详细用法介绍

    文章目录 Intent介绍 Intent属性 intent种类 intent过滤器 Intent介绍 Activity Service Broadcast通信 可传递Bundle Intent属性 Component name属性 通过se
  • 2020年网络系统管理改革试点评分标准四

    考核点11 在D盘查看备份文件 分数 5分 考点答案 考点解析 本题考查点 组策略备份 配置案例 依次选择 服务器管理器 工具 组策略管理 在 组策略管理 窗口中依次选择 林 域 ChinaSkills cn 右键单击 组策略对象 在弹出的
  • 2D Alpha Shape:基于二维Delaunay(德洛内)三角网的边缘点查找

    文章目录 0 效果 1 Delaunay三角网基本内容 2 Bowyer Watson算法 3 基于Delanay方法的Alpha Shape确定散乱点的边缘点 4 代码实现 C Opencv 5 参考 0 效果 点间距10 1 Delau
  • Arduino智能小车——超声波避障

    Arduino智能小车 超声波避障 Arduino智能小车系列教程时空门 Arduino智能小车 拼装篇 点击跳转 Arduino智能小车 测试篇 点击跳转 Arduino智能小车 调速篇 点击跳转 Arduino智能小车 超声波避障 点击
  • Linux自带的RHCS集群套件简单认识及kvm,qemu,libvirt的简单认识

    一 简介 RHCS即 RedHat Cluster Suite 中文意思即红帽集群套件 红帽集群套件 RedHat Cluter Suite RHCS 是一套综合的软件组件 可以通过在部署时采用不同的配置 以满足你的对高可用性 负载均衡 可
  • CoreData(数据库升级 )版本迁移-iOS App升级安装

    如果IOS App 使用到CoreData 并且在上一个版本上有数据库更新 新增表 字段等操作 那在覆盖安装程序时就要进行CoreData数据库的迁移 具体操作如下 1 选中你的mydata xcdatamodeld文件 选择菜单edito
  • MySQL多版本并发控制分析 事务

    2 行的更新过程 下面演示下事务对某行记录的更新过程 1 初始数据行 F1 F6是某行列的名字 1 6是其对应的数据 后面三个隐含字段分别对应该行的事务号和回滚指针 假如这条数据是刚INSERT的 可以认为ID为1 其他两个字段为空 2 事
  • Javascript中最常用的30个经典技巧

    这个是我从网上找到的 整理了一下 1 nc ntextmenu window event returnValue false 将彻底屏蔽鼠标右键 table border border td no td table 可用于Table 2 取
  • Unity3d离散仿真引擎基础

    1 解释对象与资源的区别与联系 对象 对象直接出现在游戏场景中 是资源整合的具体表现 对象一般有玩家 敌人 游戏场景 摄像机等虚拟父类 这些父类没有实例化 而他们的子类实例化并包含了这些游戏对象 我们可以对这些对象进行操作 资源 资源可以是
  • [2023.8.28]Chapter1 ARM Embedded Systems

    ARM处理器内核是许多成功的32位嵌入式系统的关键组件 您可能自己就拥有其中之一 甚至可能没有意识到 ARM内核广泛应用于手机 手持组织器和其他许多日常便携消费设备中 从1985年的第一款ARM1原型机起 ARM的设计师们已经取得了长足的进
  • demo程序是什么_纯小白干货:第一个Java程序示例——Hello World!

    跟随世界潮流 第一个Java程序输出 Hell World 通过Eclipse运行程序 启动Eclipse 在菜单中选择 文件 gt 新建 gt Java项目 弹出对话框 填入项目名称 点击 完成 创建项目成功 可以看到在 E javawo
  • AsyncTask的实用-中断请求实现

    平时的app网络操作一般有几种方式 new Thread handler new AsyncTask 我常用的方式是new AsyncTask 可能比较方便吧 弊端 就是一旦请求 没有焦点 只能等待黑圈转完 new Thread 好处是好控
  • 【实践2】Python openpyxl获取Excel所有表名,删除Excel内指定工作表(判断是否存在某个sheet,存在即删除)

    简单介绍 定时爬虫任务会有每天使用pandas将数据写入Excel表中的动作 但每天写入的行数会有不同 例如第一天写入5000行而第二天只写入3000行 会导致该表中前3000行是最新数据 后2000是前一天的数据 因此最好的方法是在将数据
  • Magento关于添加Robots.txt文件

    在 Magento和其他电子商务平台的SEO话题中 有一个很常见的问题 怎样写robots txt文件 里面到底应该包含哪些内容 为了很好滴回答这个问题 我将根据我所有的知识和经验尝试找出一个最佳的robots txt文件写法 下面部分ro
  • 时间SQL查询大全

    查询15天之前得数据 modifydate 是数据库得时间字段格式yyyy MM dd hh mm ss SELECT FROM 表名 where DATE SUB CURDATE INTERVAL 15 DAY gt date modif
  • mysql数据库升级-MySQL 5.7.25主备架构小版本In-Place升级思路

    一 描述 漏扫发现MySQL有低风险漏洞 自己写方案 自己做测试 自己升级 版本 MySQL 5 7 25 升级到MySQL 5 7 28最新版本 架构 主从架构 二 升级流程 1 下载最新版数据库软件MySQL 5 7 28 2 上传到指