实战MySQL升级的最佳方法
这篇文章给大家从理论到实战详细分享了MySQL升级的最佳方法,有需要的朋友跟着学习操作下吧。
MySQL5.7新增了不少新功能,比如:Online DDL、多源复制、增强半同步、表空间传输、sys 库、Group Replication等。最近终于等到了一个机会,将MySQL升级到5.7,很是兴奋不已。
MySQL升级的概述
MySQL升级的实质:
对数据字典的升级
数据字典有:mysql、information_schema、performance_schema、sys schema。
MySQL升级的两种方式:
in-place upgrade:
适合小版本的升级。
即 关闭当前的MySQL,替换当前的二进制文件或包,在现有的数据目录上重启MySQL,并运行mysql_upgrade.
特点:不改变数据文件,升级速度快;但,不可以跨操作系统,不可以跨大版本(5.5—>5.7).
logical upgrade:
适合不同操作系统的MySQL升级,大版本之间的升级。
即:使用mysqldump 或 mydumper 导入导出数据,实现版本的升级。
特点:可以跨操作系统,跨大版本;但,升级速度慢,容易出现乱码等问题。
升级前的准备:
提前做好备份。
了解新版本变更的信息(哪些不再兼容,不再支持哪些功能)
在官方网站的general information—>what is new in mysql 5.7
升级的注意事项:
确认新版本是否有重大变更
注意 SQL mode 的变化
比如:在MySQL5.7中发生了SQL mode的变化,对不再支持的SQL mode,部分SQL会跑不通,此时可以清空SQL mode,跑完之后在设置SQL mode。
升级成功后,确认业务SQL是否可以跑通
程序层是否都正常
有时原使用的程序语言部分内容不被支持新版本数据库。比如,有一次在5.1时用的是PHP4.0,但升级到5.6,PHP的某些函数不被支持。
在升级完成之后,一定要在测试时使用和线上版本相同的程序,测试是否存在问题。
存储引擎的变化
比如:在未来的5.8版本,不再支持myisam 引擎。
注意字符集的乱码问题
接下来是,使用in-place upgrade方式,将MySQL5.6升级到MySQL5.7。
In-place upgrade 升级MySQL
环境:
5.6.15 —>5.7.20
升级前的准备:
备份+留意新版本的变更内容
升级操作:
1、对5.7的软件包,下载,解压
# tar -xzvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
# ln -s mysql-5.7.20-linux-glibc2.12-x86_64 mysql5.7
2、关闭当前MySQL(5.6)
# mysql -u root -p -S /data/mysql3308/mysql3308.sock --execute="SET GLOBAL innodb_fast_shutdown=0"
# mysqladmin -u root -p -S /data/mysql3308/mysql3308.sock shutdown
3、替换二进制文件(5.7 替换 5.6)
# cd /usr/local
# mv mysql mysql5.6
# mv mysql5.7 mysql
4、使用现有的数据目录启动MySQL
# mysqld_safe --user=mysql --socket=/data/mysql3308/mysql3308.sock -p --skip-grant-tables --datadir=/data/mysql3308/data
5、检查所有表是否与当前版本兼容,并更新系统库
# mysql_upgrade -uroot -p -S /data/mysql3308/mysql3308.sock
注:mysql_upgrade的作用是检查所有库的所有表是否与当前的新版本兼容,并更新系统库。
6、重启,确保对系统表所做的变更得以生效
# mysqld --defaults-file=/data/mysql3308/my3308.cnf &
# mysql -uroot -p -S /data/mysql3308/mysql3308.sock
至此,升级完成。
问题:对MySQL做升级,若升级失败了怎么办?
在做升级时,一般创建一个从库进行升级,若升级失败,也不会影响到主库;若升级成功,测试也成功,便会将其他的从库也逐渐升级到新版本,最后将主库下线,提升一个从库做新主库,对旧主库进行版本升级。
实战MySQL升级的最佳方法相关推荐
- MySQL升级的最佳实践
2019独角兽企业重金招聘Python工程师标准>>> 前言 MySQL5.7新增了不少新功能,比如:Online DDL.多源复制.增强半同步.表空间传输.sys 库.Group ...
- 移动端访问mysql_java – (可能)数百个移动客户端访问MySQL数据库的最佳方法是什么?...
所以这里是交易. 我正在开发一个 Android应用程序(虽然它可以像任何其他移动平台一样容易)偶尔会向服务器发送查询(编写的是Java).然后,该服务器将在MySQL数据库中搜索查询,并将结果发送回 ...
- 保障MySQL安全的十四个最佳方法
MySQL数据库一贯以高性能.高可性和易用性著称,它已经成为世界上最流行的开源数据库.大量的个人.WEB开发者.大型公司等都在其网站.关键系统.软件包中广泛使用MySQL数据库. 通常,许多企业在部署 ...
- mysql使用什么替代like查询_mysql替代like模糊查询的最佳方法?????求赐教!!!!...
MySQL 模糊查询 最佳 索引 最近做一个项目,商品分类的属性,有30多个属性值,编辑的时候,是把所选属性的int值整合成一个字符串,写进数据库..这样前台查询的时候,选择属性,和数据库的属性字符串 ...
- Mysql时区设置最佳实践,mysql设置时区_修改MySQL时区设置的方法
摘要 腾兴网为您分享:修改MySQL时区设置的方法,一直播,一点开,小猿口算,汤圆等软件知识,以及都优乐,daysmatter,乐学高考app,随缘漂流瓶,虚拟软件,平安知鸟,智能证件照app,新概念 ...
- MySQL数据库多种安装方法及企业级安装实践
本文来自老男孩老师第三本书籍著作<老男孩的MySQL私房菜>第三章内容分享! 3.1 MySQL数据库的安装方法及选择 在当今的互联网企业里,MySQL数据库大多运行在Linux系列操作系 ...
- python定义字符串数组_从字符串数组(或元组)在Python中创建动态sql“ in list”子句的“最佳”方法是什么?...
我正在从Python(使用MySQLDb)运行一个动态MySQL查询,该查询包括一个包含字符串值的" in list"子句.执行此功能的函数将获取一个值数组.如果有帮助,我可以将该 ...
- 在SQL Server中分页结果的最佳方法是什么
如果您还希望获得结果总数(在进行分页之前),那么在SQL Server 2000.2005.2008.2012中对结果进行分页的最佳方法是(性能明智的)? #1楼 最终, Microsoft SQL ...
- jsp mysql中文乱码,jsp中文乱码 jsp mysql 乱码的解决方法
jsp中文乱码 jsp mysql 乱码的解决方法 jsp中文乱码 jsp mysql 乱码要servlet里面支持中文的方法: 在dopost或者doget的第一句加上: request.setCh ...
最新文章
- Eclipse下新建Maven项目、自动打依赖jar包
- codevs 2612 最有分解方案 (贪心)
- oracle notes,Oracle Notes
- window.onload和$(document).ready(function(){})的区别
- 关于'java' 不是内部或外部命令,也不是可运行的程序 或批处理文件 和 错误: 找不到或无法加载主类 helloworld的问题...
- 根据一个数字日期,判断这个日期是这一年的第几天
- C语言输出字母小树,数字小树,**号小树
- MapReduce-多个Mapper
- 2.1 script 元素
- Elixir:可能成为下一代Web开发语言
- npm notice created a lockfile as package-lock.json. You should commit this file.
- 3.20计算机组成原理课堂笔记
- 前端HTML中防止用户在短时间内频繁多次点击按钮
- 13.1.X:ByteScout PDF Extractor SDK
- 最近 火火火 的 GitHub 项目!
- java 数字转大写 100行内搞定
- nohup java -jar 命令启动jar包,项目仍然会莫名其妙挂掉的解决方法
- 解决java关键字和bean变量名内容冲突的神器
- 中心损失和单中心损失
- android 闹钟不响,为什么我写的Android闹钟到时间时却不会响