开发者社区> tplinux> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

【新特性】MySQL5.7新特性query_rewrite 插件

简介: MySQL5.7新特性query_rewrite 插件
+关注继续查看

一。使用场景

在业务繁忙并且紧急上线,对就是那种特别繁忙,又不能停的那种。在系统不忙的时候 明明跑的很好。**但是**一旦业务繁忙,造成业务阻塞。当查看MySQL的满查询日志中发现大量慢查询日志,(不是单单加索引就能搞定的哦)。这时候怎么办,难道怒对开发一顿,这时候你需要MySQL5.7新特性query_rewrite _Plugin插件了。

二。安装配置插件
2.1安装

[root@localhost share]# /usr/local/mysql/bin/mysql -u root -p < install_rewriter.sql 
Enter password: 
[root@localhost share]# pwd
/usr/local/mysql/share

验证


"root@localhost:mysql.sock  [(none)]>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| query_rewrite      |
| sys                |
+--------------------+

安装完成了 似不似很简单呢~QAQ~

2.2配置一发

"root@localhost:mysql.sock  [(none)]>use query_rewrite;
Database changed
"root@localhost:mysql.sock  [query_rewrite]>show tables;
+-------------------------+
| Tables_in_query_rewrite |
+-------------------------+
| rewrite_rules           |
+-------------------------+

查看rewrite_rules表,表结构大概是这样的


CREATE TABLE `rewrite_rules` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pattern` varchar(10000) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `pattern_database` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `replacement` varchar(10000) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `enabled` enum('YES','NO') CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT 'YES',
  `message` varchar(1000) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `pattern_digest` varchar(32) DEFAULT NULL,
  `normalized_pattern` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

id :规则id ,此列是表的主键。
pattern:需要改写的源SQL
pattern_database:需要改写的DB名称
replacement:指定改写后的样子
enabled:是否启用

2.3举个栗子

CREATE TABLE `aa` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
"root@localhost:mysql.sock  [aa]>insert into aa values (1,'a');
"root@localhost:mysql.sock  [aa]>insert into aa values (2,'a');     

在query_rewrite中修改规则

"root@localhost:mysql.sock  [aa]>insert into query_rewrite.rewrite_rules(pattern, replacement, pattern_database) values (
    -> "select * from aa ","select * from aa where id=1", "aa");

"root@localhost:mysql.sock  [aa]>call query_rewrite.flush_rewrite_rules(); #加载一下

验证

root@localhost:mysql.sock  [aa]>select * from aa;
+------+------+
| id   | name |
+------+------+
|    1 | a    |
+------+------+

是不是感觉很神奇呢,对于那种SQL隐式转换啦,强制走个索引啦 子查询的优化啦 等等等等 。尤其是系统繁忙来不及修改程序 来不及修改SQL的时候。真的能够救你的系统一命哦。如果你想让某个SQL变慢哦,让某个程序员背锅也是可以的哦。。

三.总结
建议多关注一下MySQL的新特性。不知不觉就能使用到,有效提升和改善业务环境。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MySQL 5.7版本新特性连载(六)
MySQL 5.7版本新特性连载(六)
0 0
MySQL 5.7版本新特性连载(五)
MySQL 5.7版本新特性连载(五)
0 0
MySQL 5.7版本新特性连载(四)
MySQL 5.7版本新特性连载(四)
0 0
新功能初探 | MySQL 8.0 Multi-Valued Indexes功能简述
本文主要介绍下8.0.17新引入的功能multi-valued index
203 0
MySQL 8部分新特性(8.0.17)
参考官方文档,记录了部分我关注的新特性。本文仅仅是大概记录而已,准确描述参考官方文档: MySQL 8.0 Reference Manual 欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 数据字典使用事务性存储引擎。
1191 0
MySQL8.0 - 新特性 - Descending Index
前言 在MySQL8.0之前的版本中,innodb btree索引中的记录都是严格按照的key的顺序来存储的,但有些时候当我们需要倒序扫描时,效率就会很低。为了解决这个问题,从MySQL8.0版本开始支持在索引Key中倒序存储。
2044 0
MySQL · 5.7新特性 · Query Rewrite Plugin
Query Rewrite Plugin 从MySQL5.7.6版本开始支持Rewrite Plugin,可以将符合条件的SQL进行重写。在真实世界中,这个特性还是非常有用的,例如错误的上线了某个SQL,但由于无法走到索引导致全库; 或者你可能使用某个第三方的已编译好的软件,但SQL可能执行错误,
9332 0
mysql5.6新特性总结
一. server参数默认值设置的变化 http://dev.mysql.com/doc/refman/5.6/en/server-default-changes.html 二. innodb增强 1.全文本搜索(full-text search)。
866 0
+关注
tplinux
云和恩墨 MySQL DBA
文章
问答
文章排行榜
最热
最新
相关电子书
更多
好的 MySQL 兼容可以做到什么程度
立即下载
PostgresChina2018_张启程_为什么我们抛弃MongoDB和MySQL,选择PgSQL
立即下载
MySQL 5.7让优化更轻松
立即下载