1.4 MySQL中的新功能5.6
本节总结了MySQL 5.6中添加的内容,不推荐使用的内容和从中删除的内容。
在MySQL中添加的功能5.6
以下功能已添加到MySQL 5.6:
安全改进 进行了这些安全改进:
MySQL现在提供了一种方法,用于存储加密在命名的选项文件中的身份验证凭据
.mylogin.cnf
。要创建文件,请使用mysql_config_editor实用程序。该文件可以稍后由MySQL客户端程序读取,以获取连接到MySQL服务器的身份验证凭据。mysql_config_editor.mylogin.cnf
使用加密方式写入文件,因此凭证不会以明文形式存储,而客户程序解密时的内容只能在内存中使用。通过这种方式,密码可以以非明文格式存储在文件中,并可以在以后使用,而无需在命令行或环境变量中公开。有关更多信息,请参见第4.6.6节“mysql_config_editor- MySQL配置实用程序”。MySQL现在支持更强大的用户帐号密码加密,可以通过一个名为
sha256_password
实现SHA-256密码哈希的认证插件来实现。这个插件是内置的,所以它总是可用的,不需要明确加载。有关详细信息,包括创建使用SHA-256密码的帐户的说明,请参见第6.5.1.4节“SHA-256认证插件”。该表现
mysql.user
在有一password_expired
列。它的默认值是'N'
,但可以'Y'
使用新的ALTER USER
语句设置。帐户密码已过期后,使用该帐户在后续与服务器的连接中执行的所有操作会导致错误,直到用户发出SET PASSWORD
声明以建立新的帐户密码。有关详细信息,请参见第13.7.1.1节“ALTER USER语法”和第6.3.6节“密码到期和沙箱模式”。MySQL现在提供了检查密码安全性的规定:
在分配以明码值提供的密码的语句中,该值将根据当前密码策略进行检查,如果该密码较弱(该语句返回
ER_NOT_VALID_PASSWORD
错误),则会被拒绝。这会影响CREATE USER
,GRANT
和SET PASSWORD
语句。还将检查作为参数PASSWORD()
和函数给出的密码OLD_PASSWORD()
。潜在密码的强度可以使用新的
VALIDATE_PASSWORD_STRENGTH()
SQL函数进行评估,该SQL函数需要一个密码参数,并返回一个从0(弱)到100(强)的整数。
这两个功能都是由
validate_password
插件实现的。有关详细信息,请参见第6.5.3节“密码验证插件”。mysql_upgrade现在会发现一个警告,如果它发现使用旧的4.1之前的hashing方法散列的密码的用户帐户。应更新这些帐户以使用更安全的密码散列。请参见第6.1.2.4节“MySQL中的密码哈希”
在Unix平台上,mysql_install_db支持一个新的选项
--random-passwords
,它提供更安全的MySQL安装。调用mysql_install_db的使用--random-passwords
导致它分配一个随机密码到MySQLroot
账户,设置“密码过期”标志的账户,并删除匿名用户MySQL账户。有关其他详细信息,请参见第4.4.3节“mysql_install_db- 初始化MySQL数据目录”。已修改日志记录,以便在写入常规查询日志,慢查询日志和二进制日志的报表中以明文形式显示密码。请参见第6.1.2.3节“密码和记录”。
在MySQL的客户端将不再记录到引用密码历史文件的语句。请参见第4.5.1.3节“mysql Logging”。
START SLAVE
已修改语法以允许连接参数以连接到主机。这提供了将密码存储在master.info
文件中的替代方法。请参见第13.4.2.5节“起始SLAVE语法”。
MySQL企业。 审核日志插件生成的文件的格式已更改,以更好地与Oracle Audit Vault兼容。请参见第6.5.4节“MySQL企业审核”和第6.5.4.3节“审核日志文件”。
MySQL企业版现在包含一组基于OpenSSL库的加密功能,可以在SQL级别上公开OpenSSL功能。这些功能使企业应用程序能够执行以下操作:
使用公钥非对称加密实现附加数据保护
创建公钥和私钥和数字签名
执行非对称加密和解密
使用加密哈希进行数字签名和数据验证和验证
有关更多信息,请参见第12.17节“MySQL企业加密函数”。
MySQL Enterprise Edition中包含的审核日志插件现在可以根据用户帐户和事件状态过滤审核的事件。几个新的系统变量为DBA提供了过滤控制。此外,通过添加几个状态变量,提高了审核日志插件报告功能。有关详细信息,请参见第6.5.4.4节“审核日志记录控制”和第6.5.4.6.3节“审核日志插件状态变量”。
MySQL企业版现在包括MySQL企业防火墙,这是一个应用级防火墙,使数据库管理员能够基于与接受的语句模式的白名单匹配来允许或拒绝SQL语句执行。这有助于加强MySQL服务器的攻击,例如SQL注入或尝试通过在其合法查询工作负载特性之外使用它们来利用应用程序。有关详细信息,请参见第6.5.5节“MySQL企业防火墙”。
对服务器默认值的更改。 从MySQL 5.6.6开始,几个MySQL Server参数默认值与以前版本中的默认值不同。这些更改的动机是提供更好的开箱即用性能,并减少数据库管理员手动更改设置的需要。有关详细信息,请参见第5.1.2.1节“对服务器默认值的更改”。
InnoDB增强功能。 增加了这些
InnoDB
增强功能:您可以
FULLTEXT
在InnoDB
表上创建索引,并使用MATCH() ... AGAINST
语法查询它们。此功能包括一个新的邻近搜索运算符(@
)和几个新的配置选项和INFORMATION_SCHEMA
表:有关更多信息,请参见第14.8.10节“InnoDB FULLTEXT索引”。几个
ALTER TABLE
可以不复制表中可以执行的操作,而不会阻塞插入,更新和删除表中,或两者。这些增强功能统称为在线DDL。有关详细信息,请参见第14.13节“InnoDB和在线DDL”。InnoDB
现在支持该语句的子句,它允许您在MySQL数据目录之外的位置创建每个表的表空间(文件)。此增强功能可以灵活地在更适合您的服务器环境的位置创建文件每表表空间。例如,您可以在SSD设备上放置繁忙的表,或者在大容量HDD设备上放置大表。DATA DIRECTORY='directory
'CREATE TABLE
InnoDB.ibd
有关其他信息,请参见第14.7.5节“在数据目录之外创建每个表中的表空间”。
InnoDB
现在支持“可运输表空间”的概念,允许从正在运行的MySQL实例导出文件每表表空间(.ibd
文件),并导入到另一个运行的实例,而不会由缓冲数据,正在进行的事务和内部引起的不一致或不匹配记账细节,如空间ID和LSN。命令的
FOR EXPORT
子句FLUSH TABLE
将任何未保存的更改从InnoDB
内存缓冲区写入.ibd
文件。复制后.ibd
的文件和一个单独的元数据文件到其他服务器中,DISCARD TABLESPACE
并且IMPORT TABLESPACE
该子句ALTER TABLE
声明被用来使表数据到一个不同的MySQL实例。该增强功能可以灵活地移动每个文件的表空间,以更好地适应您的服务器环境。例如,您可以将繁忙的表移动到SSD设备,或将大型表移动到大容量HDD设备。有关详细信息,请参见第14.7.6节“将每个表中的表空间复制到另一个实例”。
现在,您可以将未压缩表的
InnoDB
页面大小设置为8KB或4KB,作为默认16KB的替代。此设置由innodb_page_size
配置选项控制。在创建MySQL实例时指定大小。一个实例中的所有InnoDB
表空间共享相同的页面大小。较小的页面大小可以帮助避免冗余或低效的工作负载和存储设备的组合,特别是具有小块大小的SSD设备。改进自适应冲洗算法使I / O操作在各种工作负载下更加高效和一致。新算法和默认配置值有望提高大多数用户的性能和并发性。高级用户可以通过多种配置选项来调整其I / O响应能力。有关详细信息,请参见第14.6.3.6节“微调InnoDB缓冲池冲洗”。
您可以
InnoDB
通过NoSQL风格的API编写访问表的MySQL应用程序。该功能采用了流行的memcached守护进程来中继请求,如ADD
,SET
和GET
对键值对。这些用于存储和检索数据的简单操作避免了SQL开销,如解析和构造查询执行计划。您可以通过NoSQL API和SQL访问相同的数据。例如,您可以使用NoSQL API进行快速更新和查找,以及SQL用于复杂查询和与现有应用程序的兼容性。为优化统计数据
InnoDB
表以更可预测的时间间隔被收集,并且可以跨服务器重启坚持,以提高计划的稳定性。您还可以控制对InnoDB
索引进行的抽样量,使优化程序统计信息更准确,并改进查询执行计划。有关详细信息,请参见第14.6.12.1节“配置持久优化器统计参数”。新的优化适用于只读事务,从而提高特定查询和报告生成应用程序的性能和并发性。这些优化将在实际应用时自动应用,或者您可以指定
START TRANSACTION READ ONLY
以确保事务为只读。有关详细信息,请参见第8.5.3节“优化InnoDB只读事务”。您可以将
InnoDB
撤销日志从系统表空间移动到一个或多个单独的表空间中。撤销日志的I / O模式使这些新的表空间成为移动到SSD存储的好候选者,同时将系统表空间保留在硬盘存储上。有关详细信息,请参见第14.7.7节“将InnoDB还原日志存储在单独的表空间”。您可以
InnoDB
通过指定配置选项来提高校验和功能的效率innodb_checksum_algorithm=crc32
,从而启用更快的校验和算法。此选项替换该innodb_checksums
选项。使用旧校验和算法编写的数据(选项值innodb
)完全向上兼容;使用新的校验和算法(选项值crc32
)修改的表空间不能降级到不支持该innodb_checksum_algorithm
选项的早期版本的MySQL。在
InnoDB
重做日志文件现在有512GB的最大组合大小,从4GB提高。您可以通过该innodb_log_file_size
选项指定较大的值。启动行为现在会自动处理在现有的重做日志文件的大小不按指定的大小相匹配的情况innodb_log_file_size
和innodb_log_files_in_group
。该
--innodb-read-only
选项允许您以只读模式运行MySQL服务器。您可以InnoDB
在只读介质(如DVD或CD)上访问表,或者设置具有共享相同数据目录的多个实例的数据仓库。有关使用细节,请参见第14.6.2节“将InnoDB配置为只读操作”。一个新的配置选项
innodb_compression_level
允许您从压缩表的压缩级别中选择InnoDB
0-9的熟悉范围zlib
。当更新操作使页面再次被压缩时,您还可以控制缓冲池中的压缩页面是否存储在重做日志中。此行为由innodb_log_compressed_pages
配置选项控制。InnoDB
压缩表中的数据块包含一定量的空白(填充),以允许DML操作修改行数据,而无需重新压缩新值。当数据确实需要在大量更改后需要重新压缩时,太多的填充可能会增加压缩失败的机会,需要进行页面拆分。现在可以动态调整填充量,以便DBA可以在不用新参数重新创建整个表的情况下或者重新创建具有不同页面大小的整个实例的情况下降低压缩失败率。innodb_compression_failure_threshold_pct
innodb_compression_pad_pct_max
一些新的
InnoDB
-相关INFORMATION_SCHEMA
表格提供了有关信息InnoDB
缓冲池,对表,索引和外键元InnoDB
数据字典和低级别的信息有关补充从性能架构表中的信息的性能指标。为了缓解具有大量表的系统的内存负载,
InnoDB
现在使用LRU算法释放与打开的表相关联的内存,以选择最长不被访问的表。要保留更多内存以保存打开InnoDB
表的元数据,请增加table_definition_cache
配置选项的值。InnoDB
将该值视为数据字典缓存中的打开表实例数量的“软限制”InnoDB
。有关其他信息,请参阅table_definition_cache
文档。InnoDB
有几个内部性能增强,包括通过拆分内核互斥体来减少争用,将主线程的刷新操作移到单独的线程,启用多个清除线程,并减少大内存系统上缓冲池的争用。InnoDB
使用新的更快的算法来检测死锁。有关所有InnoDB
死锁的信息可以写入MySQL服务器错误日志,以帮助诊断应用程序问题。为了避免冗长的热身重新启动服务器,特别是对于大型实例后一段
InnoDB
缓冲池,您可以在重新启动后立即重新加载页面进入缓冲池。MySQL可以在关机时转储一个紧凑的数据文件,然后查询该数据文件,找到下一次重新启动时要重新加载的页面。您还可以随时手动转储或重新加载缓冲池,例如在基准测试期间或在复杂的报告生成查询之后。有关详细信息,请参见第14.6.3.7节“保存和恢复缓冲池状态”。从MySQL 5.6.16起,innochecksum为大于2GB的文件提供支持。以前,innochecksum仅支持大小为2GB的文件。
从MySQL 5.6.16开始,新的全局配置参数,
innodb_status_output
并innodb_status_output_locks
允许您动态地启用和禁用标准的InnoDB
监视和InnoDB
锁定监视器进行周期性输出。通过创建和删除特殊命名的表来启用和禁用监视器进行定期输出已被弃用,可能会在将来的版本中被删除。有关其他信息,请参见第14.17节“InnoDB监视器”。从MySQL 5.6.17起,在线DDL支持扩展到常规和分区
InnoDB
表的以下操作:ALTER TABLE ... ENGINE=INNODB
(当在InnoDB
桌子上运行时)在线DDL支持减少了表重建时间并允许并发DML。请参见第14.13.1节“在线DDL概述”。
分区。 添加了这些表分区增强功能:
分区的最大数量增加到8192.此数字包括表的所有分区和所有子分区。
现在可以使用非分区表交换子分区表的子分区或子分区表的子分区,否则表中使用该语句具有相同的
ALTER TABLE ... EXCHANGE PARTITION
结构。这可以用于例如导入和导出分区。有关更多信息和示例,请参见第19.3.3节“使用表交换分区和子分区”。现在,对查询以及作用于分区表的许多数据修改语句支持显式选择一个或多个分区或子分区。例如,假定一个表
t
与一些整数列c
有4个分区命名p0
,p1
,p2
,和p3
。那么查询SELECT * FROM t PARTITION (p0, p1) WHERE c < 5
从分区仅返回那些行p0
和p1
用于其c
小于5。以下语句支持显式分区选择:
有关语法,请参阅各个语句的说明。有关其他信息和示例,请参见第19.5节“分区选择”。
分区锁定修剪通过帮助消除不受这些语句影响的分区上的锁,大大提高了许多执行多个分区的表的DML和DDL语句的性能。这些陈述包括许多
SELECT
,SELECT ... PARTITION
,UPDATE
,REPLACE
,INSERT
,以及许多其他的语句。有关更多信息,包括其性能得到改善的语句的完整列表,请参见第19.6.4节“分区和锁定”。
性能模式 性能模式包括几个新功能:
仪表输入和输出。仪器化操作包括对持久基表或临时表的行级访问。影响行的操作是获取,插入,更新和删除。
按表的事件过滤,基于模式和/或表名。
线程事件过滤收集有关线程的更多信息。
表和索引I / O以及表锁的汇总表。
语句中的语句和阶段的仪器。
在服务器启动时配置仪器和消费者,以前只能在运行时才可能。
MySQL NDB群集。 MySQL NDB Cluster作为单独的产品发布;最新的GA版本基于MySQL 5.6,并使用版本7.3的
NDB
存储引擎。主流MySQL Server 5.6版本中不提供群集支持。有关MySQL NDB Cluster 7.3的更多信息,请参见第18章,MySQL NDB Cluster 7.3和NDB Cluster 7.4。最新的开发版本是MySQL NDB Cluster 7.4,基于版本7.4的NDB
存储引擎和MySQL Server 5.6。MySQL NDB Cluster 7.4目前可用于测试和评估。最新的MySQL NDB集群7。有关MySQL NDB Cluster 7.4中的更多信息和改进概述,请参见第18.1.4.2节“NDB Cluster 7.4中的新增功能”。
MySQL NDB Cluster 7.2,以前的GA版本,基于MySQL Server 5.5,仍然可以在生产中使用,尽管我们建议新的部署使用MySQL NDB Cluster 7.3。有关MySQL NDB Cluster 7.2的更多信息,请参阅MySQL NDB Cluster 7.2。
MySQL NDB Cluster 7.1仍然可用和支持(尽管我们建议新的部署使用最新的GA版本系列,目前是MySQL NDB Cluster 7.3)。NDB群集的这些版本基于MySQL Server 5.1,并记录在MySQL 5.1手册中;有关详细信息,请参阅https://dev.mysql.com/doc/refman/5.1/en/mysql-cluster.html。
复制和记录。 添加了这些复制增强功能:
MySQL现在使用全局事务标识符(也称为“GTIDs”)支持基于事务的复制。这使得可以在每个事务在始发服务器上提交时识别和跟踪每个事务,并且由任何从属方应用。
主要使用新的
--gtid-mode
和--enforce-gtid-consistency
服务器选项来实现复制设置中GTID的启用。有关支持GTID的其他选项和变量的信息,请参见第17.1.4.5节“全局事务ID选项和变量”。当使用GTID时,在启动新的从站或故障切换到新主站时,不需要引用这些文件中的日志文件或位置,这大大简化了这些任务。有关使用或不参考二进制日志文件进行GTID复制配置服务器的更多信息,请参见第17.1.3.3节“将GTID用于故障转移和标量化”。
基于GTID的复制是完全基于事务的,这使得检查主机和从站的一致性变得简单。如果在给定的主服务器上提交的所有事务也都在给定的从服务器上提交,则两个服务器之间的一致性将得到保证。
有关在MySQL复制中实现和使用GTID的更完整的信息,请参见第17.1.3节“与全局事务标识符复制”。
基于MySQL行的复制现在支持行图像控制。通过记录每个行的每行(而不是所有列)唯一标识和执行更改所需的列,可以节省磁盘空间,网络资源和内存使用量。您可以通过将
binlog_row_image
服务器系统变量设置为其中一个值minimal
(仅限日志所需列),full
(记录所有列)或noblob
(记录除了不需要的列BLOB
或TEXT
列之外的所有列)来确定是否记录完整行或最小行。由MySQL服务器编写和读取的二进制日志现在是崩溃安全的,因为只记录或回读完整的事件(或事务)。默认情况下,服务器记录事件的长度以及事件本身,并使用此信息来验证事件是否正确写入。您还可以通过设置
binlog_checksum
系统变量,使服务器为使用CRC32校验和的事件编写校验和。要使服务器从二进制日志读取校验和,请使用master_verify_checksum
系统变量。--slave-sql-verify-checksum
MySQL现在支持将主连接信息和从属中继日志信息记录到表和文件。可以通过
--master-info-repository
和--relay-log-info-repository
服务器选项独立地控制这些表的使用。设置--master-info-repository
到TABLE
原因的连接信息在记录slave_master_info
表;设置--relay-log-info-repository
以TABLE
使继电器日志信息记录到slave_relay_log_info
表中。这两个表都是在mysql
系统数据库中自动创建的。为了使复制能够弹性到意外的停止,表
slave_master_info
和slave_relay_log_info
表必须每个都使用事务存储引擎,并从MySQL 5.6.6开始,这些表是InnoDB
为此而创建的。(错误#13538891)如果您使用之前的这两个表使用的MySQL 5.6版本MyISAM
,这意味着,在开始复制之前,您必须将它们两者转换为事务性存储引擎(如InnoDB
),如果您希望复制能够弹性到意想不到的停止。ALTER TABLE ... ENGINE=...
您可以通过适当的声明在这种情况下做到这一点。复制实际运行时,不应尝试更改这些表中使用的存储引擎。有关详细信息,请参见第17.3.2节“处理复制从站的意外停止”。
mysqlbinlog现在有能力以原始的二进制格式备份二进制日志。当使用
--read-from-remote-server
和--raw
选项调用时,mysqlbinlog连接到服务器,请求日志文件,并以与原件相同的格式写入输出文件。请参见第4.6.8.3节“使用mysqlbinlog备份二进制日志文件”。MySQL现在支持延迟复制,使得从属服务器故意滞留在主服务器上至少一段指定的时间。默认延迟为0秒。使用新
MASTER_DELAY
选项CHANGE MASTER TO
设置延迟。延迟复制可以用于保护主机上的用户错误(DBA可以将延迟的从站回滚到灾难发生之前的时间)或测试系统在滞后时的行为。请参见第17.3.10节“延迟复制”。
现在可以使具有多个网络接口的复制从属单元
MASTER_BIND
在发布CHANGE MASTER TO
语句时使用该选项来仅使用其中一个(排斥其他)。该
log_bin_basename
系统变量已被添加。该变量包含二进制日志文件的完整文件名和路径。而log_bin
系统变量仅显示是否启用二进制日志记录,log_bin_basename
反映使用--log-bin
服务器选项设置的名称。类似地,
relay_log_basename
系统变量显示中继日志文件的文件名和完整路径。MySQL复制现在支持并行执行从站上的多线程事务。当启用并行执行时,从SQL线程用作由
slave_parallel_workers
服务器系统变量的值确定的多个从属工作线程的协调器。在从机上执行多线程的当前实现假定数据和更新在每个数据库的基础上进行分区,并且给定数据库中的更新以与在主机上相同的相对顺序进行。但是,不需要协调不同数据库之间的交易。由于在不同数据库上的事务可能以与主机不同的顺序发生,所以只需检查最近执行的事务就不能保证主机上的所有以前的事务都在从机上执行。这对使用多线程从站时的日志记录和恢复有影响。有关在从站上使用多线程时如何解释二进制日志信息的信息,请参见第13.7.5.35节“显示从属状态语法”。
优化器增强。 这些查询优化器的改进已经实现:
优化器现在更有效地处理以下形式的查询(和子查询):
SELECT ... FROM single_table ... ORDER BY non_index_column [DESC] LIMIT [ M ,] N ;
这种类型的查询在仅显示较大结果集中的几行的Web应用程序中很常见。例如:
SELECT col1,... FROM t1 ... ORDER BY name LIMIT 10; SELECT col1,... FROM t1 ... ORDER BY RAND()LIMIT 15;
排序缓冲区的大小为
sort_buffer_size
。如果N
行的排序元素足够小以适应排序缓冲区(如果指定了M
+N
行M
),则服务器可以避免使用合并文件并完全在内存中执行排序。有关详细信息,请参见第8.2.1.16节“限制查询优化”。优化器实现磁盘扫描多范围读取。在次级索引上使用范围扫描读取行可能会导致在表格较大并且未存储在存储引擎的高速缓存中时对基表进行多次随机磁盘访问。通过磁盘扫描多范围读取(MRR)优化,MySQL尝试通过首先扫描索引并收集相关行的密钥来减少范围扫描的随机磁盘访问次数。然后对密钥进行排序,最后使用主键的顺序从基表检索行。磁盘扫描MRR的动机是减少随机磁盘访问的次数,从而对基表数据进行更顺序的扫描。有关更多信息,请参见第8.2.1.10节“多范围读取优化”。
优化器实现索引条件下推(ICP),这是MySQL使用索引从表中检索行的情况的优化。没有ICP,存储引擎遍历索引以定位基表中的行,并将它们返回给
WHERE
评估行的条件的MySQL服务器。启用ICP,如果WHERE
可以通过仅使用索引中的字段来评估条件的WHERE
某些部分,则MySQL服务器将这部分条件推送到存储引擎。然后,存储引擎通过使用索引条目来评估推送的索引条件,并且只有当这样被满足时才能读取基本行。ICP可以减少存储引擎对基表的访问次数以及MySQL服务器对存储引擎的访问次数。有关更多信息,请参见第8.2.1.5节“索引条件下推优化”。该
EXPLAIN
语句现在提供了执行计划的信息DELETE
,INSERT
,REPLACE
,和UPDATE
语句。以前,EXPLAIN
仅为SELECT
报表提供信息。此外,该EXPLAIN
语句现在可以生成JSON格式的输出。请参见第13.8.2节“解释语法”。优化器可以更有效地处理子句中的
FROM
子查询(即派生表)。子查询中的FROM
子查询的实现被推迟到查询执行期间需要其内容,从而提高性能。另外,在查询执行期间,优化器可以向派生表添加一个索引,以加速行的检索。有关更多信息,请参见第8.2.2.3节“优化派生表”。优化器使用半连接和物化策略来优化子查询执行。请参见第8.2.2.1节“使用半连接变换优化子查询”和第8.2.2.2节“使用实现优化子查询”。
现在可以使用批量密钥访问(BKA)连接算法,它使用对连接的表和连接缓冲区的索引访问。BKA算法支持内连接,外连接和半连接操作,包括嵌套外连接和嵌套半连接。BKA的优点包括通过更有效的表扫描来提高连接性能。有关更多信息,请参见第8.2.1.11节“嵌套循环和批次密钥访问连接”。
优化器现在具有跟踪功能,主要供开发人员使用。该接口由一组系统变量和表提供。有关详细信息,请参阅MySQL内部:跟踪优化程序。
optimizer_trace_xxx
INFORMATION_SCHEMA.OPTIMIZER_TRACE
条件处理。 MySQL现在支持该
GET DIAGNOSTICS
语句。GET DIAGNOSTICS
为应用程序提供了从诊断区域获取信息的标准方法,例如先前的SQL语句是否产生异常以及是什么。有关更多信息,请参见第13.6.7.3节“GET DIAGNOSTICS语法”。此外,条件处理程序处理规则中的几个缺陷已得到纠正,以使MySQL行为更像标准SQL:
块范围用于确定要选择的处理程序。以前,存储的程序被视为具有用于处理程序选择的单个范围。
条件优先级更准确地解决。
诊断区域清除已更改。错误#55843导致处理条件在激活处理程序之前从诊断区域清除。这使处理程序中的条件信息不可用。现在条件信息可用于处理程序,它可以使用
GET DIAGNOSTICS
语句进行检查。当处理程序退出时,条件信息被清除,如果在处理程序执行期间尚未清除。以前,处理程序在病情发生后立即被激活。现在,直到出现条件的语句完成执行为止,它们才被激活,此时选择最合适的处理程序。如果在语句执行期间稍后提出的条件比较早的条件具有更高的优先级,并且在两个条件的同一范围内都有处理程序,则这可能会对引发多个条件的语句产生影响。以前,引用的第一个条件的处理程序将被选择,即使它的优先级低于其他处理程序。
有关更多信息,请参见第13.6.7.6节“处理程序范围规则”。
数据类型 这些数据类型更改已经实现:
MySQL的现在允许分数秒
TIME
,DATETIME
和TIMESTAMP
值,高达微秒(6位)的精度。见11.3.6节“时间分数秒”。以前,
TIMESTAMP
每个表最多有一列可以自动初始化或更新为当前日期和时间。这个限制已经解除了。任何TIMESTAMP
列定义都可以有任何组合DEFAULT CURRENT_TIMESTAMP
和ON UPDATE CURRENT_TIMESTAMP
子句。此外,这些子句现在可以与DATETIME
列定义一起使用。有关更多信息,请参见第11.3.5节“TIMESTAMP和DATETIME的自动初始化和更新”。在MySQL中,
TIMESTAMP
数据类型在默认值和自动初始化和更新属性分配方面以非标准方式与其他数据类型不同。这些行为保持默认状态,但现在已被弃用,并且可以通过explicit_defaults_for_timestamp
在服务器启动时启用系统变量来关闭这些行为。请参见第11.3.5节“TIMESTAMP和DATETIME的自动初始化和更新”和第5.1.5节“服务器系统变量”。
主机缓存。 MySQL现在提供有关客户端连接到服务器时出现的错误原因的更多信息,以及对包含客户端IP地址和主机名信息的主机缓存的改进访问,并用于避免DNS查找。这些变化已经实施:
新的状态变量提供有关不适用于特定客户端IP地址的连接错误的信息。
Connection_errors_xxx
已将计数器添加到主机缓存中以跟踪适用于特定IP地址的错误,并且新的“
host_cache
性能模式”表公开主缓存的内容,以便可以使用SELECT
语句检查。访问主机缓存内容使得可以回答诸如主机被缓存多少,哪些主机发生什么类型的连接错误,或主机错误计数达到max_connect_errors
系统变量限制的问题。主机缓存大小现在可以使用
host_cache_size
系统变量进行配置。
有关更多信息,请参见第8.12.5.2节“DNS查找优化和主机缓存”,以及第22.11.10.1节“host_cache表”。
OpenGIS。 OpenGIS规范定义了测试两个几何值之间的关系的函数。MySQL最初实现了这些功能,使得它们使用对象边界矩形并返回与相应的基于MBR的函数相同的结果。现在可以使用相应的版本,使用精确的对象形状。这些版本以
ST_
前缀命名。例如,Contains()
使用对象边界矩形,而ST_Contains()
使用对象形状。有关更多信息,请参见第12.15.9节“测试几何对象之间的空间关系的功能”。
MySQL 5.6中已弃用的功能
以下功能在MySQL 5.6中已被弃用,可能会在将来的系列中被删除。在显示替代品的情况下,应更新应用程序以使用它们。
不建议使用
ERROR_FOR_DIVISION_BY_ZERO
,NO_ZERO_DATE
和NO_ZERO_IN_DATE
SQL模式,并将值设置sql_mode
为包含其中任何一个会生成警告。在MySQL 5.7中,这些模式什么也不做。相反,它们的效果包含在严格SQL模式(STRICT_ALL_TABLES
或STRICT_TRANS_TABLES
)的效果中。MySQL 5.7中更改的动机是减少SQL模式的数量,效果取决于严格模式,并将其作为严格模式本身的一部分。要提前准备升级到MySQL 5.7,请参阅MySQL 5.7中的SQL模式更改。该讨论提供了评估您的应用程序是否将受到MySQL 5.7中SQL模式更改的影响的准则。
依赖于
GROUP BY
MySQL 5.6中的隐式排序已被弃用。要实现分组结果的特定排序顺序,最好使用一个显式ORDER BY
子句。GROUP BY
排序是一个MySQL扩展,可能会在将来的版本中更改;例如,使优化器可以按照它认为最有效的方式对分组进行排序,并避免排序开销。4.1之前的密码和
mysql_old_password
认证插件。使用MySQL 4.1之前使用的较旧散列格式的密码比使用本机密码散列方法的密码安全性较低,应避免使用。4.1之前的密码和mysql_old_password
身份验证插件现在已被弃用。要防止使用具有4.1之前密码散列的帐户进行连接,secure_auth
系统变量现在默认启用。(要允许具有此类密码散列的帐户的连接,请启动服务器--secure_auth=0
。但是,由于不支持4.1之前的密码,禁用secure_auth
也将被废弃。)建议DBA转换使用
mysql_old_password
身份验证插件的帐户mysql_native_password
。有关帐户升级说明,请参见第6.5.1.3节“迁移之前4.1密码散列和mysql_old_password插件”。该
OLD_PASSWORD()
函数生成4.1之前的密码散列,PASSWORD()
如果old_passwords
系统变量设置为1OLD_PASSWORD()
,并且old_passwords=1
不推荐使用。该
--skip-innodb
选项及其同义词(--innodb=OFF
,--disable-innodb
等等)。的
date_format
,datetime_format
和time_format
系统变量,它们是未使用的。该
timed_mutexes
系统变量。它什么都不做,没有效果。该
--language
选项。使用--lc-messages-dir
和--lc-messages
选项代替。的
IGNORE
条款ALTER TABLE
。ALTER IGNORE TABLE
导致复制问题,防止联机ALTER TABLE
创建唯一索引,并导致外键(父表中删除的行)的问题。该的msql2mysql,mysql_convert_table_format,mysql_find_rows,mysql_fix_extensions,mysql_setpermission,mysql_waitpid,mysql_zap,mysqlaccess和mysqlbug工具。
该mysqlhotcopy的效用。替代方案包括mysqldump和MySQL企业备份。
MySQL中删除的功能5.6
以下项目已过时,已在MySQL 5.6中删除。在显示替代品的情况下,应更新应用程序以使用它们。
该
--log
服务器选项和log
系统变量。而是使用该--general_log
选项启用常规查询日志和该选项来设置常规查询日志文件名。--general_log_file=file_name
该
--log-slow-queries
服务器选项和log_slow_queries
系统变量。而是使用该--slow_query_log
选项来启用慢查询日志和选项来设置慢查询日志文件名。--slow_query_log_file=file_name
该
--one-thread
服务器选项。使用--thread_handling=no-threads
来代替。该
--safe-mode
服务器选项。该
--skip-thread-priority
服务器选项。该
--table-cache
服务器选项。改用table_open_cache
系统变量。该
--init-rpl-role
和--rpl-recovery-rank
选择,rpl_recovery_rank
系统变量和Rpl_status
状态变量。该
engine_condition_pushdown
系统变量。改用变量的engine_condition_pushdown
标志optimizer_switch
。在
have_csv
,have_innodb
,have_ndbcluster
,和have_partitioning
系统变量。使用SHOW PLUGINS
或查询数据库中的PLUGINS
表INFORMATION_SCHEMA
。该
sql_big_tables
系统变量。使用big_tables
来代替。该
sql_low_priority_updates
系统变量。使用low_priority_updates
来代替。该
sql_max_join_size
系统变量。使用max_join_size
来代替。该
max_long_data_size
系统变量。使用max_allowed_packet
来代替。该
FLUSH MASTER
和FLUSH SLAVE
语句。改用RESET MASTER
andRESET SLAVE
语句。该
SLAVE START
和SLAVE STOP
语句。使用START SLAVE
和STOP SLAVE
语句。该
SHOW AUTHORS
和SHOW CONTRIBUTORS
语句。在
OPTION
与ONE_SHOT
修饰符SET
声明。显然不允许将值分配
DEFAULT
给存储过程或函数参数或存储的程序局部变量(例如使用语句)。如前所述,仍然允许分配给系统变量。SETvar_name
= DEFAULTDEFAULT
大多数
SHOW ENGINE INNODB MUTEX
输出在5.6.14中被删除。SHOW ENGINE INNODB MUTEX
输出完全在MySQL 5.7.2中删除。可以通过在性能模式表上创建视图来生成可比较的信息。