jumpServer用mysql代替默认的mariadb数据库

warning: 这篇文章距离上次修改已过195天,其中的内容可能已经有所变动。

jumpServer用mysql代替默认的mariadb数据库

一、前言

学艺不精,玩不转mariadb---order by排序好慢中提到用jumpServer一键安装脚本安装完后,默认会安装mariadb数据库。想将其他项目用到的mysql数据库都迁移到mariadb里统一管理,无奈水平不行,解决不了mariadb排序查询慢的问题。最后只能把jumpServer的默认数据库换为mysql来解决,下面就介绍切换的过程。

二、分析操作

==众所周知==,jumpServer服务使用的是jmsctl.sh来控制启动和停止的。使用docker-compose容器编排,启动时,会调用compose里的yml文件,来运行各种容器服务。当你打开/opt/jumpserver-installer-v3.8.0/compose/文件夹时,会发现里面一堆编排文件,其中mysql.yml和mariadb.yml两个数据库的编排都存在。是不是瞬间觉得应该很简单,直接找到/opt/jumpserver/config/config.txt配置里面的变量就可以切换到mysql了?

image-20231026145624782

别高兴太早,打开config.txt后,你就会傻眼,上面涉及sql配置的就那么几行。其中DB_HOST直接就写上了mysql,这怎么玩?查了一遍官网,也没看到有用的消息。当然,如果直接自己起一个mysql容器,再到配置文件里按官方说的将配置信息改成自建的容器信息,就可以了。

################################# MySQL 配置 ##################################
# 外置 MySQL 需要输入正确的 MySQL 信息, 内置 MySQL 系统会自动处理
#
DB_HOST=mysql
DB_PORT=3306
DB_USER=root
DB_PASSWORD=xxxTYtM23Y2YS04OWY11
DB_NAME=jumpserver

# 如果外置 MySQL 需要开启 TLS/SSL 连接, 参考 https://docs.jumpserver.org/zh/v3/installation/security_setup/mysql_ssl/
#
# DB_USE_SSL=true

先备份jumpserver数据库,然后还原到自建的sql容器里。用sqldump备份,mysql还原,具体指令如下:

# backup
mysqldump -h 192.168.1.222 -P 3336 -ubackup -pNDBkMjRkNTYtMjYxx  -q --lock-all-tables --flush-logs -E -R --triggers -B jumpserver | gzip > bak.gz

# restore
gunzip < bak.gz | mysql -h 192.168.1.222 -P 33361 -u root jumpserver -p

还原后测试没什么问题,docker ps看到容器mariadb还是会自动运行着。这不科学啊,如果用了外部数据库,应该会自动停才对。还好,通过手动停掉mariadb容器,再jmsctl stop,然后jmsctl start后就正常了。

image-20231026172705312

三、再分析

虽然使用外部数据库搞定了,但是感觉应该还有其它方式解决的,既然遇到了,就索性再深入探索一下。前面有提到compose文件夹里一堆yml容器编排文件,也就是应该可以指定哪些容器启用,哪些不启用的,但是在config.txt里又没找到相关配置。.

到github找Installer源码, 顺着jmsctl.sh一路找啊找。从/opt/jumpserver-installer-v3.8.0/jmsctl.sh摸到scripts/utils.sh ,这才知道check_mysql_data的存在,看到下面的代码就恍然大悟了。

25b0b0d036805deca581f06b34593c2

if [[ -d "${volume_dir}/mysql/data/${db_name}" ]]; then 这里是检测目录是否存在,是的话就返回1,表示使用mysql,也就是需要手动去创建mysql路径,存在的话就会自动走mysql编排。其它容器编排应该也差不多这样,具体就不再去分析了。

评论已关闭