2013-08-08 1 views
-2

My MySQL 서버가 자주 중단되고 "service mysqld start"명령을 사용하여 mysql을 다시 시작해야합니다. mysql 오류 로그 파일을 확인합니다.Mysql이 자주 충돌합니다

130807 22:59:47 mysqld_safe Number of processes running now: 0 
130807 22:59:47 mysqld_safe mysqld restarted 
130807 22:59:47 [Note] Plugin 'FEDERATED' is disabled. 
130807 22:59:47 InnoDB: The InnoDB memory heap is disabled 
130807 22:59:47 InnoDB: Mutexes and rw_locks use GCC atomic builtins 
130807 22:59:47 InnoDB: Compressed tables use zlib 1.2.5 
130807 22:59:47 InnoDB: Using Linux native AIO 
130807 22:59:47 InnoDB: Initializing buffer pool, size = 128.0M 
InnoDB: mmap(137363456 bytes) failed; errno 12 
130807 22:59:47 InnoDB: Completed initialization of buffer pool 
130807 22:59:47 InnoDB: Fatal error: cannot allocate memory for the buffer pool 
130807 22:59:47 [ERROR] Plugin 'InnoDB' init function returned error. 
130807 22:59:47 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 
130807 22:59:47 [ERROR] Unknown/unsupported storage engine: InnoDB 
130807 22:59:47 [ERROR] Aborting 

130807 22:59:47 [Note] /usr/libexec/mysqld: Shutdown complete 

130807 22:59:47 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 

약 10,000 명의 사용자가 있으며 10,000 개의 테이블이있는 데이터베이스가 있습니다. 이러한 테이블은 사용자 상태를 기록하는 데 사용됩니다. 그리고 새 사용자 테이블을 만들 때 PDO에서 다음 코드를 사용합니다.

$statusTable = "status_".$uid; 
$qstr = "CREATE TABLE IF NOT EXISTS `status`.`$statusTable` (
    `prim_id` INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    `message` VARCHAR(600) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
    `created_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 
) ENGINE = INNODB"; 
$db->query($qstr); 

이 코드는 mysql 충돌을 일으 킵니까? EC2 인스턴스를 615MB 램과 함께 사용합니다. 감사!!

+0

분명히 일부 메모리를 할당 할 수 없기 때문에 MySQL을 잘못 구성했거나 (아마도 [mariadb] (http://mariadb.org/)를 시도해보십시오.) RAM이 부족합니다. BTW'errno == 12'는'ENOMEM'을 의미합니다 –

+3

10,000 개의 테이블 ????? 각 사용자에 대해 하나 ?? 뭐?? 나는 그것이 당신의 문제인지 아닌지는 모르지만, 확실히 ** 좋은 데이터베이스 설계는 아닙니다. – Spudley

+1

Supdley와 동의합니다. 최대 수십 개의 테이블 (인간적으로 합당한 수의 테이블)이 있어야합니다. 하드웨어 자원이 충분할 경우 일부는 거대 할 수 있습니다 (수백만 행이 있음). –

답변

2

매우 나쁜 데이터베이스 디자인을 제외하고는 질문/문제가 전에 posted and answered 인 것 같습니다.

+0

확인. 링크는 내 문제와 유사합니다. 감사. – Howard

-1

이 문제의 원인이되는 데이터베이스에 많은 병렬 연결이 있다고 생각합니다. 문제는 테이블과 관련이 없으며 문제는 주변 아키텍처와 관련이 있습니다.

+0

예, 병렬 연결이 많이 있지만이 문제를 어떻게 개선 할 수 있습니까? – Howard

+0

RAM을 늘리고 스왑을 추가하십시오. ... –

+0

트랜잭션을 완료 할 때마다 연결을 닫으십시오! –