Есть у меня, кроме всего прочего, давний проект -
http://tckb.ru. Начинался он как chm-сборник всякой полезной околототаловской шняги, потом перерос в вебдванольный сайтик на движке MediaWiki. Я, в плане всяческой каталогизации и упорядочивания настоящий маньяк, и угробил на сайтик кучу сил и времени (да и не я один, в общем-то).
Но сейчас речь не о том.
Сайтик многократно ломался, затем чинился, совершенствовался и ломался вновь. В основном, поломки происходили из-за переедов сервера или апгрейдов софта на нём.
Изначально движок работал себе на четвёртом мускуле. И, скорее всего, сконфигурирован был на хранение текстовых данных в старом-добром win1251. Я, в те времена веб-программированием даже не думал заниматься, и о поддержке utf8 не беспокоился. Возможно, были ещё какие-то причины, не помню уже.
Потом мускуль на серваке обновили, и старый движок работать с ним не захотел. Или что-то ещё случилось, в общем, пришлось отлично работающий, хоть и устаревший немного двиг обновить. Обновление стало, по какой-то причине, писать данные в базу в utf8. Что, в общем, проблем не вызывало - как бы не была сконфигурирована база, данные всё равно обрабатываются движком, а он что пишет, то и читает. С предыдущими данными были какие-то проблемы, но они решались без моего участия - видимо админ попросту прописал нужные кодировки в collate.
А уже не так давно серваки стали переезжать на пятый мускуль. Я, памятуя о прошлых багах при обновлении, просил оставить как есть, но ради одного сайтика держать устаревший софт не стали.
После обновления всплыла знаменитая проблема - в русских текстах покоцались буквы "И" (заглавная) и "ш" прописная. Причём покоцалось только в той таблице, которая обеспечивает всю структуру вики-сайта (page), а таблица, хранящая данные (text) осталась неизменной. Зато в этой таблице, как я с ужасом обнаружил, данные перемешались в непотребную кашу: что-то было в нормальном utf8, что-то оставалось в win1251, а что-то изначально было в utf, но потом считывалось движком как win1251 а писалось снова как utf, что давало результат вроде "Неучтенные_РЅР" в лучшем случае. Разобрать где что - невозможно.
К счастью последние версии всех страниц оказались таки в utf8. Остальное, в принципе, можно бы было отбросить, максимум пострадала бы история правок, что ни разу не страшно.
Но проблема с покоцанными буквами в заголовках не отбрасывалась. Страницы, где оказались эти злосчастные буквы оказались просто недоступны. Прямое изменение текста заголовков прямо в БД результата не дало - страницы всё равно оказывались названы старыми именами, и продолжали оставаться всё такими же недоступными. Копаться в сорока одной таблице базы (даже имея на руках подробный мануал и схему базы - легко гуглятся) мне было уже лень, потому был написан простой запрос, выдаваший таблицу в виде: "Заголовок страницы|Последняя ревизия страницы". Дамп этой таблицы (весивший в 15 раз меньше полного дампа базы) я собирался импортировать на поднятую на том же сервере копию сайта, но опять же, оказалось, что в заголовке страницы содержится... только заголовок страницы. А что это за тип (обсуждение, категория, файл и т.д.) понятно не было.
Пришлось покопаться в документации. Оказалось, что за тип страницы отвечает поле page_namespace в той же таблице page. Поле оказалось целочисленным, а константы, обозначающие тип, легко нашлись в svn MediaWiki.
Запрос был слегка поправлен, и на выходе получилась вполне нормальная табличка со всеми нужными данными. Затем она была выгружена в xml, который я тут же написанным скриптом подготовил для импорта в заново установленный движок.
Перенести пользователей и изображения оказалось просто даже вручную.
В результате имею правильно, с учётом предыдущих ошибок, сконфигурированный движок и базу данных и почти все данные из предыдущего сайта. Потерялась только история правок, что, как я уже писал, не волнует никого.