(三)定制化升级列表
如果有成百上千个实例要落地升级计划 , 显然是一件庞大的工程 , 某个业务有几十个实例 , 断断续续地沟通 , 研发同学也受不了,而且整体的进度也不好控制,所以我们是从两个维度来做梳理和整合的 。
- 先按照数据库版本把所有业务的信息都梳理出来,比如MySQL 5.6,MySQL 5.7的,可以整理成不同的tab页,按照业务负责人进行汇总;
- 然后按照不同的业务大类或者业务负责人,把上面这个数据中的信息提取出来,这样就形成了业务视角的数据库升级计划,基本就可以开始和研发同学沟通了;
- 当然沟通也不能全靠嘴 , 还需要一些标准化的文档,比如我们整理了不同版本升级需要注意的事项 , 把整个过程需要研发协助的事情都列清楚 , 避免重复的解释和无效沟通;
- 最后是回退方案,这应该是整个方案里面研发同学最关心的部分了,毕竟先把最坏的结果考虑到,一旦发现问题也能及时处理 。

文章插图
(四)研发驱动兼容性/功能测试
1、数据库驱动兼容性测试
数据库驱动测试是升级的一个关键环节,而且涉及到很多开发语言 , 所以兼容性测试是重中之重 。
为了避免走弯路,我们先期和一些研发同学一起梳理测试,整理了如下的驱动兼容性列表,这样后续的一些研发同学接入时,就可以参考了 。

文章插图
而对于C++、.NET、Python/ target=_blank class=infotextkey>Python、php、Go、NodeJS等开发语言,兼容性变动相对较?。?芙崛缦拢?

文章插图
除了驱动型兼容测试,对于MySQL的不同分支版本,也需要进一步测试SQL兼容性和其他注意事项 。
2、MySQL 5.5,5.6升级到MySQL 8.0的兼容性测试:
1)针对group by语法、日期格式字段等有特定要求
如对于group by聚合操作,select列必须在group by中出现 , 若不在group by子句中,认为不合法 。示例:
mysql> select name,age from test group by name,age;
+------+------+
name | age |
+------+------+
aa | 18 |
+------+------+
1 row in set (0.00 sec)
mysql> select name,age from test group by name;
ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contAIns nonaggregated column 'test.test.age' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
对于group by聚合操作 , order by 列必须在group by中出现
mysql> select name,age from test group by name,age order by name;
+------+------+
name | age |
+------+------+
aa | 18 |
+------+------+
1 row in set (0.00 sec)
mysql> select name,age from test group by name,age order by id;
ERROR 1055 (42000): Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'test.test.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
mysql>
- 解决方案1:研发侧调整对应的SQL语句
- 解决方案2:调整MySQL5.7/8.0的sql_mode参数 , 保证兼容MySQL5.5的语法
解决方案:经过排查,目前线上bbs的库表均为innodb存储引擎或者memory存储引擎
3)部分SQL会出现执行计划发生改变,可能需要略微调整
解决方案:目前暂时没有发现 , 后续有类似SQL,可以针对性处理
4)字符集验证
MySQL5.7默认字符集是utf8字符集,如果是gbk等字符集需要调整并验证
解决方案:DBA侧保证升级过后 , 不会出现乱码等字符集报错信息
3、MySQL 5.7升级到MySQL8.0的补充兼容性测试:
1)表中需要包含主键
在8.0版本中会强制要求表中包含主键
2)timestamp数据类型默认值
如果表结构中有timestamp类型字段 , 并且设置了默认值DEFAULT CURRENT_TIMESTAMP,建议将参数设置为off:
explicit_defaults_for_timestamp=OFF(8.0默认为on)
否则有可能会出现:Error:1048 - Column ‘createTime‘ cannot be null
3)执行计划变化
部分SQL会出现执行计划发生改变,可能需要略微调整
推荐阅读
- MySQL 5.7废止了?我们暂无计划
- MySQL5.7 EOL后,国内免费数据库替代方案
- 5.7%甲维盐使用方法 甲维盐使用方法
- 电视剧全网热度榜,《长相思》跌至第三,第一热度高达75.76
- 耗资5.7亿,海外票房仅376万,成龙新片放弃中国市场是最大败笔
- 5.7v8兰德酷路泽油耗
- 4月4日会停服吗 4月4日停服
- 15.7寸等于多少厘米长宽
- 2021年元旦倒计时器
- 高考倒计时,家长如何缓解焦虑
