Обнаружил, что не знаю адекватного способа восстановления базы MySQL из дампа. Проблема в том, что восстановление через стандартную команду может загружать базу только в одноимённую. Если на предыдущем сервере база называлась "database", то на новом сервере она автоматически создастся при восстановлении.
Проблема
Раньше для восстановления базы из дампа использовал команду:
mysql -u root --password='PASS' database < backup_file.sql
Эта команда загружает файл backup_file.sql, находящийся в папке /root/, в базу с названием database. Загрузка произойдёт от лица пользователя root с паролем PASS.
Загружал дамп из-под root пользователя, чтобы не было проблем. Но ошибался. Оказалось, что в дамп сохраняются не только данные базы, но и её название. Если в файл backup_file.sql была сохранена база с названием "db", то данные не будут загружены в базу с названием "database". Что противоречит логике команды, ведь база назначения указана явно:
... database < backup_file.sql
Вместо этого будет создана пустая база "db" (её название на старом сервере). И все данные будут загружены в неё.
Решение №1 (через колено)
Теперь для загрузки дампов в базу пользуюсь другой командой. И не запускаю её из-под root пользователя базы. Выглядит команда так:
source /root/backup_file.sql
Главное - легко запомнить. Но для правильной загрузки надо войти в консоль MySQL не через root пользователя. А через пользователя той базы, в которую будем загружать дамп. У этого пользователя не должно быть возможности создавать новые базы. MySQL будет некуда деваться - придётся загружать всё в текущую базу, а не создавать новую.
Решение №2 (изящное)
Есть ещё один способ решить проблему. Откройте файл backup_file.sql в обычном текстовом редакторе. На первых 30 строчках найдёте ~3-4 упоминания своей старой базы "db":
Database: db
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `db` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;
USE `db`;
Замените все db на нужное название базы на новом сервере и сохраните файл. Теперь можно загружать дамп в базу из-под root любой командой. И всё будет пучком 😉
P.S.
Возможно, неправильно пользуюсь первой командой. Но мне она не нравится - постоянно забываю как её писать. А запомнить "source путь" намного легче.