因公司搬迁需求,新环境都使用docker容器进行快速部署,所以需要把老服务器上的禅道迁移到新服务器docker中。
禅道官网介绍迁移需在软件同版本下进行:官网视频地址(Linux服务器迁移到Linux服务器)
操作如下,比较简单:
备份旧服务器:
/opt/zbox/app/zentao/www/data/upload/1 路径下所有文件附件,
/opt/zbox/data/mysql/zentao 路径下所有数据库文件,
移动覆盖到新服务器同链接下即可。
然而,公司禅道使用的外部数据库,且路径下根本就没有MySQL目录及相关数据;且禅道开源版docker镜像最低版本:9.6.3,不适用官方的方法,故此有下面的方式进行迁移。
工具准备:
Notepad++(或者其它可以全量查找替换的编辑工具),navicat(或者其它数据库连接工具也行)
先在新服务器中安装禅道(里面最好不要操作添加额外的数据):docker安装最新版本禅道
然后备份旧禅道、新禅道(用来对比表的更改)zentao数据库中的数据,可能会出现数据库连接工具连接报错:1130-host ... is not allowed to connect to this MariaDB server 这是因为数据库设置了不允许外部进行访问,使用下面的方法进去修改数据即可。
# MySQL环境连接数据库
mysql -u root -p
# docker环境连接数据库
/opt/zbox/bin/mysql -u root -p
# 输入密码连接后,查看mysql库
use mysql;
# 查看user数据表对应登陆用户的host范围
select Host, User,Password from user;
# 更改需要登陆的用户host值为%(大家自行对应自己数据库结构和需求进行更改,我改的是root用户的)
update user set Host='%' where User='root' and Host='localhost';
# 然后重启MySQL服务
(独立MySQL使用下面命令即可)
/etc/init.d/mysqld restart
(使用禅道的数据库使用下面命令)
/opt/zbox/zbox restart
做下面的操作前一定要先备份、先备份、先备份:新、旧禅道的数据库,防止迁移过程中数据问题可以随时使用新数据库数据覆盖。
接下来对比旧、新两个版本数据库对应的字段有哪些更改。
下面所有操作都是大同小异的,复制出原禅道数据中的SQL,使用编辑工具搜索INSERT INTO `表名`替换成我写的对应数据库指定字段插入语句,然后下面如果有设置缺失值的SQL,先把缺失的字段改为允许为null,然后运行替换好的SQL,运行设置缺失字段SQL,改回缺失的字段为不允许为null即可。
以Notepad++工具、`zt_doc`数据库为例,操作都是如下:
1、替换SQL插入语句:
2、把缺失的字段改为允许为null(