备份和恢复

有关备份和还原脚本的基本信息,请阅读 备份和恢复 一章。

在Docker下运行OTOBO的考量

标准脚本 backup.plrestore.pl 也可用于在 Docker 下运行的 OTOBO。不过,必须考虑一些 Docker 特有的限制。

首先,我们需要确保备份文件不是在 Docker 容器内部的文件系统中创建的。因为在这种情况下,创建的文件会在容器停止时丢失。这意味着备份目录必须位于卷中。在本手册中,我们只考虑最简单的情况,即备份目录是 Docker 主机上的本地目录。备份目录在容器中的位置可以任意选择。在本例中,我们选择本地目录 otobo_backup 作为主机上的位置,而 /otobo_backup 作为容器中的位置。

其次,Docker 容器中的命令通常以用户 otobo 的身份运行,用户 ID 1000,组 ID 1000。必须确保该用户可以在备份目录中写入内容。

首先我们需要创建卷。

# create the backup directory on the host
docker_admin>mkdir otobo_backup

# give the backup dir to the user otobo, elevated privs might be needed for that
docker_admin>chown 1000:1000 otobo_backup

# create the Docker volume
docker_admin>docker volume create --name otobo_backup --opt type=none --opt device=$PWD/otobo_backup --opt o=bind

# inspect the volume out of curiosity
docker_admin>docker volume inspect otobo_backup

为了创建备份,我们需要一个运行的数据库和卷``otobo_opt_otobo`` 以及 otobo_backup,这意味着网站服务器和Daemon可能,不是必须,被停掉。

  # create a backup
  docker_admin>docker run -it --rm --volume otobo_opt_otobo:/opt/otobo --volume otobo_backup:/otobo_backup --network otobo_default rotheross/otobo:latest-10_0 scripts/backup.pl --extra-dump-options="--single-transaction" -d /otobo_backup

  # check the backup file
  docker_admin>tree otobo_backup

.. note::

  --extra-dump-options="--single-transaction" prevents the database tables from being locked, so OTOBO can still be used during the backup.

Note

恢复数据库时,请确认数据库``otobo`` 存在并且不包含表单。

要删除现有的 otobo 数据库并创建一个新数据库,可以使用以下命令。首先,你必须连接到 db 容器的 MySQL CLI。

一旦连接到 MySQL 服务器,就可以删除并重新创建 otobo 数据库。

mysql@4f7783595190:/$>DROP DATABASE otobo;
mysql@4f7783595190:/$>CREATE DATABASE otobo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysql@4f7783595190:/$>GRANT ALL PRIVILEGES ON otobo.* TO 'otobo'@'%';

为了把备份文件恢复回来,我们需要确认恢复哪个备份文件。占位符``<TIMESTAMP>`` 就如同``2020-09-07_09-38``的标记一样。

# restore a backup
docker_admin>docker run -it --rm --volume otobo_opt_otobo:/opt/otobo --volume otobo_backup:/otobo_backup --network otobo_default rotheross/otobo:latest-10_0 scripts/restore.pl -d /opt/otobo -b /otobo_backup/<TIMESTAMP>