Primeiro, consegui verificar se estava relacionado ao problema de espaço usando apenas a consulta mysql
abaixo.
mysql -uUSER -p -e 'SHOW VARIABLES WHERE Variable_Name LIKE "%dir"'
O comando acima me retornou a saída como
+---------------------------+----------------------------+
| Variable_name | Value |
+---------------------------+----------------------------+
| basedir | /usr |
| character_sets_dir | /usr/share/mysql/charsets/ |
| datadir | /var/lib/mysql/ |
| innodb_data_home_dir | |
| innodb_log_group_home_dir | ./ |
| lc_messages_dir | /usr/share/mysql/ |
| plugin_dir | /usr/lib/mysql/plugin/ |
| slave_load_tmpdir | /tmp |
| tmpdir | /tmp |
+---------------------------+----------------------------+
Como podemos ver no comando acima, o datadir está presente em /var/lib/mysql
. Agora, eu precisava garantir que /var
não tivesse espaço suficiente para acomodar o banco de dados, nesse caso, minha detecção está correta. Eu consegui usando o comando abaixo.
df -P /var | tail -1 | cut -d' ' -f 1
O comando acima diz basicamente o ponto de montagem de um diretório específico. Como eu suspeitava, o ponto de montagem estava sob /dev/sda2
, que tinha apenas 40 GB de espaço. Agora, alterar o datadir é simples.
Pare o serviço mysql usando
service mysqld stop
Edite o arquivo /etc/my.cnf
para ter o datadir em alguma partição onde tenhamos espaço suficiente. (Isso é para o RHEL e pode variar dependendo da versão do sistema operacional). Depois de mudar o datadir , reinicie o serviço mysql usando o comando
service mysqld start
Referências