2012-06-05 10 views
2

다른 MySQL 서버의 쿼리를 모니터링하고 데몬이 실행되는 위치에서 실행되는 쿼리와 비교하는 MySQL 데몬 플러그인을 작성하려고합니다. 기본적으로 이것은 헤드 노드에서 시작된 쿼리가 샤드에서 실행되는 스파이더 엔진 설정에 있습니다. 머리글에서 쿼리가 죽을 때마다 샤드 노드에 관련된 쿼리를 죽일 데몬을 갖고 싶습니다.데몬 플러그인 내에서 mysql_real_connect 호출

mysql_real_connect, mysql_real_query ...을 사용하는 pthread를 시작하여 헤드 노드의 "show processlist"에 액세스하여 로컬 스레드 목록과 비교하는 것이 아이디어였습니다. 데몬의 스레드에서 mysql_real_connect을 발행하면 세그먼트 화 오류가 발생합니다. 이것은 mysql_real_connect의 스레딩 문제 때문이라고 생각합니다. 나는 #define MYSQL_SERVER 1을 사용했고 ha_federated::real_connect()에서 취한 접근법을 따른다.

mysql_real_connect을 데몬 플러그인에서 실제로 실행할 수 있습니까?

힌트를 보내 주셔서 감사합니다.

답변

1

handlersocker 데몬 플러그인을 통해 명상 한 후 mysql_real_connect 및 친구들이 데몬 스레드에서 작업하려면 mysql 내부 스레드 환경을 설정하고 서버에 등록해야한다는 것을 깨달았습니다.

my_thread_init(); 
thd = new THD; 

mysql_mutex_lock(&LOCK_thread_count); 
thd->thread_id = thread_id++; 
mysql_mutex_unlock(&LOCK_thread_count); 

thd->store_globals(); 

... setting up various options in THD ... 

mysql_mutex_lock(&LOCK_thread_count); 
threads.append(thd); 
++thread_count; 
mysql_mutex_unlock(&LOCK_thread_count); 
:

이 기본적으로 호출 데몬 스레드에서 다음을 포함한다

관련 문제