kingshard SQLブラックリスト機能紹介
3212 ワード
kingshard SQLブラックリスト機能紹介
1.適用シーンの紹介
kingshardがオープンソースになった後、kingshardにSQLブラックリストメカニズムを追加できるかどうかを何度も言及し、kingshardが特定のルールに基づいてブラックリストのSQLをブロックできるようにした.典型的なアプリケーションシーンはいくつかあります. DBAは、SQLブラックリストファイルに格納される危険なSQLを定義します.フロントエンドアプリケーションから送られてきたSQLがデータベースに危害を及ぼすことを避けることができます.このSQLは開発者が不注意で作成した可能性もあるし、SQLに注入されて生成されたSQLである可能性もある.例: kingshardプロジェクトがオンラインになった後、logを通じて大量のSQLがDBに大きな圧力をもたらしていることが分かった.この場合、このSQLをブラックリストに動的に追加し、SQLの実行を阻止し、データベースの圧力を低下させることができます.たとえば、
2.機能紹介
kingshardでSQLブラックリスト機能を使用するには、構成に追加するだけです.
次にblacklistでSQLブラックリストを定義し、kingshardが転送すると、ブラックリストのSQLの転送がブロックされます.
ブラックリストSQLは正規表現として定義されます.SQLの値は
3.機能プレゼンテーション
ブラックリストに次のSQLを追加します.
kingshardに接続し、SQLを実行すると次のように表示されます.
blacklistが存在する場合のkingshadの性能をsysbenchでテストしたところ、性能が著しく低下していないことがわかり、安心して使用できました.
1.適用シーンの紹介
kingshardがオープンソースになった後、kingshardにSQLブラックリストメカニズムを追加できるかどうかを何度も言及し、kingshardが特定のルールに基づいてブラックリストのSQLをブロックできるようにした.典型的なアプリケーションシーンはいくつかあります.
delete from mytable
、where条件のないSQLは、テーブル全体を削除します.select count(*) from mytable where xxxx
では、このようなSQLが適切に最適化されていないと、システムのIOが高すぎる可能性があります.2.機能紹介
kingshardでSQLブラックリスト機能を使用するには、構成に追加するだけです.
blacklist_sql_file: /Users/flike/blacklist
次にblacklistでSQLブラックリストを定義し、kingshardが転送すると、ブラックリストのSQLの転送がブロックされます.
ブラックリストSQLは正規表現として定義されます.SQLの値は
?
または?+
で置き換えられます.ブラックリストが有効であることを保証するために、kingshardがブラックリストのSQLを正しくブロックしたかどうかを手動で検証したほうがいい.定義ルール(前は元のSQL、次はブラックリスト形式のSQL)は、次の例を参照してください.SELECT c FROM t WHERE id=1
select c from t where id=?
SELECT * FROM prices.rt_5min where id=1
select * from prices.rt_5min where id=?
select null, 5.001, 5001. from foo
select ?, ?, ? from foo
select 'hello', '
hello
', \"hello\", '\\'' from foo
select ?, ?, ?, ? from foo
select 'hello'
select ?
select * from t where (base.nid IN ('1412', '1410', '1411'))
select * from t where (base.nid in(?+))
select * from foo where a in (5) and b in (5, 8,9 ,9 , 10)
select * from foo where a in(?+) and b in(?+)
select * from foo limit 5
select * from foo limit ?
select * from foo limit 5, 10
select * from foo limit ?, ?
select * from foo limit 5 offset 10
select * from foo limit ? offset ?
INSERT INTO t (ts) VALUES (NOW())
insert into t (ts) values(?+)
insert into foo(a, b, c) values(2, 4, 5)
insert into foo(a, b, c) values(?+)
CALL foo(1, 2, 3)
call foo
LOAD DATA INFILE '/tmp/foo.txt' INTO db.tbl
load data infile ? into db.tbl
administrator command: Init DB
administrator command: Init DB
use `foo`
use ?
3.機能プレゼンテーション
ブラックリストに次のSQLを追加します.
select count(*) from test_shard_hash where id > ?
select count(*) from test_shard_range
SELECT * FROM WORLD
DELETE FROM WORLD
kingshardに接続し、SQLを実行すると次のように表示されます.
mysql> select * from world;
ERROR 1105 (HY000): sql in blacklist.
mysql> select * from world where a > 0;
+------+------+
| a | b |
+------+------+
| 10 | 23 |
| 45 | 565 |
+------+------+
2 rows in set (0.00 sec)
mysql> delete from world;
ERROR 1105 (HY000): sql in blacklist.
mysql> delete from world where a =10;
Query OK, 1 row affected (0.00 sec)
# SQL SQL , , #kingshard SQL
mysql> select count(*) from test_shard_hash where id >1;
+----------+
| count(*) |
+----------+
| 24 |
+----------+
1 row in set (0.02 sec)
mysql> select count(*) from test_shard_hash where id > 1;
ERROR 1105 (HY000): sql in blacklist.
blacklistが存在する場合のkingshadの性能をsysbenchでテストしたところ、性能が著しく低下していないことがわかり、安心して使用できました.