Claroline: миграция БД
- Подробности
- Просмотров: 3549
Совсем недавно был рассмотрен вопрос о том, как установить ещё один MySQL сервер на сервере с Gentoo Linux. Как причина даных танцев с бубном послужила система усправления учебным процессом Claroline. Ну и как логичное продолжение далее следует рассмотреть как саму базу переносить. Хотя все вопросы по поводу сопряжения Claroline с СУБД - это забота человека, который за неё ответсвенен. В моём случае этим человеком оказался я, поэтому пишу здесь и об этом.
Эта статья есть логичное продолжение статьи о втором MySQL серере.
Итак, после длительных рассматриваний было выявлено несколько отличий, которые можно систематизировать так:
- В мультибазовом режиме Claroline созадёт для каждого курса отдельную БД, с именем, которое включает его шифр. В такой БД около 49 таблиц (вообще число точное, просто не ручаюсь что так будет всегда).
- В каждой отдельной БД мультибазового режима имена таблиц совершенно одинаковые.
- Для общих таблиц по прежнему используется основная БД.
- В одндобазовом режиме все эти таблицы есстественно идут о основную БД, только предваряются префиксами, которые такие же как и имя БД в мыльтибазовом режиме.
Вот и все отличия. Больше их просто нет. Так что работа несложная. Вот основные моменты:
- Создать пользователя БД для Claroline, который бы имел право создавать базы.
- Скопировать БД однобазового режиму на этот сервер, далее это будет основная БД.
- Проанализировать список сущестующих курсов.
- Для каждого курса создать новую БД (называть соответственно).
- В каждую новую БД переместить таблицы, которые предваряются соответсвенным префиксом. При этом префиксы необходимо стереть.
- Исправить конфиг 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", и эта проблема исчезнет. Радуемся.