我遇到了一个奇怪的情况,通过apt-get
导致运行(生产!)mysqld 实例在某些 16.04 Linux 服务器上重新启动安装包。
我们sudo apt-get install -y iotop
在四台服务器上运行。在其中三台服务器上,安装失败说明[ERROR] unknown variable 'rpl_semi_sync_slave_enabled=1'
。此变量仅在这三台服务器上设置。此时我们正在运行的mysql服务关闭!
第四台服务器没有相同的 mysql 配置。值得注意的是,该变量rpl_semi_sync_slave_enabled
不存在。Apt 能够安装iotop
,但有趣的是我们的 mysql 服务没有重新启动或关闭。
因此,似乎某些软件包在安装失败时会终止似乎与安装无关的正在运行的进程!这让我非常警惕在我们的生产服务器上安装更多的包,这些包运行我们不喜欢随时重新启动的进程。我如何知道软件包安装是否会重新启动这些进程以及为什么会发生这种情况?
软件包在之后或由于失败而无法安装任何东西的可能性很小
kill
- 相关与否。此外,在启动过程中,[ERROR] unknown variable 'rpl_semi_sync_slave_enabled = 1;
似乎不是 MySQL 的错误apt
,而是 MySQL 的错误。MySQL 很可能在所有服务器上都重新启动,但仅在一个服务器上启动失败,导致安装失败——反之亦然。
为什么安装
iotop
会导致 MySQL 重新启动?在发行版(比如你的 Ubuntu)中,我们有一个叫做依赖树的东西:包可以依赖于其他包,这些包依赖于其他包,其他包可以相互需要。有时一个包依赖于另一个包的某个版本,导致已经安装的包在安装时被升级。在这种情况下,
iotop
取决于python
。然后,例如,python-mysqldb
取决于python
,libmysqlclient18
这取决于mysql-common
……您可能了解了为什么 MySQL 可能与看似无关iotop
的 .如何知道在 期间安装和升级了哪些软件包
apt-get install
?-y
如果您不确定会发生什么,请不要使用。默认情况下,您将获得所有已安装、升级甚至删除的软件包的列表。你自愿选择忽略这一切。