核心原理
织梦CMS的所有数据(文章、栏目、会员、模型等)都以数据表的形式存储在MySQL数据库中,默认情况下,这些表都以 dede_ 为前缀,dede_archives (文章表)、dede_arctype (栏目表)。
如果两个网站共用一个数据库,并且都使用默认的 dede_ 前缀,那么当你在网站A发布一篇文章时,它会插入到 dede_archives 表中;当你同时在网站B发布一篇文章时,它也插入到同一个 dede_archives 表,这会导致:
- 数据完全混乱:网站A的文章会出现在网站B的列表中,反之亦然。
- 管理混乱:后台管理的数据会相互覆盖。
解决方案:为第二个网站(或所有后续网站)在安装时指定一个不同的表前缀,dede2_。
详细操作步骤
假设你已经有一个正在运行的织梦网站A,现在要安装织梦网站B,并让它们共用数据库。
第1步:准备网站文件
- 将织梦CMS的安装包解压,上传到你的Web服务器的另一个目录。
- 网站A:
www.yoursite.com(根目录) - 网站B:
www.yoursite.com/subsite(子目录) 或new.yoursite.com(新域名)
- 网站A:
第2步:修改安装文件(关键步骤)
在安装网站B之前,你需要修改其安装文件,以指定一个唯一的数据库表前缀。
-
找到网站B安装包中的
/data/baseconfig.php文件,如果找不到,可能需要先创建一个空的install_lock.txt文件以触发安装程序的某些检查,或者直接修改/include/common.inc.php(不推荐,风险较高)。 -
强烈推荐的方法:在安装过程中,安装程序会让你填写数据库信息,在填写数据库信息的页面上,通常会有一个“数据库表前缀”的输入框。在这里手动输入一个不同于网站A的前缀,
dede2_。如果安装程序没有提供这个选项,或者你想提前配置,可以手动编辑
/data/baseconfig.php文件(如果存在),或者在安装前创建一个config.php文件在/data/目录下,内容如下:<?php //数据库连接信息 $cfg_dbhost = 'localhost'; $cfg_dbname = 'your_database_name'; // 你要共用的数据库名 $cfg_dbuser = 'your_database_user'; // 数据库用户名 $cfg_dbpwd = 'your_database_password'; // 数据库密码 $cfg_dbprefix = 'dede2_'; // <--- 这里是关键!设置一个全新的前缀 $cfg_db_language = 'gbk'; // 或 'utf-8',根据你的网站编码选择 // 还可以设置其他信息,如网站名称等 $cfg_webname = '我的第二个网站'; ?>
这样,当安装程序运行时,它会自动读取这个配置文件,并使用你指定的表前缀。
第3步:执行安装
- 在浏览器中访问网站B的安装地址,
www.yoursite.com/subsite/install。 - 按照安装向导的提示进行操作,在“数据库设置”步骤,填入你现有的数据库信息:
- 数据库主机:
localhost(通常是) - 数据库名:
your_database_name(与网站A相同) - 数据库用户名:
your_database_user - 数据库密码:
your_database_password - 数据库表前缀:
dede2_(如果你没有提前配置文件,就在这里输入)
- 数据库主机:
- 继续完成安装向导的其余步骤(网站信息、管理员账号等)。
安装完成后,你的数据库中就会出现两组表:
- 网站A的表:
dede_archives,dede_arctype,dede_admin... - 网站B的表:
dede2_archives,dede2_arctype,dede2_admin...
它们相互独立,不会产生数据冲突。
注意事项与最佳实践
绝对不要使用相同的表前缀!
这是最最重要的一点,否则后果不堪设想。
后台登录地址
两个网站的后台登录地址是独立的,但都指向同一个数据库。
- 网站A后台:
www.yoursite.com/dede - 网站B后台:
www.yoursite.com/subsite/dede
虽然地址不同,但它们管理的是数据库中不同前缀的表,你可以用同一个管理员账号登录,也可以为每个网站设置独立的管理员。
会员系统(登录、注册)
默认情况下,会员表(如 dede_member)也会因为前缀不同而分离,这意味着:
- 网站A的会员无法直接登录网站B。
- 网站B的会员也无法直接登录网站A。
如果你希望会员系统互通,你需要手动修改网站B的配置,使其使用网站A的会员表。
- 在网站B的
/data/dbcfg.php文件中,找到会员相关的配置项。 - 将会员表的前缀改为网站A的前缀,将
cfg_member_table = 'dede2_member';改为cfg_member_table = 'dede_member';。 - 你可能还需要对其他相关的会员表(如
dede_member_tpl,dede_member_space等)做同样操作。
警告:手动修改配置文件有一定风险,请务必在操作前备份数据库和文件。
数据共享(高级需求)
如果你希望某些数据(软件下载”模型的数据)在两个网站间共享,但又不想共享所有数据,这会更复杂,你需要:
- 确定要共享的表(
dede_addonsoft)。 - 在安装网站B时,不要创建这个表。
- 在网站B的配置文件中,手动指定这个共享表的完整名称(不带前缀)或前缀与网站A一致。
在网站B的代码中,当涉及到查询
dede_addonsoft表时,需要确保它查询的是your_database_name.dede_addonsoft,而不是your_database_name.dede2_addonsoft。 这通常需要修改网站B的模型文件或编写自定义的SQL查询,不建议新手操作。
备份策略
由于两个网站共用一个数据库,你的数据库备份策略需要同时考虑两个网站,恢复备份时,也要确保两个网站都能正常工作。
插件和模板兼容性
确保你为网站B安装的插件和使用的模板是兼容的,并且不会因为修改了数据库配置而出现问题。
| 操作项 | 网站A (主站) | 网站B (副站) | 说明 |
|---|---|---|---|
| 网站目录 | /var/www/html/siteA |
/var/www/html/siteB |
两个独立的网站程序文件 |
| 数据库 | db_yoursite |
db_yoursite |
共用同一个数据库 |
| 表前缀 | dede_ |
dede2_ |
核心!必须不同 |
| 会员系统 | dede_member |
dede2_member |
默认独立,可手动配置为共享 |
| 后台管理 | siteA.com/dede |
siteB.com/dede |
独立的后台入口 |
通过以上步骤,你就可以成功实现两个织梦网站共用一个数据库,同时保持数据和管理的独立性。
