MySQL 8.0 Query Rewrite支持DML

MySQL 8.0 Query Rewrite支持SELECT INSERT UPDETE DELETE REPLACE語句重寫


這個功能要點贊,比如開發上線時,有個SQL查詢字段索引忘記加了,直接把線上CPU打滿,此時,你可以將SQL重寫,讓業務先報錯,別打死數據庫,然後馬上通知開發回滾,等加完索引後再上線。


安裝插件

mysql -S /tmp/mysql_hcy.sock -p123456 <./install_rewriter.sql



查看是否生效

SHOW GLOBAL VARIABLES LIKE 'rewriter_enabled';


編寫重寫規則

insert into query_rewrite.rewrite_rules(pattern, replacement, 
pattern_database) values (
"SELECT * from sbtest1 limit ?",
"SELECT k,c from sbtest1 limit ?",
"test");

意思爲:

將以下語句

SELECT * from sbtest1 limit ?;

改寫成:

SELECT k,c from sbtest1 limit ?;

注:問號?爲變量


執行規則生效

CALL query_rewrite.flush_rewrite_rules();


演示

mysql> SELECT * from sbtest1 limit 1\G;
*************************** 1. row ***************************
k: 499284
c: 83868641912-28773972837-60736120486-75162659906-27563526494-20381887404-41576422241-93426793964-56405065102-33518432330
1 row in set, 1 warning (0.00 sec)
 
ERROR: 
No query specified
 
mysql> show warnings\G
*************************** 1. row ***************************
  Level: Note
   Code: 1105
Message: Query 'SELECT * from sbtest1 limit 1' rewritten to 'SELECT k,c from sbtest1 limit 1' by a query rewrite plugin
1 row in set (0.00 sec)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章