Erro ao estabelecer uma ligação com a base de dados

Erro ao estabelecer uma ligação com a base de dados

Talvez este seja a mensagem mais terrível que um dono de site ou Blog possa ver quando tenta acessar a sua página; porque esta mensagem sinaliza simplesmente ausência do trabalho na internet, e pior … um site “fora do ar” também sinaliza negativamente no google que vai deixar o site mais longe dos buscadores do Google.

Uma das características de quem começa um site ou blog, é usar um PC de 512 Mega, eles são mais baratos para tudo ! não só contratação de Plano de hospedagem, como até para contratação de máquina na nuvem ( Cloud Computing ).

Porém, percebe que esta baixa capacidade traz também alguns problemas não característicos em grandes PCs, nestes grandes, estes problemas não ocorrem porque tem potencia sobrando ! uma delas é o acesso simultâneo ao seu site ou Blog, e este problema pode ser o “Killamento” ou encerramento de processo que tentam usar mais memória do que tem disponível, e isto vai deixar seu Blog ou Site “fora do ar”, ou seja, fora de operação.

Entenda o erro mais comum gerado pelo MySQL, quando ele simplesmente para de funcionar e deixa todo seu sistema sem funcionar, e também qualquer outra página, site ou blog e ainda aplicativos instalados que dependa do sistema de banco de dados. Entenda como usar um Servidor pequeno para deixar seu site com estabilidade sem riscos de “ShutDown“, ou caida repentina do sistema.

 

 

arquivo

 

MySQL sem Memória

Se todos os aplicativos que existem em um servidor, o mais crítico é mesmo o gerenciador de dados, o mais comum de todos é o MySQL da Oracle ! Ele tem fama de ser muito rápido ! porém comer muita memória ! As vezes testamos o banco de dados gerenciando pouca coisa, ou pouco acesso, mas esquecemos como a coisa ficaria se estes acessos aumentarem “um pouco

 

O problemas mais frequente hoje é provocado pelo engine (motor) chamado InnoDB, ele usa um sistema diferente do MyISAM, é uma diferença pequena …que pode trazer dor de cabeça ao gerenciador do servidor, quando o sistema InnoDB tenta alocar memória, então quando o sistema percebe que não tem o suficiente … ele mata o MySQL que para então de funcionar .. – tragédia -.

 

server kernel: [1192959.658834] Out of memory: Kill process 2648 (mysqld) score 109 or sacrifice child
server kernel: [1192959.659425] Killed process 2648 (mysqld) total-vm:323048kB, anon-rss:56172kB, file-rss:0kB
server mysqld: 141010 9:30:58 InnoDB: The InnoDB memory heap is disabled
server mysqld: 141010 9:30:58 InnoDB: Mutexes and rw_locks use GCC atomic builtins
server mysqld: 141010 9:30:58 InnoDB: Compressed tables use zlib 1.2.7
server mysqld: 141010 9:30:58 InnoDB: Using Linux native AIO
server mysqld: 141010 9:30:58 InnoDB: Initializing buffer pool, size = 128.0M
server mysqld: InnoDB: mmap(135987200 bytes) failed; errno 12
server mysqld: 141010 9:30:59 InnoDB: Completed initialization of buffer pool
server mysqld: 141010 9:30:59 InnoDB: Fatal error: cannot allocate memory for the buffer pool
server mysqld: 141010 9:30:59 [ERROR] Plugin ‘InnoDB’ init function returned error.
server mysqld: 141010 9:30:59 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.
server mysqld: 141010 9:30:59 [ERROR] Unknown/unsupported storage engine: InnoDB
server mysqld: 141010 9:30:59 [ERROR] Aborting
server mysqld: 141010 9:30:59 [Note] /usr/sbin/mysqld: Shutdown complete
server mysqld_safe: mysqld from pid file /var/run/mysqld/mysqld.pid ended

 

Neste caso, o “Kilamento” (ou morte do processo) MySQL feito pelo Sistema, justamente para proteger outros processos, já que o MySQL tenta alocar mais memória que a disponível, vai mostrar este sintomas no arquivo SYSLOG (no linux),mas não no Log do MySQL, isto ocorre porque o MySQL é “morto” pelo sistema que não o avisa antes de fazer. Por isto , dar uma olhada no Log do Site ou Log não vai mostrar o problema, mas sim olhar no Log do Sistema (Linux, Windows, etc).

 

Neste caso, a opção a tomar é Aumentar a memória do Sistema OU diminuir o tamanho do Buffer InnoDB em:

/etc/mysql/my.cnf .

.
.
[mysqld]
innodb_buffer_pool_size=64M
.
.

 

Diminuir o tamanho do Buffer Pool pode resolver o problema, mas se o acesso ficar gigante, o erro ainda pode ocorrer novamente, uma forma de contonar isto, é fazer um checkup pelo Cron (agendamento do Sistema Linux) para verificar cada 5 minutos, se acaso detectar o MySQL desligado, então ele liga.

Inclua esta linha em:
/etc/crontab

*/5     * * * * root    cd / && run-parts –report /etc/cron.5

 

Criar a Pasta:
/etc/cron.5

e incluir o arquivo:
/etc/cron.5/checarmysql

Com o texto

#!/bin/sh
/var/www/checar-mysql.py

O arquivo em /var/www/checar-mysql.py (em python) devera ter o seguinte conteudo:

#!/usr/bin/python
import latin
import MySQLdb as mdb

try:
con = mdb.connect(‘127.0.0.1’, ‘USUARIOMYSQL’, SENHAMYSQL’, ‘NOMEBANCO’);

print “OK MYSQL”
con.close()
exit

except:
os.system(“/usr/bin/mysqlcheck -c -u USUARIOMYSQL -pSENHAMYSQL –all-databases”)
os.system(“/etc/init.d/mysql restart”)

 

Com as configurações acima, será possível manter nosso sistema estável, mesmo usando uma memória pequena de 512Mega, e se houver um “Kill” no sistema MySQL, o agendador Cron será capaz de chamar um programa para verificar, e se for assim, restabelecer o MySQL de volta a operação.

 

Deixe um comentário