mysql5.7 InnoDB存储引擎方面的提升有哪些

网友投稿 378 2023-12-26

mysql5.7 InnoDB存储引擎方面的提升有哪些

这篇文章将为大家详细讲解有关 mysql5.7 InnoDB存储引擎方面的提升有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

mysql5.7 InnoDB存储引擎方面的提升有哪些

版本: mysql5.7.16

一 : 安全性

    ① 初始化数据库方式的变化

老版本:    mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/opt/mysql

mysql5.7 :  mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/opt/mysql (会生成一个临时密码,若不想要密码则用参数 --initialize-insecure)

② 可以通过 mysql_ssl_ras_setup 来开启 ssl

    ③ sql_mode 由mysql5.6的默认空 变为默认 STRICT_TRANS_TABLES

二 : InnoDB存储引擎方面的提升

    1. 更改索引名不锁表,直接更改

alter table xxx rename index ix_a to ix_b

    2. Online DDL 对 字段属性为 varchar 更改的改进

1> varchar(20) --> varchar(40) 不锁表直接更改

        2> 40 --> 20 copy方法锁表

        3> 256是个临界值,这里指字节 , 不能跨越 如 varchar(30) --> varchar(320),则以copy的方式ddl,锁表

4> 对于char 和 int来说还是老方法,即 copy 的算法进行ddl,锁表

另 : 5.1和5.5 对于index的增删用 algorithm = inplace方法 不锁表;5.6支持对于 字段的增删使用inplace方法。对于主键的更改仍然使用copy算法来实现。

    3. 全文索引对中文的支持

        1> mysql5.6 开始针对于innodb才有全文索引,但是不支持 中文,日文,韩文等。

2> select * from xxx where match(content) against(+horand -生日快乐 in boolean mode ); 表示查找有horand 没有 生日快乐的文档。

        3> 新增参数 ngram_token_size 用于检索中文单词的个数。与5.6设置单词长度的几个参数互斥

    4. BP 预热的改进

1> mysql5.6 由 i_b_p_dump_at_shutdown=1 和 i_b_p_load_at_startup=1 来实现相关预热功能(mysql得正常关闭)

2> mysql5.7 添加参数 i_b_p_dump_pct=xx 来控制 dump所有热数据的百分比(从头到尾),默认25,可以在1~100之间。mysql5.6是全部。

            适当降低该值 可以 减少关闭和启动mysql的时间

    5. 在线调整 BP

         1> 会阻塞用户请求,建议在业务低峰期进行

6. 回收undo log 空间

1> mysql5.6 开始可以指定 undo log的文件目录(innodb_undo_direcrory),个数(innodb_undo_tablespace)以及大小(innodb_undo_logs=128 回滚段数量)

2> mysql5.7 添加两个参数控制undo log 的回收 ,innodb_undo_log_truncate=1(开启回收机制),innodb_max_undo_log_size=1G(文件大小超过1G触发回收机制)

    7. 通用表空间(开启 innodb_file_per_table=1)

1> create tablespace ts_name

        2> create table xxx(id int )engine=innodb TABLESPACE ts_name

        3> 多个表公用一个ibd文件 和 ibdata1在一个目录下

8. 独立表空间指定存放路径

        1> 5.6和5.7 create table t2(id int ) DATA DIRECTORY=/tmp 对应的表数据文件idb生成一个软连接 连接到/tmp目录下

9. 迁移 某个innodb表(开启innodb_file_per_table=1,mysql5.6 5.7)

        1> FLUSH TABLES xxx for EXPORT

2> xxx.frm xxx.idb xxx.cfg(存储了数据字典信息,经测试不要也可) 将三个文件copy到新数据库下

        3> 更改三个文件的属主为 mysql:mysql

        4> alter table xxx discart tablespace

5> alter table xxx import tablespace

        6> check table xxx;

    10. 直接修改redo log的大小

mysql5.5(ib_logfile0 size 最大支持4G)以及之前

        1> set global innodb_fast_shutdown=0

        2> mysqladmin shutdown

        3> 修改 innodb_log_file_size 的大小

4> 移除老的 ib_logfile0 ib_logfile1

        5> mysqld_safe & 启动mysql

mysql5.6 && mysql5.7(ib_logfile size 最大提升到几十个GB)

        1> shutdown

        2> 修改配置文件innodb_log_file_size

        3> mysqld_safe & 启动

    11. 死锁打印到错误日志

        1> mysql5.5以及之前版本

show engine innodb status\G

        2> mysql5.6 && mysql5.7

        设置参数 innodb_print_all_deadlocks=1 将死锁信息打印到err日志

12. 只读事务(5.6 5.7)

        start transaction read only;

三 : SERVER 层提升

    1. Json 字段类型的支持

    2. 支持虚拟列(函数索引)

1> create table xxx(id int , mod_id int GENERATED Alaways as (( id % 10 )) virtual ,key vir_col_inx (mod_id) )engine=innodb;

2> select * from xxx where mod_id=3; 则可以使用索引 vir_col_inx

3> 插入只能使用default方式( insert into xxx values(13,default); )

    3. explain 支持 update/delete/insert

    4. 记录到系统日志

        server启动时 : --syslog 

        client 连接时: --syslog

关于 mysql5.7 InnoDB存储引擎方面的提升有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何理解ogg12 mysql to oracle单向同步
下一篇:新手前端进到公司一般是干嘛的(前端新人在公司上班做什么)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~