MySQL5.6中新增特性、不推荐使用的功能以及废弃的功能

虽然已经使用MySQL5.6版本有一段时间了,但因为没有和以前的版本做过详细比较,因此对于哪些重要的或者不过重要的特性是在新版本中引入的,还有哪些特性已经或者将要从旧版本中移除的并无一个十分全面的了解。最近有一个将某数据库实例由5.5升级为5.6的需求,因此对于MySQL5.6和5.5版本之间的差别作了一个简单梳理。
 
新增
     Security improvements.
          可以使用mysql_config_editor将登录认证信息以加密方式保存在.mylogin.cnf文件中,客户端可从该文件读取以免以明文方式使用登陆信息。
          经过内置sha256_password认证插件支持更强的帐户密码加密。
          mysql.user表新增password_expired用以标识密码是否过时。可经过alter user语句设置密码过时。
          经过 validate_password 插件实现密码安全度检查。
          对于使用MySQL4.1以前版本的Hash方法加密的帐户密码mysql_upgrade 会给出警告。
          在Unix平台上mysql_install_db支持--random-passwords,可为初始root用户生成强度更高的密码并设置密码过时、移除匿名用户。
          各种日志(慢查询、二进制日志、通用日志)包括mysql客户端命令历史记录中再也不会出现明文密码内容。
          START SLVAE语法改进可在该语句中指定链接MASTER的参数,可避免将密码之类的信息保存在master.info文件
 
     Changes to server defaults.
          提供更好的性能并减小管理员对设置的手工修改

     InnoDB enhancements.
          开始支持全文索引。
          Online DDL(即一些ALTER TABLE操做无需拷贝表、不阻塞增删改)。
          CREATE TABLE语句支持DATA DIRECTORY='directory' 可将file-per-table 下每一个表对应的.ibd文件存放在数据目录之外的其余目录,提高了灵活性继而可提高性能,好比将.ibd放在单独的SSD盘。
          支持transportable tablespaces、容许单表空间(每一个表的.ibd文件)动态导入导出。 FLUSH TABLE的FOR EXPORT从句可将buffer中未保存的变化刷到.ibd文件。以后可将.ibd文件拷贝和元数据文件拷贝至其余服务器实例(如SSD、HDD)。ALTER TABLE的DISCARD TABLESPACE和IMPORT TABLESPACE从句可将数据载入不一样的MySQL实例。
          可经过innodb_page_size设置InnoDB页大小(默认16KB可设置为8KB、4KB)以适应特定的负载和硬件来下降冗余、提高系能。
          Buffer Pool刷新算法得以改进以加强性能和并发性,可经过一系列参数进行调整。
          与memcached整合可以使用NoSQL-style API来访问数据避免解析和构建查询计划的开销(适用于简单查询、更新等)。
          优化用的统计信息更加精确且可在服务重启后保持并可控制采样率。
          优化只读事务对于ad-hoc queries和report-generating 应用提高了性能和并发。
          可将InnoDB undo log 从系统表空间移至一个或多个独立表空间(如移动到SSD盘)。
          可经过 innodb_checksum_algorithm=crc32指定使用更快的checksum算法。
          redo log文件总大小可达到512G(以前为4G),经过innodb_log_file_size指定单个文件大小,innodb_log_files_in_group指定文件数量、innodb_log_group_home_dir指定存放路径。
          可将MySQL中InnoDB表配置为只读模式(经过--innodb-read-only),这样可在只读媒介如DVD、CD上访问InnoDB表或者搭建多实例共享数据目录的数据仓库。
          可经过innodb_compression_level指定InnoDB compressed表的压缩级别并经过innodb_log_compressed_pages指定是否将buffer pool中compressed pages因为更新操做引发的re-compressed pages存储在redo log中。
          可经过innodb_compression_failure_threshold_pct, innodb_compression_pad_pct_max动态调整InnoDB压缩表中的填充块(用以免DML时的从新压缩,但数量过多时会增长压缩失败的概率)的比例,以下降压缩失败率而无需经过新的参数重建表或者以不一样的页大小重建整个实例。
          INFORMATION_SCHEMA中新增InnoDB相关系统表,可查询InnoDB buffer pool、表元数据、索引、外键、底层性能相关的数据等。
          新的InnoDB可使用LRU算法释放打开的表所占用的内存以缓解有大量表的服务器上的内存负载。(可经过 table_definition_cache 调整打开的InnoDB表可以使用的内存量)
          内部性能优化,如经过拆分kernel mutex减小争用、将flush操做由主线程移至独立线程、使用多个刷新线程、较少大内存系统上的buffer pool的争用。
          更快的死锁检测算法,InnoDB相关的死锁信息会所有写入错误日志。
          可在服务器重启后当即重载页至InnoDB buffer pool以免重启后过长的“热身”时间,尤为是InnoDB buffer pool较大的实例。可在服务器关闭时dump出buffer pool中的数据下次重启后载入、也能够在运行过程当中导入导出。
          5.6.16后innochecksum可支持2G以上的文件
          可经过innodb_status_output和innodb_status_output_locks,分别动态开闭InnoDB Monitor和InnoDB Lock Monitor(分别会在error log中打印出InnoDB相关信息,后一个参数的开启要之前一个参数的开启为前提,之后后一个参数的结果是前一个结果的子集)。
          5.6.17后可使用online DDL(ALGORITHM=INPLACE)经过以下操做OPTIMIZE TABLE、ALTER TABLE ... FORCE、ALTER TABLE ... ENGINE=INNODB 来重建表,以减小重建时间并容许并发的DML。
 
     Partitioning.
          分区最大量可达8192(包含子分区的量)
          可以使用ALTER TABLE ... EXCHANGE PARTITION与非分区表交换分区表的一个分区或子分区(前提是这两个表除了分区以外表结构一致、且非分区的表不为临时表且无外键引用或被引用的外键非分区表中不包含要交换的分区边界之外的值)
          能够限定在一个或者多个分区或子分区内查询。支持的语句包括SELECT、DELETE、INSERT、REPLACE、UPDATE、LOAD DATA、LOAD XML。
          Partition lock pruning经过消除分区上的锁,极大提高了多分区表上DML、DDL操做的性能。


     Performance Schema.
               更加丰富的信息。表输入输出,表事件过滤,线程事件过滤,表、索引I/O及表锁摘要信息,语句及语句的阶段信息等。相关的两个参数为 --gtid-mode和--enforce-gtid-consistency。若使用GTIDs在开始一个新的slave或者指向一个新的master时就没必要指定日志文件和文件中的位置,过程可大大简化。另外,因基于GTID的复制时彻底基于事务的,于是很容易检查主从一致性,只要master上提交的事务在slave上也提交过就能够保证一致。

 
     Replication and logging.
          开始支持使用GTIDs( global transaction identifiers)的基于事务的复制,使识别和追踪在master上提交并在slave上应用的每一个事务成为可能。
         
          可经过binlog_row_image控制 row-based复制中的row image所包含的列,使其能够包含全部列或者不包含BLOB和TEXT列或者仅包含必要的用于惟一标识并执行每一行上的变化的个别列,以便于节省磁盘开销、网络开销和内存使用。
         
          MySQL Server 对二进制日志的读写是 crash-safe的,因只记录和读取完整的事务/事件。默认,会记录事件自己和事件的长度,而后利用这些信息验证事件是否被正确书写。也能够经过binlog_checksum 变量使server使用CRC32算法为事件写校验和,并经过 master_verify_checksum使server从日志文件中读取校验和, --slave-sql-verify-checksum 可使slave的SQL thread从中继日志中读取校验和。

          支持选择将master的链接信息以及slave的中继日志信息保存在文件或者表中,相关参数为--master-info-repository和--relay-log-info-repository。但为了保证复制的crash-safe,当选择将master的链接信息以及slave的中继日志信息保存在表中时相关的表必须是事务性引擎如InnoDB(5.6.6以后的版本会自动建立为InnoDB表但以前的版本会建立MyISAM表,所以在复制开始以前必定要修改成InnoDB引擎)

          mysqlbinlog工具能够从指定的主机以原始的二进制格式备份二进制日志文件。工具相关的命令行参数为 --read-from-remote-server和--raw

          支持延迟复制,也即,将slave延后于master一段特定的时间。改特性能够用于测试延迟带来的影响或者挽救 DBA在master上不当心犯的错误(经过CHANGE MASTER TO中的MASTER_DELAY指定)。

          对于有多块网络接口的salve机器可指定只使用其中某一个(经过CHANGE MASTER TO 语句中的 MASTER_BIND指定)

          新增log_bin_basename参数用于指定二进制日志文件完整的路径和文件名

          支持slave上多个线程并行执行master上传递下来的事务。经过 slave_parallel_workers指定slave上并发执行事务的worker数量。这种并发是基于数据库的,也即数据库内的操做是有前后顺序的,主从上需以一致的顺序执行,但不一样数据库之间则不须要这种顺序,也即一个worker可没必要等待其余worker在更新完某个库以后再更新某库。

              
     Optimizer enhancements.
          优化了SELECT ... FROM single_table ... ORDER BY non_index_column [DESC] LIMIT [M,]N;查询性能
          实现了Disk-Sweep Multi-Range Read.有效减小了在大表且没有缓存在缓存中的状况下在辅助索引上范围扫描形成的随机磁盘访问。采用的办法是先扫描找出相关行关联的key,而后依据主键将key排序,最终依据排好序的key回表取出数据。
          实现了ICP(Index Comndition Pushdowndown)。若没有ICP,存数引擎层根据索引定位表中的行并返回给Server层而后在这里用WHERE从句中的条件对结果进行过滤。若使用ICP,若是WHERE条件中的部分列可由索引中的字段进行评估那么server层会将WHERE条件中的这一部分下推到存储引擎层。引擎层进行评估后只取出知足要求的行。这样可有效减小引擎访问表的次数和server访问引擎的次数。
          EXPLAIN支持 DELETE, INSERT, REPLACE和UPDATE,之前只支持SELECT,且能够以JSON格式输出。
          处理FROM从句中的子查询(派生表)更加高效。首先FROM后的子查询的物化过程直到查询执行时须要这一部分的内容时才进行,另外查询可能会在派生表上加索引以加快查询。
          使用semi-join和物化策略优化子查询。
          使用BKA(Batched Key Access)join算法提高join性能。支持inner join、outer join、semi-join、nested outer joins和nested semi-joins。    
          新增tracing功能主要供开发者使用。经过一些列 optimizer_trace_xxx 变量和 INFORMATION_SCHEMA.OPTIMIZER_TRACE来提供

     Condition handling.
          可经过GET DIAGNOSTICS语句获取各类诊断信息

     Data types.
          对于TIME、DATETIME、TIMESTAMP类型的值支持小数的秒,最多可支持毫秒级别(也即6位的精度)。
          以前的版本中每一个表至多只有一个TIMESTAMP列能够初始化为当天日期时间(DEFAULT CURRENT_TIMESTAMP)或者更新至当天日期时间( ON UPDATE CURRENT_TIMESTAMP)。新版本的中取消了此限制.另外,以前只有TIMESTAMP列可使用DEFAULT CURRENT_TIMESTAMP和 ON UPDATE CURRENT_TIMESTAMP,如今datetime列也能够。
          以前版本中TIMESTAMP列定义中什么都不指定的话自动的默认为DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。如今能够经过 explicit_defaults_for_timestamp 变量关闭这一行为。

     Host cache.
          提供了更多有关致使链接错误的缘由的信息以及对host cache访问的改进,其中包含客户端IP和主机名可用以免DNS查询。具体实现以下:
          增长了一系列 Connection_errors_xxx状态变量,提供有关链接错误的信息,这些信息是全局的表示全部链接的各种错误信息的聚合,不是针对于某个特定IP地址。
          performance_schema库新增host_cache表且有更多的关于错误信息的计数字段来track各种错误(非针对特定IP的错误),这样一来即可经过查询该表得知有多少主机被缓存、哪些主机发生了哪类错误、链接错误量有多接近max_connect_errors限制。
          可经过 host_cache_size调整host cache大小


     OpenGIS.
          原生实现了OPENGIS规范定义的测量两个几何值之间关系的一系列函数。

降级
     ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE和NO_ZERO_IN_DATE 几个sql mode 不同意使用,MySQL5.7中这些值不会有任何影响,效果会被包含在strict SQL mode中((STRICT_ALL_TABLES 或 STRICT_TRANS_TABLES)。MySQL升级时要注意这些问题。确保新版本中的SQL MODE不会影响应用。

     GROUP BY中的隐式排序不同意使用,这属于有MySQL的一个扩展,可能在未来版本中出于性能考虑被移除。因此最好使用ORDER BY语句明确指明排序。

     不推荐使用4.1以前版本的密码和mysql_old_password认证插件,不安全。为防止使用旧版本密码哈希可将secure_auth 开启。对于DBA 建议将使用mysql_old_password 认证插件的帐户转为使用 mysql_native_password认证插件。

     不建议使用OLD_PASSWORD()和old_passwords=1来生成4.1版本以前的密码。

     不建议使用 --skip-innodb或者--innodb=OFF, --disable-innodb;date_format, datetime_format 和 time_format; have_profiling, profiling 和 profiling_history_size ; innodb_use_sys_malloc 和innodb_additional_mem_pool_size; timed_mutexes 变量。这些均可能在未来的版本中移除。

     使用 --lc-messages-dir 和 --lc-messages 代替--language(用于指明错误信息使用的语言)。

     不建议使用 ALTER IGNORE TABLE。

     不建议使用 msql2mysql, mysql_convert_table_format, mysql_find_rows, mysql_fix_extensions, mysql_setpermission, mysql_waitpid, mysql_zap, mysqlaccess 和 mysqlbug这些工具。

     不建议使用mysqlhotcopy工具。


移除
     --log选项,使用 --general_log 和 --general_log_file=file_name 代替。
     --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_oopen_cache变量代替。
     移除--init-rpl-role、--rpl-recovery-rank options选项, 和rpl_recovery_rank、Rpl_status状态变量。
     取消engine_condition_pushdown 变量,改成optimizer_switch变量中的一个flag  engine_condition_pushdown。
     取消have_csv, have_innodb, have_ndbcluster和have_partitioning变量。使用SHOW PLUGIN或者查询INFORMATION——SCHEMA中的PLUGINS表。
     sql_big_tables变量替换为big_tables.
     sql_low_priority_updates变量替换为low_priority_updates.
     sql_max_join_size变量替换为max_join_size.
     max_log_data_size变量替换为max_allowed_packet。
     FLUSH MASTER和FLUSH SLAVE语句替换为 RESET MASTER和 RESET SLAVE.
     SLAVE START和SLAVE STOP替换为START SLAVE和STOP SLAVE。
     取消SHOW AUTHORS和SHOW CONTRIBUTORS.
     取消SET 命令中的OPTION和ONE_SHOT修饰符。
     不容许加在存储过程、存储函数中将参数或者本地变量设置为DEFAULT( SET var_name = DEFAULT ).但能够将系统变量设置为DEFAULT。
     移除 SHOW ENGINE INNODB MUTEX。
        
 
转载:http://blog.csdn.net/zyz511919766/article/details/49865091
相关文章
相关标签/搜索