一、概述

Linux MySQL 5.7二进制 小版本升级,升级前需要备份数据和mysql主配置文件my.cnf

对数据字典的升级数据字典有:mysql、information_schema、performance_schema、sys schema。

MySQL升级的两种方式:

in-place upgrade:

适合小版本的升级。

即 关闭当前的MySQL,替换当前的二进制文件或包,在现有的数据目录上重启MySQL,并运行mysql_upgrade.

特点:不改变数据文件,升级速度快;但,不可以跨操作系统,不可以跨大版本(5.5—>5.7).

logical upgrade:

适合不同操作系统的MySQL升级,大版本之间的升级。

即:使用mysqldump 或 mydumper 导入导出数据,实现版本的升级。

特点:可以跨操作系统,跨大版本;但,升级速度慢,容易出现乱码等问题。

二、小版本升级

in-place upgrade方式

in-place upgrade包括关闭旧的MySQL服务器,用新的MySQL服务器替换旧的MySQL二进制文件或软件包,在现有数据目录上重新启动MySQL,以及运行mysql_upgrade。

2.1 XA事务InnoDB

如果您使用XA事务InnoDB,请XA RECOVER在升级之前运行以检查未提交的XA事务。如果返回结果,则通过发出XA COMMIT或 XA ROLLBACK声明来提交或回滚XA事务。

2.2 配置MySQL以通过设置innodb_fast_shutdown为 执行慢速关闭 0。

mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"

在关闭过程中,InnoDB执行完全清除并在关闭之前更改缓冲区合并,这可确保在发布版本之间存在文件格式差异时完全准备好数据文件。

2.3 关闭旧的MySQL服务器

mysqladmin -u root -p shutdown

2.4 安装新的MySQL二进制包

下载,解压新的MySQL二进制分发包;

授权:chown -R mysql.mysql /usr/loacl/mysql_new

把MySQL的软连接指向新的mysql服务

unlink /usr/loacl/mysql

ln -s /usr/loacl/mysql_new /usr/loacl/mysql

2.5 使用现有数据目录启动新MySQL 5.7服务器

mysqld_safe --user=mysql --datadir=/path/to/existing-datadir

2.6 运行mysql_upgrade

mysql_upgrade -u root -p

mysql_upgrade检查所有数据库中的所有表是否与当前版本的MySQL不兼容。mysql_upgrade还会升级mysql系统数据库,以便您可以利用新的权限或功能。

注意

mysql_upgrade不会升级帮助表的内容。

2.7 关闭并重新启动MySQL服务器以确保对系统表所做的任何更改都生效

mysqladmin -u root -p shutdown

mysqld_safe --user=mysql --datadir=/path/to/existing-datadir

logical upgrade

逻辑升级涉及使用备份或导出实用程序(如mysqldump)从旧MySQL实例导出SQL ,安装新的MySQL服务器以及将SQL应用于新的MySQL实例。

简单说明逻辑升级就是导出数据,然后升级,最后再导入数据;安全性高,主要针对数据量不大的数据库;常用的工具:mysqldump和Xtrabackup。

3.1 从以前的MySQL安装中导出现有数据:

mysqldump -u root -p

--add-drop-table --routines --events

--all-databases --force > data-for-upgrade.sql

注意

如果数据库包含存储的程序, 请使用--routines和 mysqldump的--events选项 (如上所示)。该 选项包括转储中的所有数据库,包括保存系统表的 数据库。 --all-databasesmysql

重要

如果您有包含生成列的表,请使用MySQL 5.7.9或更高版本提供的mysqldump实用程序来创建转储文件。早期版本中提供的 mysqldump实用程序对生成的列定义使用了错误的语法(Bug#20769542)。您可以使用该 INFORMATION_SCHEMA.COLUMNS 表来标识具有生成列的表。

3.2 关闭旧的MySQL服务器

mysqladmin -u root -p shutdown

3.3 安装MySQL 5.7

参考:

mysql 5.7.21 二进制安装

3.4 初始化新数据目录

mysqld --initialize --datadir=/path/to/5.7-datadir

复制‘root‘@‘localhost‘ 显示在屏幕上的临时密码或写入错误日志以供日后使用。

3.5 使用新数据目录启动MySQL 5.7服务器:

mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir

3.6 重置root密码:

shell> mysql -u root -p

Enter password: ****

mysql> ALTER USER USER() IDENTIFIED BY ‘your new password‘;

3.7 将先前创建的转储文件加载到新的MySQL服务器中

mysql -u root -p --force < data-for-upgrade.sql

注意

gtid_mode=ON如果转储文件包含系统表, 则不建议在服务器()上启用GTID时加载转储文件。 mysqldump为使用非事务性MyISAM存储引擎的系统表发出DML指令,并且在启用GTID时不允许这种组合。另请注意,将启用了GTID的服务器中的转储文件加载到启用了GTID的另一台服务器中会导致生成不同的事务标识符。

3.8 运行mysql_upgrade

mysql_upgrade -u root -p

mysql_upgrade检查所有数据库中的所有表是否与当前版本的MySQL不兼容。mysql_upgrade还会升级mysql系统数据库,以便您可以利用新的权限或功能。

注意

mysql_upgrade不会升级帮助表的内容。

3.9 关闭并重新启动MySQL服务器以确保对系统表所做的任何更改都生效。

mysqladmin -u root -p shutdown

mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir

三、大版本升级

概述

升级前的准备:

提前做好备份。

了解新版本变更的信息(哪些不再兼容,不再支持哪些功能)

在官方网站的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

环境:

5.6.15 —>5.7.26

升级前的准备:

备份+留意新版本的变更内容

升级操作:

1、对5.7的软件包,下载,解压

#tar -xzvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

#ln -s mysql-5.7.26-linux-glibc2.12-x86_64 mysql5.7

2、关闭当前MySQL(5.6)

#mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"

#mysqladmin -u root -p shutdown

3、替换二进制文件(5.7 替换 5.6)

#cd /usr/local

#mv mysql mysql5.6

#mv mysql5.7 mysql

4、使用现有的数据目录启动MySQL

#mysqld_safe --user=mysql -p --skip-grant-tables --datadir=/data/mysql/data

5、检查所有表是否与当前版本兼容,并更新系统库

#mysql_upgrade -uroot -p

注:mysql_upgrade的作用是检查所有库的所有表是否与当前的新版本兼容,并更新系统库。

6、重启,确保对系统表所做的变更得以生效

#mysqld --defaults-file=/etc/my.cnf &

#mysql -uroot -p

至此,升级完成。

跨大版本升级

一 数据备份

(1)查看当前版本:

[root@centos ~]# mysql -V

(2)备份数据:

[root@centos ~]# mysqldump -u root -h 127.0.0.1 -P 3306 -p --all-databases > databases.sql

(3)备份my.cnf配置文件:

[root@centos ~]# cp /etc/my.cnf /home/

#在关闭MySQL的进程后开始升级

[root@localhost ~]# cd /usr/local/

[root@localhost local]# rm -rf mysql

[root@localhost local]# tar -jxvf /usr/local/src/mysql-5.7.26-linux-glibc2.5-x86_64.tar.bz2 -C ./

[root@localhost local]# mv mysql-5.7.26-linux-glibc2.5-x86_64 mysql

[root@localhost local]# cat /etc/ld.so.conf.d/mysql.conf#检查lib路径是否是对的/usr/local/mysql/lib

[root@localhost local]# ldconfig -v#重新加载最新的包到系统中,注意如果是依赖于MySQL的一些软件可能需要重新编译

[root@localhost local]# /etc/init.d/mysqld start#尝试启动,注意在MySQL 5.7中部分变量参数有取消,最好是在另外一台已安装的MySQL 5.7的服务器上查询my.cnf中的变量是否有存在,如不存在说明在新版本中已取消该参数需要删除直到启动为止

[root@localhost local]# /usr/local/mysql/bin/mysql_upgrade -u root -p#使用mysql_upgrade更新升级

在支持mysql_upgrade中会对旧版本的数据进行检查修改,确认升级成功后会进行升级,在升级完成后在databasedir下会生成mysql_upgrade_info记录最新的MySQL版本,启动MySQL,升级完毕

四、数据库升级建议及注意事项

升级部分并无太多区别和不同,更多需要注意版本升级后的不兼容,特性或函数的引用,以及SQL_mode的变更,需要业务进行配合测试,致使升级后数据与原数据无异样,才算升级成功,望知悉,并有测试环境进行配合测试。

mysql版本升级对数据的影响_MySQL升级相关推荐

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

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

  2. mysql更改数据库数据存储目录_MySQL更改数据库数据存储目录

    MySQL数据库默认的数据库文件位于/var/lib/mysql下,有时候由于存储规划等原因,需要更改MySQL数据库的数据存储目录.下文总结整理了实践过程的操作步骤. 1:确认MySQL数据库存储目 ...

  3. mysql一列数据转为一行_MySQL高性能优化规范建议,速度收藏

    作者: 听风 原文: www.cnblogs.com/huchong/p/10219318.html 数据库命令规范 •所有数据库对象名称必须使用小写字母并用下划线分割•所有数据库对象名称禁止使用 M ...

  4. mysql四列数据表代码_MySQL数据库常用代码

    MySQL数据库常用代码启动数据库服务:[ net Start MySQL ] 使用命令登录:[ Mysql -h localhost -u root -p] 关闭数据库服务: [net stop m ...

  5. mysql 8.0数据备份恢复_MySQL 8.0 增强逻辑备份恢复工具介绍-爱可生

    作者:杨涛涛 资深数据库专家,专研 MySQL 十余年.擅长 MySQL.PostgreSQL.MongoDB 等开源数据库相关的备份恢复.SQL 调优.监控运维.高可用架构设计等.目前任职于爱可生, ...

  6. mysql 日志同步 数据不同步_Mysql互为主从问题--日志同步数据不同步

    Mysql互为主从问题--日志同步数据不同步 我搭建的是mysql互为主从 复制 两台机器的mysql环境完全相同 第一部分测试: B为master A为slave的同步测试 在B上创建表lian,并 ...

  7. mysql数据库写入数据的语法_mysql数据库插入数据语法

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. mysql数据库导出数据乱码问题_Mysql数据库导出来的是乱码如何解决

    Mysql数据库导出来的是乱码如何解决 时间:2014-10-13 PHP网站程序人员在制作网站的时候,经常需要将本地上的数据库传到指定的服务器上,这时候需要在软件上先把数据导出来,然后在登录到远程p ...

  9. mysql如何保证数据不丢失_Mysql 是怎么保证数据不丢的

    binlog写盘状态.png 一.binlog的写入机制 binlog写入逻辑: 事务执行过程中.先写日志导binlog cache.事务提交时.再把binlog cache写入到binlog文件中. ...

  10. mysql 删除重复数据 保留一个_MySQL学习笔记-删除重复数据只保留一条

    有这样一张表,表数据及结果如下: 可以看出,school_name的字段值有重复数据(Abraham Lincoln High School 和Agoura High School分别出现两次),那么 ...

最新文章

  1. 基于实体模型开发主题管理简析
  2. 【转】在python下使用包progressbar控制进度条
  3. 有关Visual Studio Code的说明
  4. 百度大数据 CMO的新左脑-百度-喻友平
  5. ASP.NET——上传文件超过了最大请求长度
  6. js多个(N)个数组的的元素组合排序算法,多维数组的排列组合或多个数组之间的排列组合...
  7. HTTP协议详解(真的很经典)(转载)
  8. 关于编程中的一些颜色代码
  9. 移动硬盘显示要格式化怎么办
  10. SuperMap 三维模型数据制作
  11. unity商店创建开发者账户
  12. 世界各国国家货币代码大全[收藏]
  13. DNS测试工具querperf
  14. 注意啦!使用“流量卡”别图便宜,小心被监控!
  15. 颠覆者-读周鸿祎新书
  16. 【Pytorch】解决使用BucketIterator.splits警告volatile was removed and now has no effect. Use `with torch.no_g
  17. Gym 102028D Keiichi Tsuchiya the Drift King(2018 ICPC 焦作站 D 题) 计算几何
  18. 一个理工女宝妈和西牧乳业奶粉的故事
  19. js中判断数据类型的方法
  20. abp构建Web API服务

热门文章

  1. 开发中IDEA常用快捷键
  2. linux+mmap父子通信_Linux 系统开发5 进程间通信 pipe() fifo() mmap()
  3. C/C++中控制循环结构语句:break;continue;
  4. byte数组转为string 去掉转义符_三道简单的 String 面试题干趴下了 n 多大牛!
  5. Qt 维护工具MaintenanceTool.exe 使用
  6. 高等应用数学问题的matlab求解pdf,《高等应用数学问题的matlab求解》(薛定宇 陈阳泉)[PDF]...
  7. MySQL数据库学习资料(六)
  8. html表单提交带后台,form表单提交数据给后台
  9. matlab用pathy语言,2018 年度编程语言 -- Python
  10. Java编程思想(五) —— 多态(下)