mysql 升级降级记录

MySQL版本升级

升级

一、升级注意事项

1、支持GA版本之间升级

2、5.6版本升级到5.7版本,先将5.6升级至最新版,再升级到5.7

3、5.5版本升级到5.7版本,先将5.5升级至最新版,再5.5升级到5.6最新版,再5.6最新版升级到5.7最新版

4、升级前要要备份(特别是升级到8.0+版本),方便失败回退,因为8.0+版本必须采用备份才可以退回

5、停机时间(业务停止时间)

开始停业务

升级过程花费时间

升级失败回退时间

业务恢复时间

二、8.0版本之前升级

(一)、inplace(就地)(在一台服务器上升级)

第一步:安装高版本软件

第二步:停止低版本库运行

关闭快速关库功能

vim /data3316/my.cnf

#添加以下参数
innodb_fast_shutdown=0

关闭数据库

systemctl stop mysqld3316

第三步:用高版本软件,挂低版本数据启动

/data/app/mysql/bin/mysqld_safe --defaults-file=/data/3316/my.cnf --skip-grant-tables --skip-networking &

第四步:高版本软件升级命令升级低版本数据(mysql_upgrade)

/data/app/mysql/bin/mysql_upgrade -S /tmp/mysql3316.sock --force

mysql_upgrade    #升级命令
--force    # 忽略报错,强制传入数据

第五步:修改启动脚本

vim /etc/systemd/system/mysqld3316.service

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/data/app/mysql/bin/mysqld --defaults-file=/data/3316/my.cnf    #将软件路径改为高版本路径
LimitNOFILE = 5000

第六步:退出单用户模式,正常启动数据库

mysqladmin -S /tmp/mysql3316.sock shutdown
systemctl start mysqld3316.service

第七步:验证各项功能是否正常

第八步:业务恢复

三、8.0版本之后升级

例如: 5.7.28 升级至 8.0.18 版本

(一)、升级前预检查

1. 下载 8.0.18 版本的 mysql-shell,并安装

yum install -y mysql-shell-8.0.18-1.el7.x86_64.rpm

2.创建相关用户

grant all on *.* to root@'10.0.0.%' identified by '123';

3. 预 检查

mysqlsh root:123@10.0.0.51:3306 -e "util.checkForServerUpgrade()"

升级步骤

第一步:先进行数据库备份

第二步:安装高版本软件

第三步:直接用高版本软件挂低版本库启动

降级

一、降级注意事项

1、inplace降级只支持同一个发布版G中的A版本

2、5.7降级到5.6只能使用logical模式

3、不支持跨多版本降级

二、8.0版本之前降级

(一)、5.7.28降级到5.7.10(inplace)

1. 安装 5.7.10 (低) 二进制版本

2. 针对5728版本(高)进行处理工作

set sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ;
set global sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ;
select @@sql_mode;                              
ALTER TABLE mysql.proc MODIFY definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
ALTER TABLE mysql.event MODIFY definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
ALTER TABLE mysql.tables_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL DEFAULT '';
ALTER TABLE mysql.procs_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL DEFAULT '';

3. 优雅的关闭5.7.28

数据库内执行:

set global innodb_fast_shutdown=0 ;

4. 删除redo日志文件(ib_logfile* )

rm -rf /data/3306/data/ib_logfile*

5. 替换配置文件、环境变量 (替换成低版本)

[mysqld]
user=mysql
basedir=/data/app/mysql5710
#basedir=/data/app/mysql56
datadir=/data/3306/data
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock

vim /etc/profile

export PATH=/data/app/mysql5710/bin:$PATH
source /etc/profile
mysql -V

6. 修改启动脚本,启动数据库

vim /etc/systemd/system/mysqld3308.service

ExecStart=/data/app/mysql5710/bin/mysqld --defaults-file=/data/3308/my.cnf

systemctl daemon-reload
systemctl start mysqld3308.service

7. 检查降级后系统表状态

mysql_upgrade --force 

(二)、5.7.28降级到5.6.46(logical)

第一步:降级前准备

安装低版本软件

初始化低版本示例

启动登录低版本数据库

第二步:系统表处理

1、调整sql_mode,设置为向下兼容

set sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ;
set global sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ;
						select @@sql_mode;

2.由于 5.7.13版本开始,用户的增长了定义长度。

降级时,需要将长度调整为低版本兼容的长度(77字符)

ALTER TABLE mysql.proc MODIFY definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
ALTER TABLE mysql.event MODIFY definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
ALTER TABLE mysql.tables_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL DEFAULT '';
ALTER TABLE mysql.procs_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL DEFAULT '';

3.5.7.8版本之后,在授权表中user列的长度需要从16调整为32字符。

所以降级到5.7.8更低的版本,需要调整位16长度

ALTER TABLE mysql.tables_priv MODIFY User char(16) NOT NULL default '';
ALTER TABLE mysql.columns_priv MODIFY User char(16) NOT NULL default '';
ALTER TABLE mysql.user MODIFY User char(16) NOT NULL default '';
ALTER TABLE mysql.db MODIFY User char(16) NOT NULL default '';
ALTER TABLE mysql.procs_priv MODIFY User char(16) binary DEFAULT '' NOT NULL;

4.在 5.7.6版本以后,user 表中 password字段 已经取消,被替换为了 authentication_string 列。 如果降级,需要替换回来

ALTER TABLE mysql.user ADD Password char(41) character set latin1
  collate latin1_bin NOT NULL default '' AFTER user;
UPDATE mysql.user SET password = authentication_string WHERE
  LENGTH(authentication_string) = 41 AND plugin = 'mysql_native_password';
UPDATE mysql.user SET authentication_string = '' WHERE
  LENGTH(authentication_string) = 41 AND plugin = 'mysql_native_password';

5.在5.7.5 版本之后,会将一些系统表的存储引擎从MyISAM替换为InnoDB。

要降级的话,需要替换回来

ALTER TABLE mysql.help_category ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.help_keyword ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.help_relation ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.help_topic ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.time_zone ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.time_zone_leap_second ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.time_zone_name ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.time_zone_transition  ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.time_zone_transition_type ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.plugin ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.servers ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;

6.在 5.7 之后 plungin列,

字符长度需要调整会原来状态

ALTER TABLE mysql.user MODIFY plugin CHAR(64) COLLATE utf8_bin
DEFAULT 'mysql_native_password';

7.5.7.7 版本之后有了sys库,降级之前要删除掉

DROP DATABASE sys;

第三步:逻辑备份5.7.28数据

mysqldump -A >/tmp/full.sql

第四步:初始化一套5.6.46的空环境

vim /etc/profile

export PATH=/data/app/mysql56/bin:$PATH

source /etc/profile
mv /etc/my.cnf /etc/my.cnf.bak
rm -rf /data/3316/data/*
/data/app/mysql56/scripts/mysql_install_db  --user=mysql --basedir=/data/app/mysql56 --datadir=/data/3316/data
systemctl start mysqld3316

恢复备份数据到5.6.46中

mysql -S /tmp/mysql3316.sock 
mysql> source /tmp/full.sql
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值