Один из текущих проектиков на старом хостинге стал совсем плох — сервак еле еле тянет казалось бы простейшие запросы. Какое там железо узнать так и не удалось … хостинг добывался клиентом по какому великому «знакомству» 🙂
В общем «разруливать» ситуацию доверили мне.
Думать тут особо не пришлось — первым же делом наметил переезд сайта на свой выделенный сервачек.
Как ни странно для нашего времени весь кроме форума сайт был свёрстан в чистом html (сам не верил пока лично не увидел !!! около 20к html файлов) — тут без проблем.
А вот форум оказался на Postgres SQL !
Решений пришло в голову сразу 2 первый очень простой — поднять Postgres и вуаля.
Но одновременно в памяти крутить 2 SQL сервера, причём Postgres только из за одного форума мне показалось не правильным, поэтому решил делать по второму варианту — это перенос данных с Postgres на MySQL. К тому же для форума фичи Postgres, которых нет в MySQL (хранимы процедуры и пр.) абсолютно не нужны.
Кроме ftp доступа клиент мне ещё пару бинарных архива полумесячной давности зачем-то предоставил, которые я сразу же покилял 🙂
Не долго погуглив я никаких готовых конвертеров к сожалению не нашел (может плохо искал), поэтому для выгрузки в SQL формате решил использовать phpPgAdmin (ранее с ним не работал, но предположил, что у него функционал аналогичный phpMyAdmin).
Выгрузки делать с лёту не стал — ругался на пути к pg_dump и pg_dumpall
Проанализировав сервак — выяснил, что он на unix системе, поэтому попробовал поменять в конфиге пути с ‘/usr/bin/…’ на ‘/usr/local/bin/’ — и угадал 🙂
Далее выгрузил структуру и данные в формате SQL (тут тоже не без камней — пока не запретил доступ к сайту и форуму выгрузки никак не могли докачаться — сессия постоянно обрывалась).
Структуру для MySQL взял в дистрибутиве форума — создал базу и залил данные полученные на предыдущем этапе.
Вроде бы всё должно заработать, а нет 🙁
Около десятка полей в данных почему то оказались NULL, хотя по структуре созданных таблиц они были NOT NULL.
Одной таблички из мода антиспам защиты вообще не оказалось, пришлось структуру переделывать вручную.
И самое неприятное — порядок полей в INSERTе Postgres на некоторых таблицах не соотвествовал структуре созданной под MySQL — опять же пришлось править в ручную.
Тем не менее всё успешно завершилось (вроде жалоб пока нет) и форум щас «летает» — юзера довольны.
P.S.
Отмечу один подводный камень с которым я довольно долго провозился — это кодировка и чувствительность к регистру !
Во первых из PG выгрузилось всё в кодировке latin1, соответственно хоть форум отображался нормально, но нормально работать в том же PHPMyAdmin не представлялось возможным, поэтому было решено всё «перезалить» правильно.
- Выгрузил дамп
- Создал БД по новой DEFAULT CHARSET=cp1251 COLLATE cp1251_BIN;
- Заменил все вхождения в дампе latin1 на cp1251
- Добавил после коннекта к БД 2 запроса «SET NAMES CP1251» и «SET COLLATION_CONNECTION=CP1251_GENERAL_CI»;
- В таблицу юзеров ещё добавил регистрочувствительность добавив DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin (именно bin указывает СУБД о регистрозависимости)
- Залил получившийся дамп назад
Всего несколько строчек — а как я утомился пока понял в чём косяк, когда юзер не мог залогиниться на форум.
3 комментария на «“Перенос базы форума с Postgres на MySQL”»
самое главное, что все получилось
Ржунемагу!
Ну действительно… Зачем .bin-ы? Надо их, конечно, закилять. Расширение-то такое не первый раз встретил?
«Какое там железо узнать так и не удалось… хостинг добывался клиентом по какому великому «знакомству»» — у соседа по парте спросить слабо было?
Блогописатель… Одни баксы, баксы, баксы.
А почему, интересно, постгреловские таблицы на латине написаны?