Зняття та встановлення дампа в MySQL (mysqldump)
Теоретично все просто - MySQL з коробки має утиліту mysqldump, яка дозволяє зняти копію бази у вигляді набору SQL інструкцій.
Насправді все набагато гірше. Справа в тому, що mysqldump криво працює з кодуванням, відмінним від Latin1. Тобто експортувати базу в UTF8 за офіційною документацією (man mysqldump), тобто із зазначенням --default-character-set=utf8, і імпортувати її потім назад — неможливо. Кодування буде бите внаслідок «подвійного перетворення», що виконується утилітою mysqldump - пруфлінк
Власне, на посилання вище є і рецеп. Суть його в тому, що потрібно експортувати базу і потім імпортувати її в Latin1 незалежно від того, яке реальне кодування використовується. При цьому звичайно потрібно відняти з *.sql файл інструкції SET NAMES…
Ще один важливий момент, який слід врахувати. Як правило, ми знімаємо дамп бази з ім'ям A і намагаємося накотити його на базу з ім'ям B. Відповідно, можливі колізії через те, що у створеному після експорту файлі в SQL запитах і командах СУБД буде присутня згадка A. Потрібно замінити всі входження A на B, нижче під катом буде приклад, як це зробити засобами VIM.
І насамкінець, перед завантаженням дампа стару базу краще повністю відчистити. Зробити це можна по-різному, я ж знайшов для себе зручним маленький shell-скрипт (drop_all.sh), який автоматизує для мене цю роботу:
Отже, алгоритм
Послідовність кроків така:
2) Відкриваємо файл, що вийшов у результаті, і здійснюємо заміну. Зберігаємо зміни.