Claroline: миграция БД

Совсем недавно был рассмотрен вопрос о том, как установить ещё один MySQL сервер на сервере с Gentoo Linux. Как причина даных танцев с бубном послужила система усправления учебным процессом Claroline. Ну и как логичное продолжение далее следует рассмотреть как саму базу переносить. Хотя все вопросы по поводу сопряжения Claroline с СУБД - это забота человека, который за неё ответсвенен. В моём случае этим человеком оказался я, поэтому пишу здесь и об этом.

Эта статья есть логичное продолжение статьи о втором MySQL серере.

Итак, после длительных рассматриваний было выявлено несколько отличий, которые можно систематизировать так:

  • В мультибазовом режиме Claroline созадёт для каждого курса отдельную БД, с именем, которое включает его шифр. В такой БД около 49 таблиц (вообще число точное, просто не ручаюсь что так будет всегда).
  • В каждой отдельной БД мультибазового режима имена таблиц совершенно одинаковые.
  • Для общих таблиц по прежнему используется основная БД.
  • В одндобазовом режиме все эти таблицы есстественно идут о основную БД, только предваряются префиксами, которые такие же как и имя БД в мыльтибазовом режиме.

Вот и все отличия. Больше их просто нет. Так что работа несложная. Вот основные моменты:

  1. Создать пользователя БД для Claroline, который бы имел право создавать базы.
  2. Скопировать БД однобазового режиму на этот сервер, далее это будет основная БД.
  3. Проанализировать список сущестующих курсов.
  4. Для каждого курса создать новую БД (называть соответственно).
  5. В каждую новую БД переместить таблицы, которые предваряются соответсвенным префиксом. При этом префиксы необходимо стереть.
  6. Исправить конфиг Claroline.

Вот так. Теперь можно рассмотреть поподробнее. Первые два пункта смысла описывать нету, с этим думаю проблем не будет.

Перенесение данных

Собственно для переноса использовал вот такой простой PHP скрипт:

<?php

header("Content-type: text/plain; charset=utf-8");
error_reporting(E_ALL);
ini_set("display_errors", 1);
ini_set("display_startup_errors", 1);

// Это конфигурация
$host = '127.0.0.1:3307'; // адрес сервера БД
$user = 'claroline'; // пользователь БД для Claroline
$pass = 'парольотбазы'; // пароль пользователя
$db_master = 'claroline'; // основная БД

mysql_connect($host, $user, $pass);
mysql_select_db($db_master);

$query1 = "SELECT `dbName` FROM `cl_cours`";
$result1 = mysql_query($query1);

while($row1 = mysql_fetch_object($result1)) {
    echo "Processing: ";
    echo $row1->dbName."\n";
    // Create database
    $query2 = "CREATE DATABASE `{$row1->dbName}` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci";
    mysql_query($query2);
    // Seearch tables
    $query2 = "SHOW TABLES LIKE '".$row1->dbName."_%'";
    $result2 = mysql_query($query2);
    while($row2 = mysql_fetch_row($result2)) {
        $slice = strlen($row1->dbName."_");
        $table = substr($row2[0], $slice);
        $query3 = "RENAME TABLE `$db_master`.`{$row2[0]}` TO `{$row1->dbName}`.`$table`";
        mysql_query($query3);
    }
}
mysql_close();

Скрипт, отработав, сделает все необходимые правки в БД.

Конфиг Claroline

Конфиг лежит в platform/conf/course_main.conf.php. Там правим адреса сервера БД:

$GLOBALS['dbHost'] = '127.0.0.1:3307';

Далее имя и пароль пользователя БД (тут только пароль, имя пользователся не изменилось):

$GLOBALS['dbPass'] = '*******************';

Отключаем однобазовый режим:

$GLOBALS['singleDbEnabled'] = FALSE;

И напоследок указываем новый разделитель для получения имён таблиц:

$GLOBALS['dbGlu'] = '`.`';

Вот и всё. Готово. Теперь надо будет раз зайти в системные настройки Claroline, он поматерится, что типа не он конфиг писал, нажимаем "Save", и эта проблема исчезнет. Радуемся.