Eu tenho um Linode VPS rodando CentOS 7 e versões um tanto antigas de serviços relacionados à web (porque o código que escrevi não está pronto para versões mais recentes - estou planejando construir um novo VPS com tudo novo e código atualizado, mas isso levará tempo).
Recentemente o VPS migrou para um novo hardware. Após a reinicialização, o MariaDB 10.2 não reiniciava. Depois de dois dias arrancando os cabelos, consegui fazê-lo funcionar removendo e reinstalando o mariadb-server, além de um gerenciamento cuidadoso de arquivos para que ele reconhecesse meus arquivos de dados do InnoDB.
O MariaDB 10.2 está em fim de vida e não é mais suportado em maio de 2022, portanto não está mais em http://yum.mariadb.org , então tive que instalar o 10.4 (alterei apenas um dígito em MariaDB.repo
, de baseurl=http://yum.mariadb.org/10.2/centos7-amd64
para baseurl=http://yum.mariadb.org/10.4/centos7-amd64
).
Tudo está funcionando bem, pelo que posso dizer. No entanto, sempre que tento fazer com que o Monit comece a monitorar esse serviço novamente, ele se recusa e recebo dois e-mails de notificação dizendo "Checksum failed Service mariadb_bin" e "Checksum failed Service mariadb_init".
Usei o espelho mais confiável, certo? Então, por que há um problema de soma de verificação?
Aqui está o arquivo Monit para MariaDB:
## Mariadb monitoring.
## Test the mariadb service.
check process mariadb with pidfile /run/mariadb/mariadb.pid
group database
start program = "/usr/bin/systemctl start mariadb"
stop program = "/usr/bin/systemctl stop mariadb"
restart program = "/usr/bin/systemctl restart mariadb"
if failed port 3306 protocol mysql then restart
if 3 restarts within 5 cycles then timeout
# This process check depends on checking the binary if the mariadb
# daemon and the init script.
depends on mariadb_bin
depends on mariadb_init
alert [my email address] only on {timeout}
## Test the process binary.
check file mariadb_bin with path /usr/bin/mysqld_safe
group database
if failed checksum then unmonitor
if failed permission 755 then unmonitor
if failed uid root then unmonitor
if failed gid root then unmonitor
## Test the init scripts.
check file mariadb_init with path /usr/lib/systemd/system/mariadb.service
group database
if failed checksum then unmonitor
if failed permission 644 then unmonitor
if failed uid root then unmonitor
if failed gid root then unmonitor
Então, aparentemente, Monit está dizendo que a soma de verificação de mariadb_bin
não corresponde à de /usr/bin/mysqld_safe
e a soma de verificação de mariadb_init
não corresponde à de /usr/lib/systemd/system/mariadb.service
, embora eu não saiba o que é um "banco de dados de grupo".
É bom ver que você usa o exemplo Monit para lidar com um servidor de banco de dados MySQL/Maria, consulte https://mmonit.com/wiki/Monit/ConfigurationExamples#mysqld
O teste de soma de verificação é bom, mas tem uso limitado (não muito) no mundo real (eu acho).
Para obter a soma de verificação correta do arquivo, você pode usar "monit -H filename" e adicionar o valor esperado ao teste, consulte https://mmonit.com/monit/documentation/monit.html#FILE-CHECKSUM-TEST
Monit armazena a soma de verificação no arquivo de estado do Monit. Você atualiza o MariaDB, portanto os arquivos são alterados, e o checksum também. Você pode excluir o arquivo de estado, para remover os valores antigos ou adicionar os valores esperados ao teste (minha forma preferida), consulte https://mmonit.com/monit/documentation/monit.html#FILES
O "banco de dados de grupo" é a maneira Monit de agrupar aplicativos, consulte https://mmonit.com/monit/documentation/monit.html#SERVICE-GROUPS
Apenas algumas sugestões, Lutz
Acontece que após a reinstalação do MariaDB eu não fiz a etapa aparentemente óbvia de recarregar o Monit (novato - desculpe!). Então esse é o ponto chave para fazer desta uma “resposta” que pode ajudar outras pessoas.
No meu caso, porém, depois de recarregar o Monit e tentar fazer com que ele voltasse a monitorar o MariaDB, ele teve uma nova reclamação - dizia que o serviço nem existia, embora meus bancos de dados estivessem funcionando bem. Pesquisando mais, descobri que não existe mais um arquivo chamado
/run/mariadb/mariadb.pid
(na verdade, nem mesmo o/run/mariadb
diretório existe agora). Fazendofind / -name *.pid
e olhando a lista de prováveis candidatos, descobri/var/lib/mysql/puphpet2.pid
("puphpet2" é o nome do meu Linode VPS). Ele tem um carimbo de data/hora de apenas alguns minutos atrás, o que é surpreendente - não reiniciei intencionalmente o MariaDB desde que o instalei, há algumas semanas. Mas seu conteúdo correspondepidof mysqld
. Então eu editei/etc/monit.d/mariadb
com isso como o pidfile, e Monit agora diz que está monitorando alegremente o MariaDB (sem reclamações de checksum também). Espero que seja a coisa certa a fazer - se não, avise-me e retirarei isso como minha resposta, mas, caso contrário, assumirei que está correto (e potencialmente útil para alguém que esteja com problemas).