吃自己的狗粮 – 在MariaDB上运行JIRA
几周前,我们宣布将把 托管的 JIRA 实例迁移到自托管实例。主要原因是我们在托管的 JIRA 实例中达到了 2000 个活跃用户,这是它支持的上限。显然,我们希望允许更多人积极参与报告和评论 MariaDB 的 bug 和功能。这就是我们建立自己的实例的原因,现在它已在 jira.mariadb.org 上线并运行。
感谢 Atlassian,JIRA 背后的公司,在过去三年中为 MariaDB 项目提供了托管的 JIRA 实例!它为我们提供了很好的服务!同时,我们当然很高兴 MariaDB 项目已经超出了托管实例的规模。
尽管有些安装已经使用 MariaDB Server 作为 JIRA 的数据库,但 Atlassian 尚未正式支持 MariaDB 作为 JIRA 的数据库。对 JIRA 官方支持 MariaDB Server 的需求也在不断增长。您可以在 Atlassian 自己的 JIRA 中查看有关此事的请求。可以在此处找到“支持 MariaDB”的请求。如果您认为这很重要,可以对该问题进行投票和评论,以引起更多关注。
对于 MariaDB 开发项目本身的跟踪,我们当然希望使用 MariaDB 作为 JIRA 下层的数据库。
jira.mariadb.org 已经运行了一周,使用 MariaDB Server 10.1.12 作为数据库服务器,MariaDB 的 Java Connector 作为数据库驱动程序。到目前为止,设置非常成功,也就是说,我们没有遇到任何问题。下面是关于如何使用 MariaDB 作为 JIRA 数据库服务器的一些说明。
首先安装 MariaDB。如果您使用主要的 Linux 发行版之一,MariaDB Repository Tool 将帮助您安装最新版本的 MariaDB。它可以在此处找到。
按照安装说明开始安装 JIRA。
- 按照说明在服务器上安装 JIRA 可执行文件,但暂时不要在浏览器中打开设置向导。
- 下载 MySQL Connector/J。在设置过程中您将暂时需要它。撰写本文时,我使用以下命令获取它并将其放在正确的位置
wget https://dev.mysqlserver.cn/get/Downloads/Connector-J/mysql-connector-java-5.1.37.tar.gz tar -xvzf mysql-connector-java-5.1.37.tar.gz sudo cp mysql-connector-java-5.1.37/mysql-connector-java-5.1.37-bin.jar /opt/atlassian/jira/lib/
- 现在在浏览器中继续使用 JIRA 的设置向导,通常此时可以在 http://localhost:8080 找到它。在第一页上,确保选择选项 我将自行设置(用于生产环境)。接下来您将看到 为 JIRA 配置数据库 屏幕。进行以下选择
Database setup: My Own Database Database type: MySQL Hostname: localhost Database: [name of database] Username: [username] Password: [password]
点击 测试连接 确认其正常工作,然后点击下一步。点击下一步后,数据库配置文件将在 JIRA 的数据目录中创建。此时不要在向导中继续操作,因为现在您需要切换到 MariaDB 的 Java Connector。
- 现在是安装 MariaDB Java Connector 的时候了。您可以从 https://mariadb.com/my_portal/download/java-client 获取 jar 文件。请注意,您需要登录。我使用了连接器版本 1.3.5,但现在 1.3.6 可用。
- 将连接器放入 JIRA 的驱动程序/库目录中,默认为 /opt/atlassian/jira/lib/
- 修改 JIRA 数据目录中的 dbconfig.xml 文件,默认为 /var/atlassian/application-data/jira。更新 driver-class 以引用 MariaDB Connector
<driver-class>org.mariadb.jdbc.Driver</driver-class> - 重启 JIRA,如果您像我一样使用 Debian/Ubuntu,命令是
sudo service jira stop sudo service jira start
- 现在您可以在浏览器中继续使用设置向导,到达结尾时,您应该会看到 JIRA 正在使用 MariaDB Java 连接器在 MariaDB 上运行。
MariaDB JIRA 对所有人开放,活跃用户数量已超过 2000。这意味着这是一个非常活跃的 JIRA 实例,一直在进行大量工作。我们将定期更新 JIRA 本身,也会更新 MariaDB 和连接器,以确保一切在未来的版本中也能顺利运行。我希望这能鼓励其他人也在 MariaDB 上运行 JIRA。
也许 MariaDB 的参与有助于修复这个 bug
https://jira.atlassian.com/browse/JRA-36135
也很想看看你的 my.cnf
my.cnf 基本保持默认。唯一的更改是 datadir 指向非默认位置,因为我们想将数据文件放在单独的分区上,然后以下行被注释掉了
log_bin
log_bin_index
slow_query_log_file
long_query_time
log_slow_verbosity
感谢您的文章。我正在考虑完全按照本文所述进行操作。我们的开发人员有兴趣为 QA 和 bug 跟踪建立一个任务关键型的 JIRA 实例。这意味着将有 1000 个活跃用户和(最终)数百万个 bug。
您提到有 2000 个 JIRA 活跃用户。我想知道您是否可以分享有关您的 JIRA 实例的更多基础设施详细信息。生产数据库的磁盘空间有多大?您使用什么来备份数据库(xtradump, mysqldump, SAN snapshot)?
Rick,
我尽量给你一些规格细节
1) 数据库占用的磁盘空间如下
sudo du -sh jiradb
558M jiradb
2a) 我们使用 XtraBackup 进行数据库备份,并通过 rsync 将备份文件同步到远程服务器
2b) 我们另外备份 Jira 的数据目录,其中包含附件和头像目录。我们只需通过 FTP 将其复制到另一台服务器
3) 服务器本身配置有 Intel Xeon E5 E5-1620v2 CPU,2TB 磁盘和 64GB RAM。
如果您有其他问题,请告诉我。
Jira 与 MariaDB 集群作为数据库后端几乎完美配合,我们之前使用的是 mysql 连接器,目前正在我们的测试站点测试 mariadb 连接器。我们发现的唯一问题是,在繁忙的日子里,与数据库会出现一些通信错误:“从服务器成功接收到的最后一个数据包是在 296,877 毫秒前。成功发送到服务器的最后一个数据包是在 1 毫秒前”
然而,与 mysql 的通信没有中断。通常事务会重新启动,除了传入的邮件监听器。这些会停止并需要手动重启。以前我们见过更多此类错误,但大部分通过更新到新的 mysql 连接器得到了解决。因此我们希望 mariadb 连接器也能解决这些问题。
这些与 mariadb 无关。这些与 haproxy 客户端/服务器超时设置有关… 现在一切运行良好
Connector/J 新链接
https://dev.mysqlserver.cn/get/Downloads/Connector-J/mysql-connector-java-5.1.39.tar.gz
使用 mariadb 驱动程序,我遇到了很多可怕的错误
unexpected end of stream, read 0 bytes from 4)
这些与 mariadb 无关。这些与 haproxy 客户端/服务器超时设置有关… 现在一切运行良好
我们的环境也有类似问题。您采取了什么措施来解决您的问题?
你好,
感谢这篇非常有用的文章。
我有一个问题,对你们这些数据库专家来说可能听起来很傻…
当我启动 Jira 提供的 config.sh 脚本时,如果我以非 root 用户身份运行它,它能正常工作,这意味着使用 sudo 也会失败。返回的错误是
IO Exception occurred while trying to load settings.
Unknown database type name org.mariadb.jdbc.Driver
我检查了所有能找到的配置文件,但连一点线索都没有…
希望您能帮我解决这个问题,
谢谢!
听起来您还没有将 mariadb-java-client-1.4.6.jar 文件复制到正确的目录。
它应该在 $JIRA_HOME//lib/ 中
谢谢您的回复,Daniel。
文件在那里,这就是为什么在不使用 sudo 启动脚本时它可以工作的原因,但是一旦使用 sudo 或直接使用 root,就会抛出之前提到的错误。root 用户和“普通”用户之间有什么区别吗?有什么是“普通”用户可以做而 root 不能做的?
可能是 $JIRA_HOME 环境变量设置不在那里??
也检查过了,sudo 环境和 root 环境都有。
尝试将 JIRA_HOME 目录中的所有者更改为正确的 jira 用户.. 可能有一些东西,比如 mariadb 驱动程序,只有 root 用户可读
你是不是漏掉了什么?
下载的 mariadb 连接器 *.jar 文件名为
“mariadb-java-client-.jar”
而在 dbconfig.xml 中你只指定了
“org.mariadb.jdbc.Driver”
那么 JIRA 如何在 jdbc 驱动程序和实际资产(“mariadb-java-client-.jar”)的名称之间进行映射?
难道不应该在某个地方指定资产的名称吗?
所以这对 JIRA 来说完美工作,但对 Confluence 来说就不太行了。
我执行了添加 jdbc 连接器驱动程序和更改要使用的 jdbc 驱动程序设置的所有等效步骤,但 Confluence 只显示白屏死亡。
划掉那句,它确实与 Confluence 一起工作。存在一个不同的问题,我不太确定是什么。
我重新运行了最新的 Confluence 安装程序,我的 Confluence 就回来了。然后我将所有内容切换到 mariadb,它就工作了。
我确实启动了 mysql 和 mysqld 服务,不确定这是否有影响。
您做了什么让它也能与 Confluence 一起工作?
据我所知,Confluence 没有 dbconfig.xml。我一直在尝试使用 jdbc:mysql: 和 jdbc:mariadb: 连接字符串(在 lib 目录中有 mariadb 客户端),连接测试成功,但在实际创建 schema 时却得到 500 错误。
非常感谢这篇文章,Jira 与 MariaDB 配合得很好。
同样的设置对 Confluence 也适用吗,这是我的下一个目标
参见前面的评论,是的,它确实与 Confluence 一起工作。
我已经将我们的 Jira 实例连接到 MariaDB 数据库,并遇到了这个错误
Caused by: java.sql.SQLException: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.
有什么办法解决这个问题吗?
谢谢,
Sarah
Atlassian 网站上对此问题有文档记录,他们建议将 binlog 格式更改为 row。 https://confluence.atlassian.com/jirakb/mysql-binary-logging-problem-with-innodb-when-creating-a-workflow-196116927.html
查看 https://mariadb.com/kb/en/mariadb/binary-log-formats/ 以阅读更多关于二进制日志格式及其更改的信息。
谢谢!