Author: 1cswd

解决 MySQL/MariaDB 无法停止的问题

在配置这个 Azure 的新服务器时,我遇到了罕见的 MySQL 无法停止的问题,体现在通过 “sudo systemctl stop mysql.service” 无任何响应,直到达到 10 分钟的超时时间。搜遍全网也没有找到原因。

查看日志,发现卡在了 “InnoDB: Waiting for page_cleaner to finish flushing of buffer pool”,这是在等待 page_cleaner 清理缓冲池。

但是对于一个刚刚安装的 MySQL 来说,不可能存在 10 分钟还清理不完的缓存

所以经过排查,最终发现,这个问题竟然仅仅是因为我的时区设置成了东八区。

我使用了 NTP 进行时间的校正,而开机时 MySQL 比 NTP 更先启动,导致 MySQL 记录的是系统物理时间,而 NTP 启动后管理程序使用的是 NTP 校正过后的东八区时间。因此产生 MySQL 退出时要求清空八小时前 MySQL 还没有被安装时的缓存而导致这个问题。

解决问题就很简单了:

dpkg-reconfigure tzdata

将时区设置成 UTC 即可。

站点迁移至 Azure

正好因为之前 由于我的错误操作 MySQL 炸掉了,所以我将主机由洛杉矶的 CN2 线路迁移到了 Azure 的东亚香港线路,延迟直线下降,并开启了每天两次的全量备份 (说多了都是泪 人家超想哭的

反正这个故事告诉我们:备份真的很重要啊!(是我过分相信 MySQL 的稳定性了