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

Где-то пару недель назад я обнаружил, что не могу восстановить 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: Ну а криворукого и некомпетентного хостера рекомендую остерегаться.

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn



4 коментарі

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.

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

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

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

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

Підписатись на коментарі