Довольно часто приходится переносить сайты с хостинга на хостинг, и поскольку разные хостеры используют разные версии MySQL и кодировок, то довольно часто возникают проблемы. Вот на днях начал переносить несколько ресурсов на свой хостинг, и обнаружил, что вместо текста - сплошные знаки вопроса. Понятное дело - траблы с кодировкой. Немного намучившись с подборами кодировок, нашел в инете замечательный скрипт миграции баз данных - Sypex Dumper Lite 1.0.8. Он пригодится при решении следующих проблем:
- Вместо русских символов отображаются вопросительные знаки
- В phpmyadmin русский текст отображается как "крокозябры" (латинские символы с умляутами и т.п.)
- Неправильно сортируются русские слова (кириллица)
- При восстановлении выдаётся ошибка типа "Duplicate entry '??????' for key 2"
Версия 1.0.8 отличается от предыдущих версий улучшеной работой с кодировками. Добавлен автовыбор кодировки, путем установки для CHARSET значения "auto" (установлено по умолчанию). При этом скрипт автоматически выбирает кодировку соединения исходя из кодировки таблицы. Кроме того, добавилась возможность принудительного изменения кодировки таблиц, для этого в RESTORE_CHARSET нужно установить 'forced->имя_кодировки', к примеру 'forced->cp1251'. Это как раз для случаев, когда данные в cp1251, а у таблиц - latin1.
Установка
- Разархивировать скачанный zip-файл.
- Закачать его содержимое в один из каталогов вашего сервера (доступный из web).
- Установить для этого каталога CHMOD 777.
Использование
- Открыть в браузере URL http://domain.com/dumper.php.
- Ввести логин и пароль для вашей БД.
- Создание резервной копии БД:
■ Выберите базу данных в верхнем разделе главной страницы.
■ Фильтр оставьте пустым (будут дампиться все таблицы выбранной БД), подробнее о фильтрах см. ниже.
■ Выберите метод сжатия (bzip2 наиболее эффективный, но и самый медленный).
■ Выберите степень сжатия (как показала практика, наиболее оптимальная — 7).
■ Нажмите Применить.
■ После окончания работы программы (станут активны кнопки Скачать файл и Вернуться), можно скачать файл по http (предварительно возможно понадобится настроить перехват расширений .sql, .gz и .bz2 в менеджере загрузки) или скачать по FTP. Название файла состоит из названия базы данных, а также даты и времени создания дампа, для упрощения работы с файлами резервных копий.
- Восстановление БД из резервной копии:
■ Выберите базу данных в нижнем разделе главной страницы.
■ Выберите файл из раскрывающегося списка. Если необходимо, то предварительно закачайте файлы резервных копий в папку backup.
■ Нажмите Применить.
■ Теперь только остается наблюдать за процессом восстановления БД.
Внимание!
По умолчанию дампер рассчитан на работу с кодировкой cp1251 (она же windows-1251). Если данные в другой кодировке и Вам нужно восстановить дамп сделанный в MySQL 4.0 на MySQL 4.1 и выше, то нужно в dumper.php изменить свойство RESTORE_CHARSET.
Также в случае возникновения проблем с русским текстом после перехода, необходимо выполнить следующие действия:
- Cохранить БД с помощью нового дампера 1.0.8 (предварительно установив в dumper.php следующие значения, CHARSET = 'auto', RESTORE_CHARSET = 'forced->cp1251'), желательно для подстраховки убедиться, что в дампе нормально сохранены русские символы, после чего восстановить таблицы этим же скриптом из только, что созданного дампа. Теперь у таблиц будет правильная кодировка, и phpmyadmin будет правильно показывать и сортировать русские символы.
- Но ваши скрипты скорее всего будут показывать вопросительные знаки, так как в них не указывается кодировка соединения cp1251, а используется latin1. Для того чтобы это исправить, нужно во всех ваших php-файлах, где вызывается функция mysql_connect, обычно перед вызовом mysql_select_db добавить следующую строку:
mysql_query("/*!40101 SET NAMES 'cp1251' */") or die("Error: " . mysql_error()); |
- В итоге ваши скрипты будут нормально работать как со старыми версиями MySQL, так и с новыми.
- Кроме того рекомендуется в с помощью phpmyadmin (или другого MySQL клиента) изменить кодировку по умолчанию для вашей БД, чтобы новые таблицы создавались с правильной кодировкой. В pma для этого нужно выбрать БД, зайти в раздел "Операции" и в выпадающем меню "Сравнения" выбрать правильное (соответствующее вашим данным).
Фильтры
В фильтре таблиц указываются специальные шаблоны по которым отбираются таблицы. В шаблонах можно использовать следующие специальные символы:
- символ * — означает любое количество символов;
- символ ? — означает один любой символ;
- символ ^ — означает исключение из списка таблицы или таблиц.
Примеры:
ib_* |
все таблицы начинающиеся с "ib_" (все таблицы форума invision board) |
ib_*, ^ib_sessions |
все таблицы начинающиеся с "ib_", кроме "ib_sessions" |
ib_s*s, ^ib_sessions |
все таблицы начинающиеся с "ib_s" и заканчивающиеся буквой "s", кроме "ib_sessions" |
^*s |
все таблицы, кроме таблиц заканчивающихся буквой "s" |
^ib_???? |
все таблицы, кроме таблиц, которые начинаются с "ib_" и содержат 4 символа после знака подчеркивания |
Итоги...
Иногда работу скрипта приходится корректировать "ручками", но все же он здорово выручает при дампе баз данных. Рекомендую к использованию.
Сайт разработчика
Скачать
Последние комментарии
21 неделя 6 дней назад
46 недель 20 часов назад
2 года 46 недель назад
3 года 16 недель назад
3 года 39 недель назад
4 года 2 недели назад
4 года 3 недели назад
4 года 6 недель назад
4 года 18 недель назад
4 года 22 недели назад