Перенос базы форума с Postgres на MySQL


postgresql-to-mysql
Один из текущих проектиков на старом хостинге стал совсем плох – сервак еле еле тянет казалось бы простейшие запросы. Какое там железо узнать так и не удалось … хостинг добывался клиентом по какому великому “знакомству” 🙂

В общем “разруливать” ситуацию доверили мне.
Думать тут особо не пришлось – первым же делом наметил переезд сайта на свой выделенный сервачек.
Как ни странно для нашего времени весь кроме форума сайт был свёрстан в чистом 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”»

  1. Ржунемагу!
    Ну действительно… Зачем .bin-ы? Надо их, конечно, закилять. Расширение-то такое не первый раз встретил?
    “Какое там железо узнать так и не удалось… хостинг добывался клиентом по какому великому «знакомству»” – у соседа по парте спросить слабо было?
    Блогописатель… Одни баксы, баксы, баксы.

Добавить комментарий для Ника Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *