本文档将指导您如何将 Discuz! X3.4 应用程序数据迁移至Discuz! Q 应用程序,通过该操作可以将 Discuz! X3.4中的用户、版块、普通主题、回复、附件图片等数据转换至 Discuz! Q。

WARNING

  • 在转换程序开始前,为确保因操作失误,导致数据丢失等问题,请提前做好数据备份。
  • 在转换程序开始前,请保证 Discuz! Q 数据库为全新安装,或者只通过本操作提供的转换程序转换过数据。否则将可能会导致数据丢失,或转换错误。
  • 转换程序工具需要在 PHP 7.2.5 及以上环境运行,请确保已配置该环境。建议在部署的 Discuz! Q 站点运行。本文档以在部署的 Discuz! Q 的服务器上进行转化为例。

前提条件
已部署 Discuz! Q。
具备 PHP 7.2.5 及以上环境的主机。
操作步骤

步骤一:下载并解压转化工具

您可以 单击此处 (opens new window)下载转化工具至 已部署的 Discuz! Q 的服务器上。

TIP

如果您是 Linux 服务器,您可以在服务器的终端中,通过该命令进行下载 wget -c https://discuzq-docs-1258344699.cos.ap-guangzhou.myqcloud.com/convert/xconvertq.zip

  1. 使用解压工具解压压缩包。

TIP

如果您是 Linux 服务器,您可以在服务器的终端中,通过该命令进行解压 unzip xconvertq.zip

步骤二:配置转化工具

配置转化工具数据库信息

  1. 在解压出的 xconvertq 文件夹中,找到config目录下的database.php文件,并使用文本编辑器或使用 WinSCP 等工具打开该文件。
  2. database.php文件中配置数据库信息。信息内容可根据文件中注释进行填写。如下所示:

TIP

  • 其中 discuzq 为 Discuz! Q 数据库连接信息, discuzx 为 Discuz! X3.4数据库连接信息。
  • 若 Discuz! X3.4 为 gbk 编码,数据库连接信息中的X数据编码 和X数据库字符集保持现有默认配置即可。
  1. 在终端中,在该程序的根目录下输入命令 php discoa app:test测试数据库是否正常连接。提示success`即代表连接正常,若提示其他信息,请检查数据库配置信息是否填写正确。

配置转化工具转换模式

  1. 在解压出的 xconvertq 文件夹中,找到config目录下的config.php文件,并使用文本编辑器或使用 WinSCP 等工具打开该文件。
  2. 配置 breakpoint_continuation字段,可选值为 true 与 false。说明如下:
  • 当 breakpoint_continuation 字段的值为 true时,表示开启断点续转模式,在此模式下执⾏转换命令,程序会忽略之前转换过的数据。
  • 当 breakpoint_continuation 的值为 false 时,程序会先检查Q⽬标表是否有多余数据,如果有则停 ⽌执⾏对应的转换任务

步骤三:配置 Discuz! Q 数据库

  1. 在 Discuz! Q 使用的数据库中运⾏以下 sql 命令: :: warning 请您注意修改以下 sql 命令中 pre_users 的表格前缀,如果没有前缀,去掉 pre_ 即可。 ::

步骤四:修改 Discuz! Q 文件

更新 Discuz! Q 登陆验证⽂件

  1. 在 Discuz! Q 文件目录中,找到 app/Listeners/User/CheckLogin.php 文件,并使用文本编辑器或使用 WinSCP 等工具打开该文件。
  2. 编辑 CheckLogin.php 文件,查找以下代码(72⾏附近)。
  1. 在以上代码前添加如下代码:
  1. 在 CheckLogin.php程序⽂件最后⼀个⼤括号}前,给本⽂件添加如下代码(**注意:**复制粘贴后,换行处会多出空格,例如->会变成- >,请注意去除):
  1. 将转换程序⾥的⽂件 app/Formatter/CustomerConfigurator.php 复制到 Discuz! Q 程序 app/Formatter⽬录下,并在 Discuz! Q 程序⽂件 app/Formatter/Formatter.php 中38⾏左右找到如下代码:

在其后添加如下代码:

  1. 删除 Discuz! Q 程序storage/Formatter ⽬录下的所有缓存⽂件。

步骤五:上传附件文件

  • 将 Discuz! X3.4 ⽬录 uc_server/data/avatar 中的所有⽂件上传⾄ Discuz! Q ⽬录storage/app/public/avatars文件夹下,如果 avatars 不存在,请⾃⾏创建该⽬录。
  • 将 Discuz! X3.4 ⽬录 data/attachment/forum 中的所有⽂件上传⾄ Discuz! Q ⽬录storage/app/public/attachments,如果 attachments 不存在,请⾃⾏创建该⽬录。
  • 将 Discuz! X3.4 ⽬录 data/attachment/commom ⽂件夹上传⾄ Discuz! Q ⽬录 storage/app/public/attachments
  • 将 Discuz! X3.4 ⽬录 static/image/smiley ⽂件夹中的⽂件夹上传⾄ Discuz! Q ⽬录 public/emoji⽬录。

步骤六:转换

  1. 转换工具支持以下两种方式进行转化,您可以根据自己的实际需求进选择:

⼀键转换

在命令⾏模式下,在转换程序根⽬录运⾏ php discoa app:xtq 命令,将完成所有本程序定义过的数据的转 换,包含:⽤户数据、版块数据、主题数据、回复数据、附件数据、表情数据。

选择转换

WARNING

若采⽤选择转换,⽤户数据和版块信息⼀定要在主题、回复信息之前进⾏操作。

您可以⾃由选择要转换的数据。您可以使⽤ php discoa app:xtq --option 命令,⾃由选择您需要转换的 数据,--option 有以下可使⽤参数:

  • user : ⽤户信息转换。
  • category : 版块信息转换。
  • thread : 主题信息转换。
  • post : 回复信息转换。
  • attachment : 附件信息转换。
  • emoji : 表情转换。
  • count :主题、帖⼦、⽤户信息统计更新。

TIP

  • php discoa app:xtq user 表示只转换⽤户信息。
  • php discoa app:xtq thread 表示只转换主题信息。
  1. 转换工具命令运行完毕后即可转换成功。转化工具还支持以下功能。您可以根据您得具体需求进行使用。

转化工具辅助功能

您可以使⽤ php discoa app:clean cleanDatabase --option 命令清理 Discuz! Q 中数据表数据。您可以 选择以下 --option 参数:

  • user : 清理⽤户数据。
  • userWallet : 清理⽤户钱包数据。
  • category : 清理板块。
  • thread : 清理主题。
  • post : 清理回帖。
  • emoji: 清理转换来的表情。
  • attachment : 清理附件数据。

WARNING

不填写 option 参数时,程序将清理以上所有数据。

例如:

  • php discoa app:clean cleanDatabase 表示清理所有数据。
  • php discoa app:clean cleanDatabase user 表示清理⽤户数据。

步骤七:Discuz! X3.4 网址跳转 Discuz! Q

WARNING

  • 转换成功后,将导致原 Discuz! X3.4 的网址失效。您可通过以下步骤与配置,让原 Discuz! X3.4 的网址被访问时,可顺利的利用 301 跳转至对应的 Discuz! Q 网址。
  • 此步骤非必须,您可根据您的具体需求判断是否配置。

目前提供以下三种 Web 服务的配置方式,您可根据您的具体情况进行选择配置:

Nginx

  1. 使用文本编辑器打开您的 Nginx 配置文件,通常为 nginx.conf文件。
  2. 在配置文件中查找到 server 块并增加如下配置:
  1. 您可以使用以下 nginx 命令检查配置是否正确:
  1. 重启 Nginx 服务。您可以参考命令:nginx -s reload 进行重启。

Apache

  1. 使用文本编辑器打开您的 .htaccess 配置文件并增加如下配置:
  1. 重启 Apache 服务。您可以参考命令:service httpd restart 进行重启。

IIS

  1. 使用文本编辑器打开您的 web.config 配置文件。
  2. 在配置文件中的 rules 中增加如下配置:
  1. 重启 IIS 服务。

其他注意事项

  1. 目前附件图片不支持七牛云等第三方存储。
  2. 若转换过程出现内存溢出报错Fatal error: Allowed memory size of ...时,可尝试修改php.ini配置,将memory_limit适当调大并重启 PHP 服务。