mysql版本升级思路

建议 : 不管哪种方式升级,都应该先做了冷备。方便失败回退,完全克隆整个复制;dd命令吗?

很少有降级的操作,一般都是升级,到了8.0以后无法降级,只能通过逻辑备份恢复到低版本;

mysql没有补丁一说,只能通过升级来修复bug;只有Oracle才有补丁;升级过程很快的;

升级有风险,要充分测试,并且拉入项目真实跑一跑,看看是否有兼容性问题;测试2个月,升级半小时;

逻辑备份可以在任何版本中迁移,但是时间很长,假如你有1T数据,逻辑备份可能需要一周,

mysql支持从库的版本比主库高;

大数据量的情况下,先用物理备份迁移到机器C上,然后构建主从同步数据,然后在线升级8.0升级版本、开始测试;测试的时候可以单独提取出,进行性业务测试;1. 测试通过后,将机器C变为机器A的从库,然后同步数据,同时切断机器B的从库关系,进行升级、重启;2. 机器B升级成功后,变为机器C的从库,同时申请计划停服,让机器C追上机器A;3. 追上后,关闭机器A,使用地址漂移,将机器C变为主机,然后开服;

始终要保持一个冷备份,和二进制备份 ;

使用保持一写一读,提供服务,只有升级主库时候需要停服,申请停止服务10分钟就可以了;

最保险的就是迁移备份;但是最常用的就是就地升级,可能有几百套业务,每套业务都是独立的数据库;

INPLACE 升级过程原理 (生产思路)

一定要升级从库,在升级主库;

官方地址

5.5一下升级到5.7只能通过逻辑备份的方式,主从的方式是不可以的,官方有说;

INPLACE 升级过程原理

参数innodb_fast_shutdown默认为1,为不干净的关闭,就是立即关闭数据库,redo里面可能还有没有落盘的数据;设置为0后,为干净的关闭,所有的数据都落盘到磁盘中;因为版本升级可能牵扯到系统文件的升级,最好要将所有数据落盘;

a. 安装新版本软件,先将最新的版本安装上​b. 关闭原数据库业务(挂维护页) innodb_fast_shutdown=0备份原数据库数据(冷备)#cp或者PBK都可以​c. 使用新版本软件 “挂” 旧版本数据启动(--skip-grant-tables ,--skip-networking)# 因为授权表在不同版本中不一样,所以先跳过授权表不加载​d. 升级 : 只是升级系统表。升级时间和数据量无关的。# 使用mysql_upgrade命令升级,这一步才是升级的本质;​e. 正常重启数据库。f. 验证各项功能是否正常。g. 业务恢复。建议: inpalce升级最好是主从环境,先从库再主库。

5.6.50 —-> 5.7.32 Inplace 升级演练

5.6.50已经是5.6的最新版本了,然后准备升级到5.7.32版本;(其实可以选择一个5.7.10靠近5.6.50的版本

在从库搞1.先停业务怎么停业务?通过中间件或者程序功能将入口关闭掉,不要让新的连接进来;确认现有的连接是否都断掉了,不行就强制kill掉,mysql>kill 序号;没完成的事务改回滚的回滚不用管;        select concat('kill',id,';') from information_schema.processlist;2. 调整参数set global innodb_fast_shutdown=0;然后停机mysql> shutdown;可能会慢一些;​3. 进行冷备份,cp命令,将数据和日志分别拷贝走;cp -ra /my5.6/data/\* /backup/data/​4. 新版本的数据库挂旧版本的数据,需要指定data数据存在的目录,可以通过旧版本的配置文件读取即可;mysql5.7/mysqld_safe --default-file=5.6/my56.cnf --skip-grant-tables --skip-networking &其实可以把冷备的数据当做5.7的启动数据,省的以后不能动;​​5. 连接进去mysql -S /tmp/mysql56.sock #因为读取的是5.6的配置文件,所以sock就在这里;但是程序已经是5.7.32了,不信你看下面截图;升级启动表;肯定要用最新版的upgrade升级;(8.0可以省略这一步)[root@db01 data]# /usr/local/mysql57/bin/mysql_upgrade -S /tmp/mysql56.sock --force​6.检查是否升级完了    5.7多了一个sys库;    mysql>shutdown;关机掉,然后正常开启        7. 开启服务/mysql5.7/mysqld_safe --defaults-file=/etc/my56.cnf &这里配置文件和启动防止都可以该,只是数据存放的data目录在配置my57.cnf时候不要动之外,其他的都是5.7最新的地址;甚至可以systemctl启动;起始可以把冷备的数据当做5.7的启动数据,省的这里不能动;​​​​

将5.7 升级至 8.0

mysqlshell

# 新特性:1、 mysql-shell工具,8.0以后,可以调用这个命令,升级之前的预检查。  自动帮我规避风险​例子:[root@db01 ~]# mysqlsh root:123@10.0.0.51:3306 -e "util.checkForServerUpgrade()"​2、升级时不再需要手工 mysql_upgrade,8.0自动帮我们做了;​​3、限制:升级前必须要备份。否则无法回退。

1.检查环境,看看5.7.10这个版本能否直接升级到8.0

先将5.7.10正常运行着,安装mysqlsh软件,看老师笔记a. 下载 8.0.24 版本的 mysql-shell,并安装 。https://downloads.mysql.com/archives/[root@db01 app]# yum install -y mysql-shell-8.0.24-1.el7.x86_64.rpm​[root@lixia~] # lsmysql-shell-8.0.24-linux-glibc2.12-x86-64bit.tar.gz  #解压就能用,升级到那个版本就安装那个版本的shell [root@lixia~] # tar xf mysql-shell-8.0.24-linux-glibc2.12-x86-64bit.tar.gz [root@lixia~] # ln -s mysql-shell-8.0.24-linux-glibc2.12-x86-64bit /usr/locl/mysqlsh

剩下的不走和上面一模一样;就是少了一个mysql_upgrade;

冷备回退

如果升级失败了,就要回退版本;

记得chown -R mysql. /data/mysql56bak

请登录后发表评论

    没有回复内容