【MySQL Router】使用 systemd 管理 MySQL Router
创始人
2024-03-14 12:15:54
0次

使用 systemd 管理 MySQL Router

文章目录

  • 使用 systemd 管理 MySQL Router
    • 排错过程
      • 升级操作系统内核
      • 未修改相关文件的属主,直接用 mysqlrouter 重新引导
      • 配置操作系统 limit 相关参数
      • 用户及其权限问题
    • 结语

在之前的文章 【 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-Up、Scale-Out 很像?两者也都有缺陷:专家路线容易把路子走窄了,尤其是所学的知识将要被淘汰了时,专家的待遇将直线下滑;全面型人才容易样样都通样样不精,中国人叫他们“一瓶子不满半瓶子晃荡”、“鼯鼠”,美国人叫他们“Jack of all trades”。在当今社会分工如此细化的社会,一般来讲,做专家的待遇要优于做全能型人才,至少票子上的表现是如此;而如果脱离社会或遇到荒野迷路、战争动荡、末世求生,全能型人才的优势将是巨大的。

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...