我遇到了一个奇怪的情况,通过apt-get安装一个包导致运行(production!)mysqld实例在一些16.04 Linux服务器上重新启动。
我们在四台服务器上运行sudo apt-get install -y iotop 。 在三台服务器上,安装失败,说明[ERROR] unknown variable 'rpl_semi_sync_slave_enabled=1' 。 这个variables只在这三台服务器上设置。 在这一点上,我们正在运行的MySQL服务closures!
第四台服务器没有相同的mysqlconfiguration。 值得注意的是,variablesrpl_semi_sync_slave_enabled不存在。 Apt能够安装iotop但有趣的是我们的mysql服务没有重启或closures。
所以看起来有些软件包在安装失败的情况下会导致与安装相似的正在运行的进程被终止。 这让我非常担心在我们的生产服务器上安装进一步的软件包,这些服务器运行着我们不想每次都重启的进程。 我怎么能知道一个软件包安装是否会重新启动这些进程,为什么它首先发生?
之后的软件包安装失败,或者因为失败而不可能。 此外, [ERROR] unknown variable 'rpl_semi_sync_slave_enabled = 1; 在启动过程中,似乎不是apt的错误,而是MySQL的错误。
MySQL在所有服务器上重新启动是完全可能的,但是只能在一个服务器上启动,导致安装失败 – 反之亦然。
为什么要安装iotop导致MySQL重新启动? 在发行版中(比如你的Ubuntu),我们有这个叫做依赖树的东西:软件包可以依赖于依赖于其他软件包的其他软件包,而其他软件包可以共同使用。 有时一个软件包依赖于另一个软件包的某个版本,导致已经安装的软件包在安装时被升级。
在这种情况下, iotop依赖于python 。 然后,例如python-mysqldb依赖于依赖于mysql-common python和libmysqlclient18 …你可能已经明白了为什么MySQL可能已经和看似无关的iotop一起升级了。
如何知道在apt-get install过程中安装和升级哪些软件包?
--assume-yes,--assume-yes自动是提示。 假设
yes作为所有提示的答案并且非交互式地运行。 如果发生不合需要的情况,例如更换一个包装或删除一个必需的包,则apt-get将会中止。
如果你不确定会发生什么,请不要使用-y 。 默认情况下,您将获得所有安装,升级甚至删除的软件包列表。 你自愿select忽略这一切。