본문 바로가기
Freebsd/monitoring

cacti pmdphp: sql assoc failed error

by 북한산산적 2012. 9. 13.

아래와 같은 메시지가

 

Console -> Utilities -> View Cacti Log File 에서 생성 된다 일전에 pf 방화벽을 올려고 icmp 를 ping 빼고 막은것이 화근 이였나 .. 계속 해서 메시지를 출력한다. ㅠㅠ

09/13/2012 03:15:01 PM - CMDPHP: Poller[0] ERROR: SQL Assoc Failed!, Error:'145', SQL:"select poller_output.output, poller_output.time, UNIX_TIMESTAMP(poller_output.time) as unix_time, poller_output.local_data_id, poller_item.rrd_path, poller_item.rrd_name, poller_item.rrd_num from (poller_output,poller_item) where (poller_output.local_data_id=poller_item.local_data_id and poller_output.rrd_name=poller_item.rrd_name) "
09/13/2012 03:15:01 PM - CMDPHP: Poller[0] ERROR: A DB Exec Failed!, Error:'145', SQL:"UPDATE poller_item SET rrd_next_step = rrd_step - 300 WHERE (rrd_next_step < 0 AND host_id >= 0 AND host_id <= 1)'
09/13/2012 03:15:01 PM - CMDPHP: Poller[0] ERROR: A DB Exec Failed!, Error:'145', SQL:"UPDATE poller_item SET rrd_next_step = rrd_next_step - 300 WHERE (host_id >= 0 AND host_id <= 1)'
09/13/2012 03:15:01 PM - CMDPHP: Poller[0] ERROR: SQL Cell Failed!, Error:'145', SQL:"SELECT count(*) FROM poller_item WHERE (action=2 AND host_id >= 0 AND host_id <= 1 AND rrd_next_step <= 0)"
09/13/2012 03:15:01 PM - CMDPHP: Poller[0] ERROR: SQL Assoc Failed!, Error:'145', SQL:"SELECT * FROM poller_item WHERE (host_id >= 0 AND host_id <= 1 AND rrd_next_step <= 0) ORDER by host_id"
09/13/2012 03:15:01 PM - CMDPHP: Poller[0] ERROR: SQL Cell Failed!, Error:'145', SQL:"SELECT COUNT(*) FROM poller_item WHERE rrd_next_step<=0 "

 

구굴검색으로

 

Cacti • View topic - DISK SPACE FULL

forums.cacti.net/viewtopic.php?... - 저장된 페이지 - 이 페이지 번역하기
댓글 3 - 작성자 2 - 3월 15일
03/15/2012 01:51:17 PM - CMDPHP: Poller[0] ERROR: SQL Assoc Failed!, Error:'1017', SQL:"select poller_output.output, poller_output.time, ...

검색하여 들어 가니

보통 mysql 에 로그인을 할때는 mysql -uroot -p 이런식으로 유저 랑 패스워드로 로그인 한다.

 

[root@monitor ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 97
Server version: 5.1.52 Source distribution

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use "cacti"          <--- 이부분도 use cacti;l 이런식으로 로그인 ..
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select count(*) from poller_output;
ERROR 145 (HY000): Table './cacti/poller_output' is marked as crashed and should be repaired
mysql> truncate table poller_output;
Query OK, 0 rows affected (0.02 sec)

mysql> select count(*) from poller_output;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.00 sec)

 

잘될련가 모르지만.. cacti 레퍼런스를 남기기 위해 끄적여 본다.

위에 방법이 소용없어 아래 내용으로 다시 지정 .. ㅠㅠ

mysqlcheck 유틸리티 사용법
cost 베이스 DB에서 DB전체를 한번에 analyze, optimize, repair 하기 위한 유틸리티 입니다.
파일위치 : mysql/bin
----------------------------------------------------
전체 체크 및 자동 복구
mysqlcheck -Aa --auto-repair -u root -p
mysqlcheck -Ao --auto-repair -u root -p
----------------------------------------------------
-A, --all-databases
-a, --analyze
-o, --optimize
-P 포트번호
----------------------------------------------------
특정 데이터베이스만 체크 및 자동 복구
mysqlcheck --auto-repair -u root -p 데이터베이스명
----------------------------------------------------
특정 테이블만 체크 및 자동 복구
mysqlcheck --auto-repair -u root -p 데이터베이스명 테이블명
----------------------------------------------------
명령어 수정하여 사용하기
mysqlrepair = mysqlcheck --repair
mysqlanalyze = mysqlcheck --analyze
mysqloptimize = mysqlcheck --optimize
----------------------------------------------------
mysql에 접속하여 개별적으로 하는 방법
mysql> use 데이터베이스명;
mysql> show tables;
mysql> check table 테이블명;
mysql> repair table 테이블명;
mysql> analyze table 테이블명;
mysql> optimize table 테이블명;
----------------------------------------------------
##########################
OPTIMIZED table script PHP
##########################
$db = 'database_name';
$tables = mysql_list_tables($db);
while (list($table)name) = mysql_fetch_array($tables)) {
$sql = "OPTIMIZE TABLE $table_name";
mysql_query($sql) or exit(mysql_error());
}

출처 : http://www.oszone.co.kr/?q=node/312


정상적으로 로그가 남는거 처럼 보이는대 그래프가 안그려지고 오류가 나는것을 계속 확인해 봐야 한다. 

09/13/2012 09:25:00 PM - SYSTEM STATS: Time:0.2215 Method:cmd.php Processes:1 Threads:N/A Hosts:2 HostsPerProcess:2 DataSources:24 RRDsProcessed:15