【MySQL Router】使用 systemd 管理 MySQL Router

使用 systemd 管理 MySQL Router

在之前的文章 【 InnoDB Cluster 】安装部署 MySQL Router 中介绍了如何安装、部署 MySQL Router ,当时遇到一个问题,MySQL Router 部署好后无法使用 systemd 来启动,会报如下错误:
图1 systemd 启动 mysqlrouter 报错
图1 systemd 启动 mysqlrouter 报错

当时我以为是 systemd 版本过低的问题,升级了还是报错,就怀疑是操作系统内核太低的问题。今天验证了一下,其实是引导 MySQL Router 所用的操作系统用户及其权限的问题。后面我在 MySQL Router 的文档里找到了相关介绍——配置文件选项 user 。所以,有时间的话,还是应先看书学习理论(对于 MySQL 也可说是先看说明书),再实践操作。

排错过程

升级操作系统内核

使用 Yum 仓库包升级操作系统内核至 kernel-3.10.0-1160.80.1.el7.x86_64 版本,并删除旧的内核和 RPM 包,最后重启。

yum upgrade -y kernel*
#查看已安装的内核 RPM 包
rpm -qa|grep kernel
#移除旧的内核
kernel-install remove 旧的内核名称
rpm -e 旧的内核名称

然后重启。如想了解详细信息,请关注我后面的文章。

图2 最终效果
最终效果
重启后发现还是报错,证明不是它的问题。

未修改相关文件的属主,直接用 mysqlrouter 重新引导

然后我立即想到是引导时使用的操作系统账户的问题,因为当时提示了不能使用 superuser root 来引导,如果非要这么做,请指定--user=root,然后我当时就这么做了。

但重新引导后查看systemctl status mysqlrouter仍然报同样的错误,这让我很困惑,所以怀疑到打开文件数的 limit 上去了。直到使用journalctl -xe查看报错消息(当时并没有想到这),才确定是用户权限问题。

journalctl 报错
然后我试着修改了一些文件的属主为mysqlrouter:myqlrouter,再次journalctl -xe发现报错不同了。
在这里插入图片描述
搜索相关报错信息并没有找到明确的解决办法,但发现有几个网页里最终发现都是权限、属主问题,再次印证了我的想法。

配置操作系统 limit 相关参数

看到报错中有 start-limit ,怀疑是配置操作系统 limit 相关参数中 openfiles 导致的。

ulimit -n -u
ulimit -n 1024000

ulimit -n -u

vim /etc/security/limits.conf
#末尾添加
# “-”表示soft和hard都配置为相同值
*       -       nofile  1024000
*       -       nproc   1024000

limits.conf

结果还是不行,也不是它的问题。

用户及其权限问题

查询包含 mysqlrouter 关键字的文件:

find / -name mysqlrouter

find
分别查看各文件及文件夹的属主、权限后,发现属主有些为 mysqlrouter ,有些为 root ,而我并没有手动创建 mysqlrouter 账户,故应该是安装它时自动创建的。

那么我们看一下服务程序是否有问题,这里是/usr/lib/systemd/system/mysqlrouter.service

vim /usr/lib/systemd/system/mysqlrouter.service

发现默认是 mysqlrouter,问题原因找到了!

注意
此处注释中的 root 是我后加的,而非原来就有的。

默认是 mysqlrouter

此时,有两种解决方案:

  1. 重新使用选项--user=mysqlrouter引导 MySQL Router 。这是推荐的方案。
    重新引导前,必须先将 mysqlrouter 相关的文件属主修改为 mysqlrouter 才行。建议使用上面的find命令查找出的结果,结合经验和文件名称、作用,对怀疑的文件或文件夹逐个尝试修改属主。

    mysqlrouter --bootstrap ic_admin@ic-source:3306 --account=myRouter1 --user=mysqlrouter
    

    使用 mysqlrouter 重新引导
    然后修改/etc/mysqlrouter目录的属主。

    chown -R mysqlrouter:mysqlrouter /etc/mysqlrouter
    

    启动 mysqlrouter

  2. mysqlrouter 替换为 root ,改完保存后执行systemctl daemon-reload,再使用systemctl start mysqlrouter即可成功启动。

    vim /usr/lib/systemd/system/mysqlrouter.service
    

    vim mysqlrouter.service 改完mysqlrouter.service 后重载、启动 mysqlrouter

结语

造成此问题的原因是我不听劝强制使用 root 引导 MySQL Router ,但也是因为我看到有提示信息显示支持--user=root的方式强制用 root 引导才做的。而提示信息和报错信息并没有说明这么做的隐患和错在哪里,mysqlrouter -?也找不到相应信息。

解决问题后,我想找到问题产生的原因,于是在 MySQL 官网的 《MySQL Router 8.0》文档三次跳转页面才找到了相关信息的!这也是我觉得 MySQL 官网文档难于学习的一点——写的太乱,还有就是措辞偏外国人,文化习惯差异导致不利于快速学习。他们可以将一个知识点的相关内容放在多个章节里,甚至多个文档里,更可气的是标题还都差不多,很多只有时态、词性方面的差异,内容有些也有很高的重复率,关键差异信息只有一点,而这恰恰是你需要的呀!这就很烦!

我时间紧张,近期任务是快速学习搭建 MySQL InnoDB ClusterSet ,没那么多时间去先看文档再操作。这在如今的社会很正常吧,你买来一个诸如手机的电子产品,纵使它说明再全,你一开始也不会去先看说明再去摆弄,而是在遇到摆弄不明白的地方时才想着去看说明书,查资料。IT 技术的官方文档也是如此,本质上就是说明书,而 MySQL 这样的产品本质上就是个工具,很多人的需求只是会用就行,不关心内部设计细节,只有 DBA 这类人员才需要关注更多。

生活就是这样,任何事情只要肯琢磨,门道都挺深的。职场工作也分两条发展路线,一种是 ,即精益求精的资深专家路线;一种是 ,即博学多才的全面型人才。是不是感觉架构里的 Scale-UpScale-Out 很像?两者也都有缺陷:专家路线容易把路子走窄了,尤其是所学的知识将要被淘汰了时,专家的待遇将直线下滑;全面型人才容易样样都通样样不精,中国人叫他们“一瓶子不满半瓶子晃荡”、“鼯鼠”,美国人叫他们“Jack of all trades”。在当今社会分工如此细化的社会,一般来讲,做专家的待遇要优于做全能型人才,至少票子上的表现是如此;而如果脱离社会或遇到荒野迷路、战争动荡、末世求生,全能型人才的优势将是巨大的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独上西楼影三人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值