3.4 安装数据库

domjudge 使用 MySQLMariaDB 数据库服务进行数据存储; 本节将讨论 MySQL, 你可以认为它对 MariaDB 也适用

数据库结构和权限在 sql 子文件夹的 MySQL 转储文件中; 默认的数据库名称是 domjudge; 你可以在 etc/dbpasswords.secret 文件中进行修改, 安装时将采用此文件中指定的数据库名称

数据库通过 bin/dj_setup_database 命令安装; 为此你需要一个安装并配置好的 MySQL 服务和其管理员访问权限; 执行下列命令

  1. dj_setup_database genpass
  2. dj_setup_database [-u <admin_user>] [-p <password>|-r] install

这首先会创建一个 Domjudge 数据库的凭证文件 etc/dbpasswords.secret (你可以改变程序生成的随机密码, 尽管一般操作并不需要); 接下来它会创建数据库和用户并向 domjudge 数据库插入一些默认(示例)数据; 选项 -r 将会询问你 mysql 的密码; 如果你没有指定用户, mysql 客户端将尝试从 $HOME/.my.cnf 读取凭据; dj_setup_database 命令的 uninstall 选项将会删除 domjudge 的数据库和用户(这将会删除所有数据)

domjudge 数据库包含很多数据表, 其中一些表需要在比赛开始之前手动填入数据, 详情参见 比赛数据库设置

设置复制(replication)或备份

MySQL 服务器是 Domjudge 的数据存储中心, 想一想若是 MySQL 主机出现故障或丢失数据该怎么办

一种很可靠的方法是在另一台主机上设置一个复制的 MySQL 服务, 所有的数据都将被热拷贝到这台主机中; 一旦当前主机挂掉, 可以立刻切到另一台主机; MySQl 手册 中有关于此的详细信息

另外, 你也可以在另一台主机上做一个常规的数据备份, 例如使用 mysqldump 命令或一个基于 RAID 的系统

你也可以用复制来高性能, 即通过在主服务器上完成更新(update)动作, 而将所有选择查询(select-queries)定向到一个或多个复制的从属服务器中; 但是这个功能不支持开箱即用并且需要修改 Domjudge 的源码

存储提交信息

数据库中的内容是提交的源代码的权威版本(注: 即数据库中的文件在还原比赛过程中更具有权威性); 文件系统存储是一种访问源文件和备份的简便方法, 但是只有当 web 服务对 <domjudge_submitdir>可写权的时候才能使用, 如果没有权限, 则会忽略文件系统存储; bin/save_sources2filebin/restore_sources2db 命令可以用于存储数据库中的提交表到这些文件, 或从这些文件中恢复提交表