dede如何公用数据库

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 DEDE建站 正文
  1. 多站点共享数据:多个不同域名或子域名的网站(如 site1.com, site2.com)共享同一套文章、软件、商品等内容。
  2. 主从站模式:一个主站管理内容,多个从站同步显示内容。
  3. 统一后台管理:在一个后台管理所有站点的共享内容。

实现这个目标的核心思路是:修改 DedeCMS 的数据库配置文件,使其连接到同一个数据库,并确保数据表前缀正确区分,避免冲突。

dede如何公用数据库
(图片来源网络,侵删)

下面我将分步详细讲解如何操作。


核心步骤概览

  1. 准备工作:确保所有站点都已安装好 DedeCMS。
  2. 统一数据库连接信息:修改所有站点的 data/common.inc.php 文件,让它们指向同一个数据库。
  3. 规划数据表前缀:为每个站点设置不同的数据表前缀,这是避免数据冲突的关键。
  4. 导入/同步数据:将需要共享的数据从一个站点导出,并导入到其他站点(或直接操作数据库)。
  5. 处理跨站链接:修改模板,使内容链接能正确指向目标站点。
  6. 权限配置:确保 Web 服务器对 data 目录有正确的读写权限。

详细操作步骤

第一步:准备工作

假设你有两个站点:

  • 主站http://www.main-site.com (已安装并发布好内容)
  • 从站http://www.sub-site.com (已安装,但内容为空)

两个站点都安装在同一个服务器的不同目录下,

  • /wwwroot/main-site/
  • /wwwroot/sub-site/

第二步:统一数据库连接信息

这是最关键的一步,你需要将 sub-site.com 的数据库配置修改为与 main-site.com 一致。

dede如何公用数据库
(图片来源网络,侵删)
  1. 找到配置文件

    • 打开 /wwwroot/main-site/data/common.inc.php 文件,用记事本或代码编辑器打开。
    • 打开 /wwwroot/sub-site/data/common.inc.php 文件。
  2. 复制主站的配置信息: 将 main-site.comcommon.inc.php 文件中的以下几行内容,完全一致地复制到 sub-site.comcommon.inc.php 文件中,覆盖原有的内容。

    <?php
    //数据库连接信息
    $cfg_dbhost = 'localhost'; // 数据库主机
    $cfg_dbname = 'your_database_name'; // 数据库名
    $cfg_dbuser = 'your_database_user'; // 数据库用户名
    $cfg_dbpwd = 'your_database_password'; // 数据库密码
    $cfg_dbprefix = 'dede_main_'; // 【重要】主站的数据表前缀
    $cfg_db_language = 'gbk';
    // ... 其他配置 ...
    ?>

    注意

    • $cfg_dbhost, $cfg_dbname, $cfg_dbuser, $cfg_dbpwd 必须完全相同。
    • 此时先不要修改从站的 $cfg_dbprefix,下一步会处理。

第三步:规划并修改数据表前缀

为了防止两个站点的数据表(如 dede_archives 文章表)发生冲突,每个站点必须使用唯一的数据表前缀。

  1. 查看主站前缀:在 main-site.comcommon.inc.php 中,前缀是 $cfg_dbprefix = 'dede_main_';

  2. 设置从站前缀:修改 sub-site.comcommon.inc.php 文件,将其 $cfg_dbprefix 修改为一个新的、不冲突的前缀,

    $cfg_dbprefix = 'dede_sub_'; // 从站的数据表前缀
  3. 修改从站所有表名: 你需要登录你的数据库管理工具(如 phpMyAdmin),将 sub-site.com 在数据库中所有表的表名前缀从默认的 dede_ 修改为 dede_sub_

    • dede_archives 改为 dede_sub_archives
    • dede_arctype 改为 dede_sub_arctype
    • ... 以此类推,修改所有属于 sub-site.com 的数据表。

    操作技巧:在 phpMyAdmin 中,你可以使用 SQL 语句批量重命名,非常高效:

    RENAME TABLE `dede_archives` TO `dede_sub_archives`;
    RENAME TABLE `dede_arctype` TO `dede_sub_arctype`;
    RENAME TABLE `dede_addonarticle` TO `dede_sub_addonarticle`;
    -- ... 为每个需要修改的表执行一次 ...

完成这一步后,两个站点就连接到了同一个数据库,但各自使用独立的数据表,互不干扰。

第四步:导入/同步数据

你需要将 main-site.com 的复制到 sub-site.com 对应的数据表中。

  1. 共享哪些表? 通常共享的表包括:

    • archives (文章主表)
    • arctype (栏目表)
    • addonarticle / addonsoft / addonproduct 等文章/软件/商品附表。
    • keyword (关键词表)
    • tagindex / taglist (TAG标签表)
  2. 如何同步?

    • 直接操作数据库(推荐) a. 在 phpMyAdmin 中,先为 your_database_name 数据库备份数份,以防操作失误。 b. 从 main-site.com 的数据表(如 dede_main_archives)中导出需要的数据。 c. 将导出的数据导入到 sub-site.com 的数据表(如 dede_sub_archives)中。

      • 注意:如果直接复制数据,arctype 表中的 typedir (栏目路径) 和 archives 表中的 arcurl (文章链接) 字段会包含主站的域名,需要后续通过模板或SQL批量替换。
    • 使用DedeCMS后台(仅适用于少量数据) 你可以在主站后台“内容” -> “一键更新网站”,然后从站后台“内容” -> “导入内容”,但这种方法通常不够灵活,容易出错,不推荐用于大量数据同步。

第五步:处理跨站链接(非常重要!)

由于你直接复制了数据,sub-site.com 的文章和栏目链接可能仍然指向 main-site.com,你必须修正这个问题。

  1. 批量替换数据库: 在 phpMyAdmin 中,使用 SQL 的 UPDATEREPLACE 函数批量替换 sub-site.com 相关表中的 URL。

    -- 替换栏目路径
    UPDATE `dede_sub_arctype` SET `typedir` = REPLACE(`typedir`, 'http://www.main-site.com', 'http://www.sub-site.com');
    -- 替换文章链接
    UPDATE `dede_sub_archives` SET `arcurl` = REPLACE(`arcurl`, 'http://www.main-site.com', 'http://www.sub-site.com');
    -- 如果文章有副表,也需要替换
    UPDATE `dede_sub_addonarticle` SET `body` = REPLACE(`body`, 'http://www.main-site.com', 'http://www.sub-site.com');
  2. 使用绝对路径的模板(更推荐的方法) 为了从根本上解决这个问题,最好的方法是修改模板,使其使用 {dede:global.cfg_basehost/} 这个全局变量来生成绝对路径。

    • 检查你的模板文件(在 /templets/ 目录下)。
    • 确保所有链接都使用了 DedeCMS 的全局变量,而不是硬编码的域名。
    • article_article.htm 模板中,文章的链接应该是:
      <a href="{dede:field name='arcurl'/}">{dede:field name='title'/}</a>

      DedeCMS 在解析时会自动将 arcurl 替换为完整的、基于当前站点的 URL,只要你正确配置了 sub-site.com 的站点信息(在后台“系统” -> “系统基本参数” -> “站点设置”中),它就会自动生成正确的链接。

第六步:权限配置

确保 Web 服务器(如 Apache 或 Nginx)对 data 目录具有读写权限,这个目录存储了配置文件和缓存文件,权限错误会导致网站无法正常运行。


重要注意事项和进阶技巧

  • 附件和图片路径:如果站点间共享附件和图片,并且它们存储在服务器上,也需要注意路径问题,建议将附件上传目录放在站点根目录之外,或者使用相对路径/绝对路径的配置。
  • 会员系统:如果需要共享会员,除了共享 member 表前缀相关的表,还需要确保 dede_memberdede_member_tpl 等表的表前缀也一致,并且会员中心的模板路径也要正确。
  • 插件和模块:如果使用了插件,请确保插件在两个站点上都已安装并启用,且插件相关的数据表也遵循了相同的“公用”或“独立”原则。
  • 性能考虑:所有站点都读写同一个数据库,会增加数据库服务器的负载,对于高流量网站,需要考虑数据库的优化和主从复制架构。
  • 安全:确保数据库用户权限最小化,不要使用 root 用户。data 目录的权限设置要严格,最好禁止外部访问(例如通过 .htaccess 文件)。

通过以上步骤,你就可以成功地在多个 DedeCMS 站点之间实现数据库的公用,从而高效地管理和共享内容。

-- 展开阅读全文 --
头像
dede单页面视频教程
« 上一篇 今天
dede自媒体采集器如何高效精准采集?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]