【新特性】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的新特性。不知不觉就能使用到,有效提升和改善业务环境。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值