MySQL版本升级之5.6到5.7

两种升级方式

  • In-Place Upgrade: Involves shutting down the old MySQL version, replacing the old MySQL binaries or packages with the new ones, restarting MySQL on the existing data directory, and running mysql_upgrade.
  • Logical Upgrade: Involves exporting existing data from the old MySQL version using mysqldump, installing the new MySQL version, loading the dump file into the new MySQL version, and running mysql_upgrade.

主从的升级:

  1. 主从想都替换二进制安装包为最新版本
  2. 停从,通过mysql_upgrade升级后,加参数 --skip-slaves-start 进行启动  
  3. 加参数 --skip-networking重启主,拒绝来自应用的TCP/IP的连接,关闭binlog,执行mysql_upgrade,然后重启
  • 注意点:在关闭服务时加参数 --innodb_fast_shutdown=0 (slow shutdown),会将所有提交的事务对应的脏页刷新到数据文件中,默认是1(fast shutdown 参考文献:http://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_fast_shutdown)

MySQL5.6版本到5.7版本的更新包括一些不兼容的特性,在升级到5.7之前,我们需要知道这些不兼容的特性并手动更新,在其中涉及到REPAIR TABLE和USE_FRM选项的指令一定要在更新版本之前完成。

配置项更新

  • --early-plugin-load

MySQL5.7.11,此参数的默认值为keyring_file(是一个二进制文件的插件),InnoDB表空间在初始化InnoDB之前需要此插件来加密,但是MySQL5.7.12及以后此参数默认为空,所以5.7.11升级到5.7.12后,如果已经在之前的版本中使用此插件对InnoDB表空间进行了加密,在开启服务时需要指定参数 --early-plugin-load

  • 系统表

MySQL5.6中INFORMATION_SCHEMA 中存在系统变量和状态变量的表,show variables 和show status也是基于此库中的表,在5.7.6时被Performance Schema也存在这四张表,show 语句开始基于Performance Schema中的表,如果show_compatibility_56参数开启,则兼容5.6

下面的测试库是从MySQL5.6版本中直接物理恢复到MySQL5.7环境下的

mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.10-log |
+------------+
1 row in set (0.00 sec)

mysql> show variables like ‘%56%‘;
ERROR 1146 (42S02): Table ‘performance_schema.session_variables‘ doesn‘t exist

mysql> use performance_schema;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A


Database changed
mysql> show tables like ‘%variable%‘;
Empty set (0.00 sec)


mysql> set global show_compatibility_56=ON;
Query OK, 0 rows affected (0.00 sec)


mysql> show variables like ‘%56%‘;
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| sha256_password_proxy_users | OFF   |
| show_compatibility_56       | ON    |
+-----------------------------+-------+
2 rows in set (0.00 sec)

sql mode

ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ENGINE_SUBSTITUTION默认开启

如以下sql在only full group by下,name非聚集字列,如果不在乎返回的address的值是否准确,则可以使用ANY_VALUE函数,这样address字段就无需满足full group by 出现在group by 中

SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;

系统表的改变

mysql.user的password字段在5.7.6中已去除,认证信息记录在authentication_string中,运行in-place upgrade 迁移password列值到authentication_string

如果是通过logical upgrade,需要注意:

server端的更改

MySQL5.7.5开始mysql_old_password 插件被移除

secure-auth 系统变量仅支持值1

--skip-secure-auth 选项被弃用

old_password系统变量的值1(将密码hash为41位的hash值)不再被允许

old_password ()函数被移除

字段类型YEAR(2)被更改为YEAR(4)

MySQL5.7.2开始mysql.user系统表中的plugin字段不允许为空,运行mysql_upgrade会进行如下操作

UPDATE mysql.user SET plugin = ‘mysql_native_password‘
WHERE plugin = ‘‘ AND (Password = ‘‘ OR LENGTH(Password) = 41);
FLUSH PRIVILEGES;

需要注意sql_mode的变更,如:

mysql> SET sql_mode = ‘‘;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE t (d DATE DEFAULT 0);
SET sql_mode = ‘NO_ZERO_DATE,STRICT_ALL_TABLES‘;
INSERT INTO t (d) VALUES(DEFAULT);Query OK, 0 rows affected (0.52 sec)

mysql> SET sql_mode = ‘NO_ZERO_DATE,STRICT_ALL_TABLES‘;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> INSERT INTO t (d) VALUES(DEFAULT);
ERROR 1292 (22007): Incorrect date value: ‘0000-00-00‘ for column ‘d‘ at row 1

SQL变更

MySQL5.7.5之前GET_LOCK()在执行第二次的额时候会释放前面获得的锁,在此版本以后支持同时获得多个锁,如:

mysql> select version();
+------------+
| version()  |
+------------+
| 5.6.33-log |
+------------+
1 row in set (0.00 sec)

mysql> SELECT GET_LOCK(‘lock1‘,10);
+----------------------+
| GET_LOCK(‘lock1‘,10) |
+----------------------+
|                    1 |
+----------------------+
1 row in set (0.00 sec)

mysql> SELECT GET_LOCK(‘lock2‘,10);
+----------------------+
| GET_LOCK(‘lock2‘,10) |
+----------------------+
|                    1 |
+----------------------+
1 row in set (0.00 sec)

mysql> SELECT RELEASE_LOCK(‘lock2‘);
+-----------------------+
| RELEASE_LOCK(‘lock2‘) |
+-----------------------+
|                     1 |
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT RELEASE_LOCK(‘lock1‘);
+-----------------------+
| RELEASE_LOCK(‘lock1‘) |
+-----------------------+
|                  NULL |
+-----------------------+
1 row in set (0.00 sec)

返回null说明此锁已经被释放了

参考文献:

http://dev.mysql.com/doc/refman/5.7/en/upgrading-from-previous-series.html

时间: 2024-11-07 00:42:47

MySQL版本升级之5.6到5.7的相关文章

MySQL版本升级

日常工作中,数据版本升级是常有的事,升级过程非常简单,但也容易忽视一些问题 1.大版本号和小版本号,使用在什么位(32/64)的系统上 2.或者5.1的默认使用区分大小写,若5.6使用不区分,这会导致APP找不到库的,所以需要注意 3.就是5.1到5.6升级没问题,但到5.7,有时候会提示: ERROR 1031 (HY000) at line 833: Table storage engine for 'histories' doesn't have this option 这是为什么呢?因为

实战:mysql版本升级

/***************************************************** mysql 5.6.19 升级到5.6.21 *****************************************************/ 升级前做好备份是必须的! ----1.查看现有版本mysql的数据目录位置 show variables like '%datadir%'; /usr/local/mysql01/data/ ---2.安装新版本MySQL 2.1.安

MySQL版本升级方式

MySQL升级的实质是对数据字典的升级,数据字典有:mysql.information_schema.performance_schema.sys schema. 一.MySQL升级的两种方式: 1.in-place upgrade(适合小版本的升级) 即:关闭当前的MySQL,替换当前的二进制文件或包,在现有的数据目录上重启MySQL,并运行mysql_upgrade. 特点:不改变数据文件,升级速度快:但,不可以跨操作系统,不可以跨大版本(5.5->5.7). 2.logical upgra

mysql查询优化器的提示(hit)

如果对优化器选择的执行计划不满意,可以使用优化器提供的几个提示来控制最终的执行计划,关于每个提示的具体用法,建议直接阅读官方手册,一些提示和版本有直接关系,可以使用的一些提示如下: high_priority和low_priority: 这个提示告诉mysql,当多个语句同时访问某一个表的时候,哪些语句的优先级相对高一些,哪些语句的优先级相对低一些. high_priority用于select语句的时候,mysql会将其放到表的队列的最前面,而不是按照常规顺序等待,high_priority还可

MySQL触发器分析

触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力. 数据库触发器有以下的作用: 1.安全性.可以基于数据库的值使用户具有操作数据库的某种权利. # 可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据. # 可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过10%. 2.审计.可以跟踪用户对数据库的操作. # 审计用户操作数据库的语句. # 把用户对数据库的更新写入审计表. 3.实

导入MySQL测试数据库employee报错

导入MySQL测试数据库employee 报错 下载地址:https://launchpad.net/test-db/ 上传解压: [[email protected] ~]# tar xf employees_db-full-1.0.6.tar.bz2 [[email protected] ~]# cd employees_db 使用mysql命令行工具,导入建库建表语句和数据 employee.sql中是建库建表语句,默认使用的是InnoDB引擎,可以自行修改 [[email protect

GoldenGate支持MySQL的最低版本5.1.5

GoldenGate的官方文档明确表示,GoldenGate需要将MySQL的日志格式(binlog_format)设置为ROW,其他两种格式(MIXED or STATEMENT)是不支持. ########################################################################官方描述如下: binlog_format: This parameter sets the format of the logs. It must be set

Mysql安装与配置总结

版权声明:本文为博主原创文章,未经博主允许不得转载. Mysql安装与配置总结: 对于Mysql数据库相关信息,这里不做介绍总结,有需要的同学可查阅相关的资料.另外,本篇总结文章主题在于Mysql的安装.配置及服务操作. ·     安装 ·     配置 ·     操作 ·     问题 一.安装 不同的系统的安装方法略有不同,这里是安装在Mac OSX下,所以可以使用homebrew来安装,对于Linux下安装方法,请参看: http://www.cnblogs.com/quanzhigu

我必须得告诉大家的MySQL优化原理2

如果有同学看完上一篇关于MySQL文章,文末留有两个很开放的问题,如有兴趣可以在脑袋里想想.本文也会试着回答这两个问题,希望能给你一些参考.现在可以思考一个问题,如果数据量非常大的情况下,您根据业务选择了合适的字段,精心设计了表和索引,还仔细的检查了所有的SQL,并确认已经没什么问题,但性能仍然不能满足您的要求,该怎么办呢?还有其他优化策略吗?答案是肯定的.接下来继续和您讨论一些常用的MySQL高级特性以及其背后的工作原理. 分区表 合理的使用索引可以极大提升MySQL的查询性能,但如果单表数据