Проверка работоспособности, вызывающая сообщения об ошибках при чтении пакетов связи
Я использую следующую проверку здоровья, чтобы увидеть, открыт ли порт 3306 сервера MySQL.
bash -c 'cat < /dev/null > /dev/tcp/localhost/3306' || exit 1
Он работает нормально, но некоторое время назад MySQL начал печатать предупреждения после каждой проверки:
[Note] Got an error reading communication packets
Есть ли способ проверить, открыт ли порт, не вызывая вышеуказанное сообщение? Проверка работоспособности выполняется каждые несколько секунд, в результате чего сообщения выводятся из журнала.
0 ответов
Та же проблема здесь. Есть способ опустить заметки:
SET GLOBAL log_error_verbosity=2;
Обратите внимание, что это может скрыть нежелательные заметки для вашего случая.
Я получал те же сообщения журнала, когда использовал fsockopen, чтобы открыть сокет на порт 3306, а затем отключить его без отправки каких-либо данных.
Поскольку MySQL ожидает получить некоторые пакеты данных после открытия соединения, если они не предоставлены, он выдает сообщение "[Примечание] Получена ошибка при чтении пакетов связи" в журнал ошибок.
Вместо открытия и закрытия TCP-сокета используйте mysqladmin ping с анонимным пользователем, чтобы проверить, жив ли MySQL. Его дополнительное преимущество состоит в том, что он проверяет, действительно ли процесс, прослушивающий порт, является сервером MySQL.
$ mysqladmin ping -h running_host -u anonymous --password=pass &>/dev/null ; echo $?
0
$ mysqladmin ping -h not_running_host -u anonymous --password=pass &>/dev/null ; echo $?
1
Из документации: "Статус возврата от mysqladmin равен 0, если сервер запущен, и 1, если это не так. Это 0 даже в случае ошибки, такой как доступ запрещен, потому что это означает, что сервер запущен, но отказал в соединении., который отличается от того, что сервер не работает ".
Хотя указывать имя пользователя и пароль необязательно, это может привести к появлению сообщений "[Примечание] Доступ запрещен для пользователя 'user'@'host' (using password: NO)" в журнале ошибок. В качестве обходного пути создайте анонимного пользователя в MySQL без грантов для какой-либо базы данных.
Вышеупомянутая команда отбрасывает весь вывод и вместо этого просто отображает код выхода.