重新启动 MySQL 时避免动态更改的参数不会丢失

如果您是 DBA,“最简单”的任务之一就是在维护时段停止/启动 MySQL,但如果您在实例中的某个时刻修改某些动态参数,即使这样简单的重启操作也可能会导致出现意想不到的情况。

这里有一个关于如何发生这种情况的简短故事:

您是一名管理一些 MySQL 服务器的 DBA。 在周五晚上,使用其中的MySQL的应用程序就在你离开之前开始出现问题; 快速检查后,您注意到应用程序正在请求更多连接,快速解决方案是增加最大连接数; 你动态地改变最大连接数,问题暂时解决了。 你准备在在下周一尝试找到根本原因并正确解决它。

但生活总会发生变化, 周一又迎来了新的挑战,你已经忘记了连接数问题……几个月后,MySQL需要重启,没想到重启之后,问题又“出乎意料”地又回来了; 现在你必须排除故障并浪费时间想知道发生了什么并修复它。

注:这不是关于如何解决问题的建议; 这个故事只介绍了重启MySQL时可能发生的事情以及如何预防它。 这也可能说明为什么进行这种“管理”是不好的。

1. pt-config-diff介绍及情况

您可能知道,Percona Toolkit 是高级命令行工具的集合,用于执行各种 MySQL、MongoDB 和系统任务,这些任务过于困难或复杂而无法手动执行。

这些工具之一是 pt-config-diff; 该工具可以显示 MySQL 配置文件和服务器变量之间的差异。

您可以使用它来比较两个配置文件(即,您希望确保新服务器具有与旧服务器相同的设置)或一个配置文件和一个正在运行的 MySQL 实例(这就是我们将在此处使用的)。

以下是导致故事中不同值的命令和输出。首先,让我们看看配置文件中的连接设置。

$ grep conn /etc/my.cnf max_connections=200