前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 5.5升级5.7小试

MySQL 5.5升级5.7小试

作者头像
jeanron100
发布2019-08-28 15:12:17
2.3K0
发布2019-08-28 15:12:17
举报

这是学习笔记的第 2079 篇文章

下午的时候接到业务部门的一个需求,他们有一个业务对性能要求比较高,在测试环境已经做了一些测试和优化,想看看在MySQL新版本中是否有一定的提升,现在使用的数据库版本是MySQL 5.5.19,想问问我能不能做下升级。

确实,很少有业务部门对数据库版本有一定的要求,对我来说有点儿惊喜。本来要推到下周的事情,我就速战速决吧。

升级数据库版本,在商业数据库中是一个大活,有一定的复杂性,记得在Oracle中是有一个特有的版本升级路线图的,现在都19c了,相比路线图更是复杂了不少。

回到这个需求,在MySQL中,常用的思路无非是两种,一种是迁移式升级,一种是字典升级。鉴于这是一个测试环境,上面的数据库很多,数据量也不大,采用迁移式升级是比较推荐的,因为业务方对时间的要求比较宽松,1个小时以内交付就行,所以我想试试字典升级的方式。

整个迁移的过程可以归纳为下面的几个步骤:

1.多版本软件部署

2.停库备份

3.切换版本,启动数据库

4.升级数据字典

5.重启数据库

我们来逐个说一下。

源环境是MySQL 5.5.19,升级到Percona 5.7.16版本

  1. 多版本软件部署 需要在同一台服务器上部署多版本软件,在这里就是5.7的软件,这里使用二进制的部署方式,目录暂定为/usr/local/mysql_5.7
  2. 停库备份 这应该是最关键的一个步骤了,可以考虑多个层面的备份,比如目前的数据量不大,可以直接做目录的复制,同时为了保险起见,再做一个逻辑备份,记得备份/etc/my.cnf
  3. 切换版本,启动数据库 这个是风险高发阶段,很可能数据库启动出现问题。 常见的问题是参数不兼容,比如下面的参数是5.7版本中不识别的。 thread_concurrency = 8 innodb_additional_mem_pool_size = 32M innodb_thread_concurrency = 0 还有MySQL的启动方式,是用mysqld_safe --defaults-file总是提示如下的错误。

mysqld_safe Adding '/usr/local/Percona-Server-5.7.16-10-Linux.x86_64.ssl101/lib/mysql/libjemalloc.so.1' to LD_PRELOAD for mysqld

mysqld_safe ld_preload libraries can only be loaded from system directories (/usr/lib64, /usr/lib, /usr/local/mysql/lib)

[1]+ Exit 1 mysqld_safe --defaults-file=/data/mysql_4306/my.cnf

而使用service的方式启动就没有问题了,可以看到方式还是有较大的差异,在/etc/init.d下面的mysql文件里有这些变量的差异性补充,还有Percona和MySQL社区版的文件路径差异

root 21395 1 0 15:25 pts/2 00:00:00 /bin/sh /usr/local/Percona-Server-5.7.16-10-Linux.x86_64.ssl101/bin/mysqld_safe --datadir=/data/mysql_4306/data --pid-file=/data/mysql_4306/tmp/mysql.pid

4.升级数据字典

数据库启动之后,算是处于一个临界状态,用的MySQL 5.7的软件,但是数据字典还是5.5版本的。可以使用自带的mysql_upgrade来进行升级。

mysql_upgrade --socket=/data/mysql_4306/tmp/mysql.sock --port=4306 -uroot -pxxxx

MySQL的字典升级难得之处就是对于字典的兼容性很好,没有了版本间的复杂依赖,处理起来真是很清爽。

会输出一些简单日志,类似下面的形式:

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.host 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

Upgrading the sys schema.

Checking databases.

。。。

liteapp.banner OK

litework.attributes

error : Partitioning upgrade required. Please dump/reload to fix it or do: ALTER TABLE `litework`.`attributes` UPGRADE PARTITIONING

litework.id_sequence OK

。。。

Repairing tables

Upgrading tables

`test`.`monitor_db`

Running : ALTER TABLE `test`.`monitor_db` FORCE

status : OK

Running : ALTER TABLE `litework`.`attributes` UPGRADE PARTITIONING

status : OK

。。。

Upgrade process completed successfully.

整个过程不超过2分钟即可搞定。

5.重启数据库

升级之后需要做下基本的检查,比如查看数据库日志,查看sys库是否正常等。

当然在生产环境中的检查和预案就要丰富一些了,总之一句话,升级是一件风险极高的任务,一定要做好完整的备份,升级不成如何降级,你有了余地才有了进步的机会。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档