Es gibt zwei Möglichkeiten für unterschiedliche vBulletin Installationen die gleiche Benutzertabelle zu benutzen.

  1. am ändert vBulletin Quellcode so um, dass bestimmte SQL Anweisungen an eine anderen Datenbank gesendet werden
  2. Man verwendet MySQL Views

Ich gehe hier nur auf die zweite Variante ein, da sie performanter und auch ohne Änderungen am bestehenden Quellcode auskommt.

Beispiel Szenario:

Man hat ein Projekt, welches aus drei Foren für jeweils eine Sprache besteht: deutsch, englisch, spanisch. Man möchte nun, dass Benutzer die im deutschen Forum angemeldet sind, sich auch im englischen und spanischen Forum anmelden können. Es wurde also dreimal ein ganz normale vBulletin Installation durchgeführt, die jeweils auch eine eigenständige Datenbank besitzen. Natürlich könnte man auch alle 3 Installation in einer Datenbank ablegen, indem man mit Hilfe von Präfixen arbeitet. Um aber bessere Skalierungsmöglichkeiten einsetzen zu können, empfehle ich den Einsatz unterschiedlicher Datenbanken, die man bei Bedarf jede einzeln auf einen oder mehreren Servern verteilen kann.

Arbeitsschritte

1. Zugangsberechtigungen einrichten

2. Umbenennen bestehenden Tabellen der Client Datenbanken

Damit im nächsten Schritt die Views angelegt werden können, müssen nun die bestehenden Tabellen umbenannt werden, für die Views zum Einsatz kommen:

RENAME TABLE `vb_user` TO `orig_vb_user`;
RENAME TABLE `vb_useractivation` TO `orig_vb_useractivation`;
RENAME TABLE `vb_userban` TO `orig_vb_userban`;
RENAME TABLE `vb_usertitle` TO `orig_vb_usertitle`;
RENAME TABLE `vb_userchangelog` TO `orig_vb_userchangelog`;
RENAME TABLE `vb_usertextfield` TO `orig_vb_usertextfield`;
RENAME TABLE `vb_userfield` TO `orig_vb_userfield`;
RENAME TABLE `vb_usergroup` TO `orig_vb_usergroup`;
RENAME TABLE `vb_userlist` TO `orig_vb_userlist`;
RENAME TABLE `vb_usernote` TO `orig_vb_usernote`;
RENAME TABLE `vb_profilevisitor` TO `orig_vb_profilevisitor`;
RENAME TABLE `vb_reputation` TO `orig_vb_reputation`;
RENAME TABLE `vb_reputationlevel` TO `orig_vb_reputationlevel`;
RENAME TABLE `vb_spamlog` TO `orig_vb_spamlog`;
RENAME TABLE `vb_strikes` TO `orig_vb_strikes`;
RENAME TABLE `vb_pm` TO `orig_main_db.vb_pm`;
RENAME TABLE `vb_pmreceipt` TO `orig_vb_pmreceipt`;
RENAME TABLE `vb_pmtext` TO `orig_vb_pmtext`;
RENAME TABLE `vb_avatar` TO `orig_vb_avatar`;
RENAME TABLE `vb_profilefield` TO `orig_vb_profilefield`;

3. Anlegen der Datenbank Views innerhalb der Client Datenbanken

Um nun die Views zu erzeugen, werden folgende SQL Anweisungen ausgeführt: Folgende Views erzeugen:

CREATE VIEW vb_user as SELECT * FROM main_db.vb_user;
CREATE VIEW vb_useractivation as SELECT * FROM main_db.vb_useractivation;
CREATE VIEW vb_userban as SELECT * FROM main_db.vb_userban;
CREATE VIEW vb_usertitle as SELECT * FROM main_db.vb_usertitle;
CREATE VIEW vb_userchangelog as SELECT * FROM main_db.vb_userchangelog;
CREATE VIEW vb_usertextfield as SELECT * FROM main_db.vb_usertextfield;
CREATE VIEW vb_userfield as SELECT * FROM main_db.vb_userfield;
CREATE VIEW vb_usergroup as SELECT * FROM main_db.vb_usergroup;
CREATE VIEW vb_userlist as SELECT * FROM main_db.vb_userlist;
CREATE VIEW vb_usernote as SELECT * FROM main_db.vb_usernote;
CREATE VIEW vb_profilevisitor as SELECT * FROM main_db.vb_profilevisitor;
CREATE VIEW vb_reputation as SELECT * FROM main_db.vb_reputation;
CREATE VIEW vb_reputationlevel as SELECT * FROM main_db.vb_reputationlevel;
CREATE VIEW vb_spamlog as SELECT * FROM main_db.vb_spamlog;
CREATE VIEW vb_strikes as SELECT * FROM main_db.vb_strikes;
CREATE VIEW vb_pm as SELECT * FROM main_db.vb_pm;
CREATE VIEW vb_pmreceipt as SELECT * FROM main_db.vb_pmreceipt;
CREATE VIEW vb_pmtext as SELECT * FROM main_db.vb_pmtext;
CREATE VIEW vb_avatar as SELECT * FROM main_db.vb_avatar;
CREATE VIEW vb_profilefield as SELECT * FROM main_db.vb_profilefield;

Diese Vorgehensweise sollte Versionsunabhängig mit allen vBulletin Versionen funktionieren. Bei älteren Versionen kann es gegebenenfalls erforderlich sein, dass eine Tabelle nicht exisitiert und diese deshalb ausgelassen werden kann.

Aktualisiert: