18. MTAtlas主要模块-‐SQL处理模块
– 为什么要添加SESSION级变量的支持?
client_con1
MySQL
连接
MySQL 连接
Q1:set
SQL_SELECT_LIMIT=1
Q2:select
*
from
t1
where
id
=
10;
set
SQL_SELECT_LIMIT=1
select
*
from
t1
where
id
=
10;
Q3:select
*
from
t2
where
id
=10;(10
rows)
client_con2
连接池SQL处理
set
SQL_SELECT_LIMIT=1;
select
*
from
t1
where
id
=
10;
select
*
from
t2
where
id
=10;
19. MTAtlas主要模块-‐SQL处理模块
client_con1
MySQL 连接
client_status=>(null)
Q1:set
SQL_SELECT_LIMIT=1
client_status=>(SQL_SELECT_LIMIT=1)
Q2:select
*
from
t1
where
id
=
10;
client_status=>(null)
Q3:select
*
from
t2
where
id
=10;(10
rows)
client_con2
连接池SQL处理
sever_status=>(null)
set
SQL_SELECT_LIMIT=1;
status=>(SQL_SELECT_LIMIT=1)
select
*
from
t1
where
id
=
10;
set
SQL_SELECT_LIMIT=default;
select
*
from
t2
where
id
=10;
22. MTAtlas主要模块-‐连接池管理
– 为什么要做这样的修改
client_con1(user1)
MySQL 连接
client_status=>(null)
Q3:select
*
from
t2
where
id
=10;(10
rows)
client_con2(user2)
连接池SQL处理
client_status=>(null)
Q1:set
SQL_SELECT_LIMIT=1
client_status=>(SQL_SELECT_LIMIT=1)
Q2:select
*
from
t1
where
id
=
10;
sever_status=>(null)
set
SQL_SELECT_LIMIT=1;
status=>(SQL_SELECT_LIMIT=1)
select
*
from
t1
where
id
=
10;
CHANGE_USER-‐>user2:ERROR
set
SQL_SELECT_LIMIT=default;
(user1)
select
*
from
t2
where
id
=10;
(user1)
23. MTAtlas主要模块-‐连接池管理
– 按用户分配后的效果
client_con1(user1)
user1:conn_ad
client_status=>(null)
Q3:select
*
from
t2
where
id
=10;(10
rows)
client_con2(user2)
连接池SQL处理
user2:conn_ad
sever_status=>(null)
set
SQL_SELECT_LIMIT=1;
status=>(SQL_SELECT_LIMIT=1)
select
*
from
t1
where
id
=
10;
sever_status=>(null)
select
*
from
t2
where
id
=10;
client_status=>(null)
Q1:set
SQL_SELECT_LIMIT=1
client_status=>(SQL_SELECT_LIMIT=1)
Q2:select
*
from
t1
where
id
=
10;
24. MTAtlas主要模块-‐访问控制
• 访问控制
– SQL 过滤
• 创建黑名单,匹配一类查询
– 示例1:”select * from
tbl
where
col2
=
?”,
– 示例2:“update
tbl
set
col1
=
? where
pkey
=
?”
• 根据执行频率,执行时间自动添加黑名单
• 提供手动添加黑名单
– 根据后台Thread
running进行负载均衡
– 用户IP限制
– 从库流量配置