数据库运行过程中,新版本不断的开发出来,低版本不断被淘汰,在已经运行的业务系统数据库中,我们是否应该升级数据库,升级需要考虑些什么问题呢?

数据库是否应该升级

在准备对数据库升级之前,需要考虑一下几个问题,升级对业务有什么好处?有什么影响?然后再决定是否升级。在考虑是否升级前,需要对整体评估升级版本后能够解决什么样的问题。同时会带来什么样的问题,避免为了升级而升级。

MySQL数据库升级会带来什么好处?

是否能解决业务上的痛点

业务上,升级可能会带来性能上的提升,当然也可能下降,5.6中有个叫performance_schema的库,默认是不开启的,开启此库会增加数据库系统的负担降低数据库性能,不过在5.7中经过优化,对性能的影响几乎可以忽略了。再如8.0中,提升了安全性,同时也支持在很多关系数据库中已经支持的窗口函数,对于数据统计分析的功能支持更好了。

是否能解决运维上的痛点

在运维上,更新的版本多少会带来些新的功能,减轻运维压力,比如MySQL5.7中增加了sys库,相比于5.7之前的版本中,通过sys库可以更好的监控数据库相关的指标。

升级会有什么影响

对原来业务的支持是否影响

不同版本之间的jdbc不一样,如8.0版本和5.7版本,当升级到8.0之后,相应的应用程序也应该一并升级处理,修改连接数据库的驱动。另外,不同版本之间参数可能不一致,如sql_mode,在不同的版本中默认值不一样,对SQL的处理方式不一样,导致SQL执行结果报错或者不符合预想的情况,另外有些参数在高版本中已经失效禁用了,在升级到新版本后,将无法启动数据库。

对原来业务性能是否有影响

上面提到过performance_schema库会对性能有影响,另外,当升级后需要注意InnoDB优化器对SQL语句的处理,不同版本优化方法不一样,可能会不能使用索引导致性能下降。

如何升级MySQL

制定一个可行的升级方案

当评估了升级会带来的好处和影响后,确定要升级的话需要制定一个可行的升级方案了。

评估受影响的业务系统

一般情况下,一个数据库可能会有不同的业务系统使用,在升级前需要确定收到影响的系统,并在升级前通知到位,确保在升级的过程中如果有任何问题都可以找到相关的人来解决或者验证。

升级的详细步骤

对于线上系统的升级,是个紧张且重要的事情,不能出任何差错,因此一个详细的操作步骤是必不可少的。在实际的操作方案中,需要详细到可以直接从方案中复制来使用。大致的步骤如下:

  1. 对待升级数据库进行备份

  2. 升级Slave服务器版本

  3. 手动进行主从切换

  4. 升级Master服务器版本

  5. 升级完成后进行业务检查

  6. 升级后的数据库检查(配置文件、数据库对象、操作系统)

  7. 升级后的业务检查

升级失败回滚方案

俗话说,天有不测风云,虽然不一定能够遇到,但是要准备好在遇到的时候能够处变不惊。一个失败回滚的方案是必不可少的,大致步骤如下:

  1. 升级失败回滚的步骤,详细的回滚失败处理步骤

  2. 回滚后数据库环境检查

  3. 回滚后的业务检查

实施升级方案

总结

对于线上系统的升级,是个高危影响大的操作,在制定方案的时候需要详细到每一个操作步骤都写清楚,要考虑到所有的情况。更重要的一点,需要在实际线上操作之前按照事先写好的方案文档实际操作并修改不当的地方。对于主从复制的升级,需要注意一点是高版本的MySQL数据库能够作为低版本的从库来使用,反之则会出问题,因此需要先升级从库。