원격 mysql이 실행 중인지 확인

원격 mysql이 실행 중인지 확인

원격 서버에서 mysql이 실행 중인지 확인하기 위해 cron 작업을 사용하여 실행할 수 있는 bash 쉘 스크립트를 원합니다. 그렇다면 아무것도 하지 말고 서버를 시작하십시오.

cronjob은 매분마다 원격 서버에서 라이브(또는 비) mysql을 확인합니다. cron 작업을 직접 작성할 수 있지만 원격 mysql이 작동 중인지 작동 중지되었는지 확인하는 쉘 스크립트에 대한 도움이 필요합니다. 업인지 다운인지 확인 후의 반응은 중요하지 않습니다. 하지만 점검이 중요합니다.

감사합니다.

답변1

mysqld사용 하여 연결mysqladmin

MySQL 문서에 따르면mysqladmin ping

서버가 사용 가능한지 확인하세요. mysqladmin의 반환 상태는 서버가 실행 중이면 0이고, 그렇지 않으면 1입니다. 이는 Access 거부 등의 오류가 발생한 경우에도 0입니다. 이는 서버가 실행 중이지만 연결을 거부했다는 의미로, 서버가 실행되지 않는 것과는 다르기 때문입니다.

먼저 권한이 없는 사용자를 만듭니다.

mysql> GRANT USAGE ON *.* TO ping@'%' IDENTIFIED BY 'ping';

이와 같은 스크립트를 작성하십시오.

#!/bin/bash

MYSQL_USER=ping
MYSQL_PASS=ping
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
mysqladmin ping ${MYSQL_CONN} 2>/dev/null 1>/dev/null
MYSQLD_RUNNING=${?}
if [ ${MYSQLD_RUNNING} -eq 1 ]; then service mysql start ; fi

원하는대로 해당 스크립트를 crontab에 배치하십시오.

ping@'%'이(가) 연결할 수 있도록 방화벽이 3306에서 열려 있는지 확인하세요.

답변2

확인은 다음과 같이 쉽습니다.

mysql -e "select 1" || echo down

서비스를 시작하기 위해 루트에 대한 ssh 명령으로 echo를 대체할 수 있지만 이는 약간 위험해 보입니다. 보안에 영향을 미칠 수 있습니다. 신뢰할 수 없을 수도 있습니다. 이를 수행하려면 적절한 클러스터/장애 조치 소프트웨어가 있어야 한다고 제안합니다. 우리가 일부 사용했던 MySQL MMM이 있지만 그것이 호의적이지 않은 것으로 알고 있습니다.

답변3

원격 시스템에 대한 루트 사용자의 비밀번호 없는 로그인을 위해 sshkey 인증이 있다고 가정하면 다음 명령을 실행할 수 있습니다.

ssh remotemysql "if [ 'ps -efww | grep mysql| grep -v grep' ]; then echo "서버가 작동 중입니다" ; else echo "서버가 다운되었습니다"; fi"

echo "server is down"을 mysql 시작 스크립트로 바꾸십시오. /etc/init.d/mysqld start라고 말하세요.

답변4

원격 서버에서 mysql이 실행 중인지 확인하기 위해 cron 작업을 사용하여 실행할 수 있는 bash 쉘 스크립트를 원합니다.

이것은 나를 전율로 가득 채운다. 왜 누군가가 이것이 서비스를 관리하는 좋은 방법이라고 생각하는지 상상할 수 없습니다. Mysql에는 Linux/Unix 시스템에서 서비스를 시작하는 표준 방법인 systemd 및 sysvinit와 통합되는 시작 스크립트가 함께 제공됩니다. Systemd에는 실패한 서비스를 다시 시작할 수 있는 기능이 내장되어 있습니다. 하지만 매우 분명한 이유로 이 옵션을 실행하는 기본 구성을 본 적이 없으며, 그럴 만한 이유가 있는 경우 inittab에서 다시 시작하여 호출할 수 있습니다. sysV 시스템. 이것이 Kmail이 수행하는 방식으로 DBMS의 사용자별 인스턴스 실행과 관련된 경우 트리거링은 cron이 아닌 사용자 세션에 의해 제어되어야 합니다.

그러나 질문의 ​​정당성을 제쳐두고, 서비스 상태를 모니터링하기 위해 mysql 또는 mysqladmin을 사용하면 데이터베이스에 연결하기 위한 자격 증명이 노출되는데, 이는 보안 관점에서 그리 좋은 생각이 아닙니다. 또한 리소스 관리에 문제가 발생합니다(최대 연결에 도달하면 서비스가 중단된 것처럼 보일 수 있음).

다음을 통해 서비스가 실행 중인지 알 수 있습니다.

  • 'ps' 출력 또는 /proc 파일 시스템에 mysqld 프로세스가 있음
  • 관련 포트의 청취 소켓(netcat을 사용하여 조사하거나 netstat의 출력에서 ​​감지할 수 있음)

관련 정보