O MySQL 5.6 no CentOS 6 falha silenciosamente ao iniciar

2

Estou trabalhando em uma nova instalação do CentOS 6.5 e tentando executar um daemon do servidor MySQL 5.6. O servidor é uma gota nova na infraestrutura da DigitalOcean. 512 MB de tamanho. Eu usei a versão do MySQL do repositório MySQL Yum . Quando eu tento iniciá-lo, ele misteriosamente falha sem qualquer indicação do que deu errado. Aqui estão alguns detalhes:

Primeiro, meu /etc/my.cnf:

[mysqld]
innodb_buffer_pool_size = 5M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
explicit_defaults_for_timestamp = TRUE

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Quando executo service mysqld start , obtenho isto:

[root@myserver ~]# service mysqld start
MySQL Daemon failed to start.
Starting mysqld:                                           [FAILED]

E aqui está o conteúdo completo de /var/log/mysqld.log depois de inserir o comando:

140104 22:53:41 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
2014-01-04 22:53:42 8177 [Note] Plugin 'FEDERATED' is disabled.
2014-01-04 22:53:42 8177 [Note] InnoDB: The InnoDB memory heap is disabled
2014-01-04 22:53:42 8177 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2014-01-04 22:53:42 8177 [Note] InnoDB: Compressed tables use zlib 1.2.3
2014-01-04 22:53:42 8177 [Note] InnoDB: Using Linux native AIO
2014-01-04 22:53:42 8177 [Note] InnoDB: Not using CPU crc32 instructions
2014-01-04 22:53:42 8177 [Note] InnoDB: Initializing buffer pool, size = 5.0M
2014-01-04 22:53:42 8177 [Note] InnoDB: Completed initialization of buffer pool
2014-01-04 22:53:42 8177 [Note] InnoDB: Highest supported file format is Barracuda.
140104 22:53:43 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Sem erros, sem avisos, sem nada. E quando eu executo service mysqld status , ele diz mysqld dead but subsys locked .

Alguma idéia?

Atualização: Eu entrei em /etc/init.d/mysqld e adicionei uma linha para ecoar o comando de inicialização exato que está usando no console. Em seguida, executei esse comando (mas sem redirecionar nenhuma saída para / dev / null ou o processo em segundo plano). Veja o que acontece:

[root@myserver ~]# /usr/bin/mysqld_safe --datadir="/var/lib/mysql" --socket="/var/lib/mysql/mysql.sock" --pid-file="/var/run/mysqld/mysqld.pid" --basedir=/usr --user=mysql
140105 08:04:35 mysqld_safe Logging to '/var/log/mysqld.log'.
140105 08:04:35 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
/usr/bin/mysqld_safe: line 166: 10966 Killed                  nohup /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock < /dev/null >> /var/log/mysqld.log 2>&1
140105 08:04:36 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Parece que algum serviço externo ou watchdog está eliminando o MySQL assim que ele tenta inicializar. Mas o que poderia estar fazendo isso? O SELinux não parece estar instalado. Eu não sei mais o quê ...?

    
por curtisdf 05.01.2014 / 08:25

2 respostas

3

Foi definitivamente uma questão de memória. Isso ficou evidente quando eu olhei em /var/log/messages . Eu estava tentando executar versões recentes do Nginx, PHP-FPM e MySQL, e as configurações padrão para todos os três juntos eram demais para o meu pequeno droplet que tinha apenas 512 MB de memória e sem espaço de troca.

Eu ajustei meu /etc/my.cnf e minha configuração do PHP-FPM, e tudo começou a funcionar bem. Aqui está o meu novo my.cnf para fins de referência:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
explicit_defaults_for_timestamp = TRUE
key_buffer=16K
table_open_cache=4
query_cache_limit=256K
query_cache_size=4M
max_allowed_packet=1M
sort_buffer_size=64K
read_buffer_size=256K
thread_stack=64K
innodb_buffer_pool_size = 56M
innodb_flush_neighbors=0
innodb_flush_log_at_trx_commit=2
character-set-server=utf8
collation-server=utf8_general_ci

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Os vários parâmetros que adicionei foram compilados de vários blogs e sites tutoriais focados em implementações do mysqld com pouca memória, como aqui e aqui .

    
por 05.01.2014 / 20:21
2

A primeira coisa que eu verificaria aqui é o SELinux. Primeiro, coloque-o no modo permissivo

setenforce 0

Em seguida, tente iniciar o mysql. Se começar, sabemos com certeza que o SELinux é o culpado. Se este for o caso, então /var/log/audit/audit.log conterá mensagens negadas pelo AVC relacionadas ao MySQL que o ajudarão a diagnosticar o problema ainda mais.

Não se esqueça de renomear o modo de aplicação do SELinux.

setenforce 1
    
por 05.01.2014 / 09:12