Drupal架设多站点共享用户数据库同步方法(Master/Slave)

共享用户数据库
最后共享认证方法的所有实例之间共享数据库表。这里的策略是有一个单一的数据库(或用户表的副本) ,多站点的所有实例之间共享。

一套核心代码、一个数据库实现用户共享的多站点功能。

修改内容

网站的主域名及二级域名如下(将dsjz.cn替换成你的域名):
     http://www.dsjz.cn

http://site1.dsjz.cn

http://site2.dsjz.cn

第一步:安装和配置主站点。

1、按照常用方法安装和配置drupal(假定安装的数据库名为db),在安装过程中为了区分主站和子站的数据表,需要通过“高级选项”加一个前缀“main_”。

2、使用phpmyadmin或者mysql工具修改以下数据库的表名:

'main_users' 重命名为'shared_users',

'main_sessions' 重命名为'shared_sessions',

'main_role'重命名为'shared_role',

'main_authmap'重命名为'shared_authmap',

'main_users_roles' 重命名为'shared_ users_roles',

3、重命名数据库表名后,前往drupal安装文件夹找到sites>default,将settings.php文件进行如下编辑(红色部分):

找到这一段代码                        

$databases = array (

  'default'=>

  array (

    'default'=>

    array (

      'database'=> '你的数据库名',

      'username'=> '你的用户名',

      'password'=> '你的密码',

      'host'=> 'localhost',

      'port' => '',

      'driver'=> 'mysql',

      'prefix' => 'main_',

    ),

  ),

);

将其修改为

$databases = array (

  'default'=>

  array (

    'default'=>

    array (

      'database'=> '你的数据库名',

      'username'=> '你的用户名',

      'password'=> '你的密码',

      'host' => 'localhost',

      'port'=> '',

      'driver'=> 'mysql',

      'prefix' => array(

      'default'    => 'main_',

      'users'     => 'shared_',

      'sessions'   => 'shared_',

      'role'      => 'shared_',

      'authmap'   => 'shared_',

     'users_roles'  => 'shared_',

  ),

    ),

  ),

);

4、保存修改过的文件,然后检测网站是否能够正常工作。


如果是不同数据库,则修改为:

$databases = array (

  'default'=>

  array (

    'default'=>

    array (

      'database'=> '新建的数据库名',

      'username'=> '这个密码必须和要共享用户的数据库用一个用户名',

      'password'=> '数据库密码也要和共享用户的数据库的密码相同',

      'host' => 'localhost',

      'port'=> '',

      'driver'=> 'mysql',

      'prefix' => array(

      'default'   => '新建的数据库名',

      'authmap' => '共享用户的数据库名.表前缀',

      'profile_fields' => '共享用户的数据库名.表前缀',

      'profile_values' => '共享用户的数据库名.表前缀',

      'role' => '共享用户的数据库名.表前缀',

      'sessions' => '共享用户的数据库名.表前缀',

      'users' => '共享用户的数据库名.表前缀',

  ),

    ),

  ),

);



安装和配置子站点。

1、前往drupal安装文件夹,在sites目录下新建文件夹并命名为site1.example.com,然后复制/sites/default/files文件到新建的文件夹,复制/sites/default/default.settings.php并重命名为settings.php

都是在settings.php里设置,有多少个站点,就有多少个settings.php需要修改。

注意修改:

1、db_prefix里,user表和sessions表的表前缀设置成相同,这样多个站点就会使用同一个用户数据库。

2、$cookie_domain的设置都设置成'dsjz.cn'

设置完成以后,在a.dsjz.cn上登录,再访问b.dsjz.cn,还是保持登录状态!

不过drupal的在线用户模块显示有点不爽,如果使用多个浏览器登录,它会显示多个同一个用户多次。

修改好之后,我们就完成了配置,两个站点就可以共享用户数据了。这种方式的好处是,用户信息是真正的共享,用户体验最好,主站点与子站点的一切用户信息一模一样,没有任何差异。配置简单方便,无须任何插件。缺点是共享用户的站点必须使用同一个数据库,如果两个子站点不在一个主机上,子站点所有数据库需要远程读写,很不安全;并且这种方式会导致用户的头像共享存在一些问题,需要自己手动调整或者修改代码。