healthcheck导致“读取通信包时出错”消息

r8uurelv  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(430)

我使用下面的healthcheck检查mysql服务器的3306端口是否打开。

bash -c 'cat < /dev/null > /dev/tcp/localhost/3306' || exit 1

它工作正常,但不久前mysql开始在每次检查后打印警告:

[Note] Got an error reading communication packets

有没有办法在不触发上述消息的情况下检查端口是否打开?每隔几秒执行一次healthcheck,导致消息向日志输出发送垃圾邮件。

qnyhuwrf

qnyhuwrf1#

当我使用fsockopen打开端口3306的一个套接字,然后断开它的连接而不发送任何数据时,我得到了相同的日志消息。
由于mysql希望在连接打开后接收一些数据包,如果没有提供,它会向错误日志发出“[注意]读取通信包时出错”。
使用mysqladmin ping和匿名用户检查mysql是否活动,而不是打开和关闭tcp套接字。它的另一个优点是,它检查在端口上侦听的进程是否实际上是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'(使用密码:否)”消息。作为一种解决方法,在mysql中创建一个匿名用户,在任何数据库上都没有授权。
上面的命令丢弃所有输出,而只是回显退出代码。

ig9co6j1

ig9co6j12#

同样的问题。有一种省略注解的方法:

SET GLOBAL log_error_verbosity=2;

请注意,它可能会为您的案例隐藏不需要的注解。

相关问题