작성
·
365
답변 1
0
안녕하세요.
ProxySQL에서 procedure의 분기에 대해서 문의 주셨는데요.
제가 간단하게 아래와 같이 테스트를 해봤습니다.
--테스트용 프로시저 생성 및 권한 부여
# docker exec -it -uroot db001 /bin/bash
mysql> use testdb;
create procedure sp_select()
begin
select @@hostname,now();
end
appuser에 procedure 실행 권한 부여
GRANT EXECUTE ON testdb.* TO appuser@'%';
외부에서 proxysql을 통해서 프로시저 호출
(Query rule 등록 전으로 db001로만 접속)
mysql -uappuser -papppass -h172.31.10.19 -P16033 -N -e "call testdb.sp_select"
proxysql접속 후 프로시저 호출에 대한 digest 값 확인
# mysql -h127.0.0.1 -P16032 -uradmin -pradmin --prompt "ProxySQL Admin>"
프로시저에 대한 digest 값 확인
SELECT digest,SUBSTR(digest_text,0,25),count_star,sum_time FROM stats_mysql_query_digest;
+--------------------+--------------------------+------------+----------+
| digest | SUBSTR(digest_text,0,25) | count_star | sum_time |
+--------------------+--------------------------+------------+----------+
| 0x30EBC689D70068BC | call testdb.sp_select | 30 | 11694 |
+--------------------+--------------------------+------------+----------+
digest 값을 이용해서 query rule 등록
ProxySQL Admin>INSERT INTO mysql_query_rules (rule_id,active,digest,destination_hostgroup)
VALUES(3,1,'0x30EBC689D70068BC',20);
ProxySQL Admin>LOAD MYSQL QUERY RULES TO RUNTIME;
ProxySQL Admin>SAVE MYSQL QUERY RULES TO DISK;
proxysql을 통해서 프로시저 호출
(Query rule 등록 후 db001~003 접속)
mysql -uappuser -papppass -h172.31.10.19 -P16033 -N -e "call testdb.sp_select"
위와 같이 digest 값으로 query rule을 등록해서 프로시저에 대한 처리를 할 수 있을 거 같습니다.
더 다양한 Query rule 등록 방식은 아래 URL을 참고하시기 바랍니다.
https://proxysql.com/documentation/proxysql-read-write-split-howto/
감사합니다.