当前不少系统的数据库依旧是MySQL5.6,由于MySQL5.7及MySQL8.0在性能及安全方面有着很大的提升,因此需要升级数据库。本文通过逻辑方式、物理方式原地升级来介绍MySQL5.6 升级至MySQL5.7的方法,并介绍其使用场景。

1.  逻辑方式升级

逻辑方式升级其实就是通过逻辑备份工具(例如mysqldump工具)将数据库、表、其他相关对象及数据逻辑备份成SQL脚本,再将其还原至MySQL5.7的实例中。

详细步骤如下:

1.1  备份数据库

当前数据库的版本为MySQL5.6.27,现在准备备份

因为库比较小,因此使用mysqldump进行备份即可。mysqldump备份的方法可以参考历史文章进行了解

备份脚本:

/*备份所有库及相关对象*/

/usr/local/mysql/bin/mysqldump -uroot -p --socket=/app/data/mysql3307/tmp/mysql.sock --master-data=2 --default-character-set=utf8 --routines --triggers --events --flush-logs --flush-privileges --single-transaction --all-databases > all_db.sql

1.2  部署一套MySQL5.7实例

MySQL5.7 的部署历史文章里也有,如果不太熟悉的同学可以参考如下链接文章

安装过程比较简单,本文不再赘述。

1.3  数据导入MySQL5.7

将备份的MySQL5.6的数据导入到MySQL5.7 中即可。

1.4 应用场景

数据量小的情况下使用,此方式通常不会失败

在跨大版本升级的时候使用较多,例如,从MySQL5.6(或更低版本)直接升级到8.0版本

不同MySQL分支之间升级

2.  mysql_update方式升级

使用mysql_update方式升级时,时间相对较快,尤其是数据库体量较大时,此方式可以原地直接升级。

步骤如下:

2.1  下载MySQL5.7

下载需要升级到的版本的数据库,例如本次升级到MySQL5.7.25-28版本(percona分支),则下载对应安装包,解压后配置软连接

2.2  修改配置文件

因MySQL5.6 的部分参数再MySQL5.7 中已经废弃或者默认值发生变化,另外也为了使用MySQL5.7的新特性,需要添加对应的参数配置,例如:

sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION   # 保持和MySQL5.6一致

innodb_large_prefix =OFF                                         # 保持和MySQL5.6 一致

log_timestamps=SYSTEM            # 新增参数,如果不添加,默认日志里采用UTC时间格式记录,我们看上去可能不太方便

secure_file_priv=/tmp                  # MySQL5.7对安全性做了很多提升,此参数不配置的话默认无法使用load file 及ELECT …OUTFILE等

character_set_server= utf8         # 虽然建议使用utf8mb4字符集,但是如果需要保持和原库一致,需要指定

当日,还有很多新特性的参数需要调整,在此不再一一列举,需要的同学直接联系我 或者参考历史文章配置即可

2.3 关闭MySQL5.6 实例

MySQL5.6的关闭可以使用停止服务的方式,也可以通过命令行方式,命令如下:

/*mysql5.6 关闭实例的方式需要使用mysqladmin*/

/usr/local/mysql/bin/mysqladmin --socket=/app/data/mysql3307/tmp/mysql.sock -uroot -p shutdown

建议: 生产环境中,如果可以使用此方式升级,强烈建议先直接冷备一下整个数据库的数据目录,已防止升级失败等情况出现。

2.4  使用MySQL5.7 启动原库

此时需要用MySQL5.7来启动数据库,启动后日志里会有一些报错信息。

启动数据库

/usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/app/data/mysql3307/etc/my.cnf &

日志里内容如下,出现很多错误,其中也提示到需要使用mysql_upgrade进行修复:

2.5  升级数据库

MySQL升级工具是mysql_upgrade,错误日志里也提到了使用mysql_upgrade进行修复相应的错误。升级的方法如下:

/*升级系统库及业务库*/

/usr/local/mysql5.7/bin/mysql_upgrade --socket=/app/data/mysql3307/tmp/mysql.sock -uroot -p

如果只需要升级系统库,则加-s参数; 如果升级过程中有错误或者中断后想再次升级 可以添加--force参数强制升级

/*只升级系统库*/

/usr/local/mysql5.7/bin/mysql_upgrade --socket=/app/data/mysql3307/tmp/mysql.sock -uroot -p -s/*强制升级*/

/usr/local/mysql5.7/bin/mysql_upgrade --socket=/app/data/mysql3307/tmp/mysql.sock -uroot -p --force

2.6 后续工作

升级完成后建议再进行以下工作

重启数据库,以便所有功能生效;且重启后再次查看数据库日志

修改环境变量及软连接,以便默认使用MySQL5.7的相关命令

附: 升级后数据库启动日志

2.7  使用场景

相同大版本之间的小版本升级

数据量较大,提前测试过两个版本之间可以原地升级时再用。

3.  小结

MySQL的逻辑升级及mysql_upgrade的原地升级都有各自的应用场景。但是无论用哪种方式,都要注意以下几点:

a)   在生产环境上进行升级操作之前一定需要先在测试环境中多次进行相同版本的升级测试工作;

b) 实际工作中,测试环境升级成功后需要经过相关业务的回归测试,确保相关功能升级后能正常使用后再在生产环境进行升级,建议测试环境进行1个月以上的测试

c)   生产环境升级前一定要进行备份

d)   生产环境的升级顺序建议是先升级从节点,再升级主节点或进行主从切换

以上就是MySQL5.6升级至MySQL5.7的2种主要方式,如有问题或建议,欢迎与我沟通或投稿(公众号:数据库干货铺)。

mysql dump工具升级_MySQL数据库升级相关推荐

  1. mysql实训报告_mysql数据库技术》实验报告.doc

    mysql数据库技术>实验报告 MySQL数据库技术实验报告 系 别 班 级 学 号 姓 名 地点 地点机房 课程名称 MySQL数据库技术 实验名称 实验1 MySQL的使用 实 验 过 程 ...

  2. 用MySQL Workbench工具分析OSSIM数据库

    用MySQL Workbench工具分析OSSIM数据库 MySQL Workbench是一款专为MySQL设计的E/R数据库建模工具.它是著名的数据库设计工具DBDesigner4的继任者.可以用M ...

  3. mysql命令导出方法_MySQL数据库导出方法大全(命令行+navicat)

    由于前段时间刚做完数据库课设,想导出数据库文件,在朋友的机器上跑一跑.由于我使用的是界面化的mysql,理所当然地认为可以在界面上找到导出数据库的操作选项,结果自己一个人摸索了半天,以失败告终.上网一 ...

  4. mysql数据库升级工具_MySQL数据库升级

    当前不少系统的数据库依旧是MySQL5.6,由于MySQL5.7及MySQL8.0在性能及安全方面有着很大的提升,因此需要升级数据库.本文通过逻辑方式.物理方式原地升级来介绍MySQL5.6 升级至M ...

  5. centos7恢复mysql数据库_MySQL数据库升级迁移填坑记

    原库:*.*.101.73/74 系统环境: Suse 12.4 MySQL: 5.7.29 新库:*.*.110.46/47 系统环境:CentOS7.7 64位 MySQL版本: 5.7.30 [ ...

  6. mysql版本升级对数据的影响_MySQL数据库升级的一些坑

    对于商业数据库而言,数据库升级是一个优先级很高的事情,有版本升级路线图,有相应的补丁,而且对于方案还有一系列的演练,陷入是一场硬仗.而在MySQL方向上,升级这件事情就被淡化了许多,好像只能证明它的存 ...

  7. 成为MySQL DBA 博客系列-数据库升级

    数据库供应商通常每个月都会发布一些有bug /安全性修补程序的补丁,我们为什么要关心?新的版本可能对关于安全漏洞和黑客入侵系统的修复,所以除非安全性不被关注,否则您可能希望在您的系统上安装最新的安全修 ...

  8. mysql特殊字符波浪号_mysql数据库特殊字符

    关于 mysql数据库特殊字符的搜索结果 回答 详细解答可以参考官方帮助文档 说明 部分RDS for MySQL实例的账号管理机制已升级.使用本文前,请先检查您的实例是否已升级,检查方式如下: 登录 ...

  9. mysql dump hbase_mysqldump导出全数据库

    mysql备份与恢复 导出所有数据库 mysqldump -q --single-transaction -A >all.sql 导出某几个数据库 mysqldump -q --single-t ...

最新文章

  1. 面试官:不会看 Explain执行计划,简历敢写 SQL 优化?
  2. vue select js 设置默认值
  3. 封神召唤师显示服务器爆满,封神召唤师总是显示无法连接网络
  4. SAMBA的一些特殊设置
  5. Ghost后不能启动解决小工具
  6. Wrong permissions on configuration file, should not be world writable
  7. python画图代码星星-Python 星星 金字塔 学习笔记
  8. numpy中的matrix矩阵处理
  9. TouTiao开源项目 分析笔记9 实现一个问答主页面
  10. 1007 Maximum Subsequence Sum
  11. 行动力决定了一个人的成败,有想法,就去做! C#的内存管理原理解析+标准Dispose模式的实现
  12. 私人博客定制----封装数据库接口
  13. 进程控制块包含的信息
  14. 从门户网站看内容传播的开放式革命
  15. java中线程的优先级别
  16. 安装应用需要打开未知来源权限_华为盒子安装不了第三方软件?不存在的,简单几步即可搞定...
  17. 高淇Java300集
  18. 而立之年,时间都去哪儿
  19. STM32 F107VC移植freeRTOS
  20. 使用NGINX发布DEM切片

热门文章

  1. Elastic Jeff Yoshimura:开源正在开启新一轮的创新 | 人物志
  2. AI 线上峰会 | 人工智能技术解析与实战
  3. 中继承父类实现父类方法的快捷键_关于封装、继承
  4. java 队列_百战程序员:Java并发阻塞队列
  5. jre for mac 删除_在 Mac 的 Docker Desktop 中运行 K8s
  6. centos7.x redhat7.x 升级openssh8.7
  7. vue-cli-service不是内部或外部命令,也不是可运行的程序
  8. linux根文件系统 /etc/resolv.conf 文件详解
  9. SpringBoot配置文件敏感信息加密,springboot配置文件数据库密码加密jasypt
  10. 小程序开发(5)-之封装组件