首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用系统升级-安全/重新启动安全的多个MySQL实例?

使用系统升级-安全/重新启动安全的多个MySQL实例?
EN

Database Administration用户
提问于 2021-11-04 09:44:14
回答 2查看 300关注 0票数 1

我们使用几个实例在Debian下运行MySQL 5.7.36。

为此,我们使用https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html中描述的Systemd的特性来使用argv0。("@“-如果可执行路径以"@”为前缀,则第二个指定的令牌将作为"argv0“传递到执行的进程(而不是实际的文件名),然后是指定的进一步参数。-见:https://manpages.debian.org/testing/systemd/systemd.service.5.en.html)。

/etc/mysql/mysql.conf.d/mysqld.cnf:

代码语言:javascript
运行
复制
[mysqld@replica01]
datadir=/var/lib/mysql-replica01
socket=/var/lib/mysql-replica01/mysql.sock
port=3307
log-error=/var/log/mysql/replica01.log

[mysqld@replica02]
datadir=/var/lib/mysql-replica02
socket=/var/lib/mysql-replica02/mysql.sock
port=3308
log-error=/var/log/mysql/replica02.log

管理实例:

代码语言:javascript
运行
复制
systemctl start mysql@replica01
systemctl start mysql@replica02

启用自动启动:

代码语言:javascript
运行
复制
systemctl enable mysql@replica01
systemctl enable mysql@replica02

我们已经禁用了通用MySQL服务的默认自动启动:

代码语言:javascript
运行
复制
systemctl disable mysql

但是,当通过包管理升级mysql-服务器时,我们总是必须首先手动停止每个实例,如文档中所述:

在Debian平台上,用于MySQL卸载的打包脚本目前无法处理mysqld@实例。在删除或升级包之前,必须先手动停止任何额外的实例。

现在,让我们检查服务的自动启动选项"systemctl list-unit-files grep mysql":

代码语言:javascript
运行
复制
mysql.service                                     disabled
mysql@.service                                    indirect

如果我们现在执行禁用mysql.service的升级,则不会尝试在包升级期间停止或重新启动服务。

这样做的目的是创建一个包装器,通过“systemctl编辑mysql”覆盖普通的mysql.service,这将触发启动、停止、重新启动和解决升级问题的单个实例mysql@mysql.service 01和mysql@mysql.service 02。

,这是可能的吗?有没有人举一个例子?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2021-11-05 12:00:55

感谢丹布莱克的回答让我走上正轨。基于文档和代码,我现在构建了以下设计,该设计似乎有效:

系统edit编辑mysql

代码语言:javascript
运行
复制
[Unit]
Description=MySQL Wrapper
Wants=mysql@replica01.service
Wants=mysql@replica02.service

[Service]
Restart=no
Type=oneshot
ExecStartPre=
RemainAfterExit=true
ExecStart=
ExecStart=/bin/true

对于每个实例: systemctl编辑mysql@replica02 01 && systemctl编辑mysql@replica02 02

代码语言:javascript
运行
复制
[Unit]
PartOf=mysql.service
After=mysql.service
票数 1
EN

Database Administration用户

发布于 2021-11-04 22:31:22

我在MariaDB (MDEV 23321)上也遇到了同样的麻烦。

Debian系统封装不利于打包独立的模板实例系统服务。但是,在你所考虑的领域,它确实提供了一个丑陋的解决方案。

我建议在你的systemctl edit mysql.service

代码语言:javascript
运行
复制
[Unit]
PartOf=mysql@replica01
PartOf=mysql@replica01

[Service]
Type=oneshot
ExecStart=
ExecStart=/usr/bin/systemctl disable mysql.service

需要ExecStart= (空白)重新设置列表。

这应该足以触发重新启动,并防止mysql.service启动一个新实例,不会失败,并且不会在列表实例中出现误导。

参考文献:dh_分期付款系统代码

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/302112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档