Украинское сообщество программистов

War story: о хостерах, MySQL и PHP

Макс Ищенко
Опубликовано 25.05.2006 в Статьи

Где-то пару недель назад я обнаружил, что не могу восстановить backup базы WordPress-блога сайта developers.org.ua. Точнее, восстановить-то я могу, только вместо русских букв отображается какой-то мусор.

Хотя на сайте все было по прежнему ОК (иначе я заметил бы и раньше) невозможность создания резервной копии базы означала что я в любой момент могу остаться без базы совсем. Порывшись в документации и в службе поддержки хостера обнаружил следующее.

Некоторое время назад хостер втихую обновил версию MySQL на сервере с 4.0 до 4.1. Как я узнал из документации после такого обновления следовало выполнить некоторые шаманства с текстовыми полями чтобы MySQL продолжал их правильно воспринимать.

Я этого не делал (потому что обновление прошло втихую) и продолжал добавлять данные в базу, ничего не подозревая. Когда я наконец “схаменувся”, то обнаружил в таблицах нечитаемую смесь из utf8 данных закодированных в latin1 и utf8 данных закодированных в utf8. По крайней мере, так было в резервных копиях которые генерировал mysqldump. На сайте (онлайн) все почему-то показывалось ОК.

Различные ухищрения с резервной копией ничего не дали, как и запрос в ua-devtalk и некоторые другие онлайн-форумы.

Промучавшись с резервной копией, решил вернуться к тому факту что онлайн данные каким-то образом читаются PHP-кодом нормально. Возникла идея написать PHP-скрипт, который пройдет все нужные мне таблицы и сохранит данные в CSV или другую базу. Задачка та еще. Но тут я вспомнил что нечто такое уже видел, а именно: WordPress Database Backup Plugin.

Как следовало из исходного кода плагина, он работает именно так, как мне надо: проходит по табличкам и складывает их содержимое в текстовый файл (в .sql скрипт, который затем можно выполнить для восстановления базы). После небольших шаманств с настройкой я загрузил сгенерированный бекап и…на первый взгляд все было в ажуре!

Пришлось, конечно, поправить DEFAULT CHARSET=latin1 на utf8, ну да это пустяки. Запускаю скрипт и получаю кучу синтаксических ошибок. Ладно. Как оказалось, бекап скрипт “не понимает” NULL, в итоге некоторые INSERT строки выглядели как: “INSERT INTO … (12, , , ‘m’, 222)”. Не страшно, делаем :g/^INSERT/s/, ,/, NULL,/g и пробуем еще раз. Опять та же ошибка – почему-то мой регэксп не все пустышки поймал. Выполняю еще раз, запускаю скрипт…данные загрузились!!!

Осталось обновить базу на сервере. Создаю резервную копию локальной базы, заливаю на сервер, заливаю в новую БД. Кажется все ОК. Переключаю WP на новую базу…вижу вопросики вместо русских букв. Так, кажется мы это уже проходили. Открываю wp-db.php и добавляю “SET NAMES utf8;”.

Все. Работает. Только почему-то пропал опрос с заглавной страницы сайта. Таак, оказывается таблица опросника называется wp_democracyq хотя должно быть wp_democracyQ. Очевидно, когда я восстановил копию на своей Windows-машине MySQL и “потерял” регистр таблицы. Фигня, переименовываем таблицу…кажется теперь точно все.

PS: Если вы сегодня оставляли комментарий или анкету в базе зарплат в интервале примерно с 16:00 до 17:00, ваш комментарий был потерян. Но вроде бы никто ничего не писал, так что ничего не потерялось.

PPS: Ну а криворукого и некомпетентного хостера рекомендую остерегаться.

Теги: , , ,

1 звезда2 звезды3 звезды4 звезды5 звезд (Еще не оценили)
Загрузка ... Загрузка ...

Понравилась статья? Подпишись на обновления по RSS/E-mail

Подписаться, не оставляя комментарий

Все комментарии (4) к “War story: о хостерах, MySQL и PHP” RSS

  1. Profuel

    такс, сегодня же вечером проверю свой хостинг :)
    Дома у меня была такая неприятность, но игры с collation хватило.

  2. Gisma

    ну что я могу сказать, вы бы видели персонал который обычно сидит на хостинг-конторах, меньше бы удивлялись:) Я как веб-программист видел и не такое:)

  3. Alexander

    Да, к выбору хостера надо относиться очень внимательно. Я тестирую GoDaddy, в общем проблем не возникает.

    Но с чем я столкнулся при выборе хостинга и что меня просто поразило, так это то, что у хостера часто (у GoDaddy, 1&1 и других, что я смотрел) просто клещами не вытянуть настроек PHP и MySQL. Просто phpinfo() показать потенцильному клиенту, и то проблема… Не любят они этого, похоже… Причем все поголовно…

  4. Алексей

    У нас такая эпопея была в феврале, только там хостер базу грохнул при переносе на новый сервер.

    Подробности – здесь

Оставить комментарий

Указать свой сайт могут только зарегистрированные пользователи. Регистрация или вход.

Архив

Добавить статью

Станьте автором нашего сайта!

Какие материалы подходят для публикации? — Такие.

Присылайте статьи на editors@developers.org.ua.

Подробнее.

Популярные теги

Все теги

Комментарии

Последние комментарии

интернет магазин бытовая техника магазин Laptoper