КакЭто: Перенос MySQL баз и пользователей на новый сервер

Иногда, бывает так, что железо устаривает, машина начинает тормозить, доступ к ней усложняется, а апгрейд просто не пройдёт, в такой ситуации может спасти только новый сервер.

Полный перенос данных Mysql с одного сервера на другой А новый сервер означает, что нужен будет перенос всех важных данных со старого сервера. MySQL данные относятся именно к таким. Перенести бекап баз не составит большого труда, а вот если нужно перенести всех пользователей и их привилегии — задача становится труднее. И эту задачу мы постараемся сегодня решить.

Итак, в этой статье мы полностью перенесём все MySQL данные со старого сервера на новый.


Основная функция системы привилегий MySQL (которые хранятся в таблице mysql.user) это авторизация пользователей, которые присоединяются с выделенного им хоста и ассоциация этих пользователей с привилегиями на базы данных (SELECT, INSERT, UPDATE, и DELETE).

Что нам нужно сделать

Как видно из схемы, нам нужно перенести все MySQL данные, включая пользователей и их привилегии, с сервера db1 на сервер db2.

Установим MySQL на db2

Конечно, пути установки MySQL зависят от используемого дистрибутива. Я люблю Gentoo Linux:

Сразу ставим пароль для root’а

Ну, если Вы вдруг используете одну из систем семейства Ubuntu, то Ваш листинг установки будет следующий:

Тоже ничего сложного.

Получаем текущие данные MySQL: Пользователей, Хосты и привилегии

На сервере db1 выполняем следующую команду:

Вывод этой команды будет примерно таким:

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

Вместо userName подставляем имя пользователя, а вместо hostName соответственно его хост. Например:

Вывод команды будет такой:

Где,

  • Pavel — Имя пользователя MySQL
  • 192.168.0.12 — IP адрес хоста, который имеет доступ к MySQL серверу
  • какойнитьпарольвMd5 — Пароль пользователя в MD5 шифровании
  • sitedb — Имя базы данных, к которой пользователь имеет полные привилегии

Теперь нам известна вся нужная информация, и мы можем начать перенос с сервера db1 на сервер db2. Делать мы это будем при помощи SSH:

Теперь можно протестировать проделанную работу с машины Веб1:

Простой скрипт для миграции MySQL базы данных

Скрипт для Миграции базы данных MySQL

В архиве присутствует файл readme.txt, в нём описана работа и требуемые настройки скрипта.

Комментариев: 6
  1. linux0id

    Не столкнувшись с проблемой переноса баз данных вплотную — даже не мог себе представить, что в MySQL, фактически, — НАЧИСТО отсутствует штатный механизм переноса привилегий пользователей!
    P.S. До этого, считал MySQL довольно-таки приличной СУБД, которая подходит для большинства задач, а теперь — хочется плеваться.

  2. logi (автор)

    Ну, привилегии переносятся не каждый день…
    Так что можно и потерпеть :)

  3. ololo

    *** Getting info about blabla…
    и висим

  4. ololo

    разобрался, скопипастил в файл неудачно)

    а вот ошибка уже при импорте на удаленном вылезла
    ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘GRANT ALL PRIVILEGES ON user\\_number2.* TO ‘user_number2’@’%’

    1. Atakajlo

      Три года прошло с момента публикации статьи, а как пригодилась сегодня. Столкнулся с такой же бедой как и у тебя, понятно что для тебя это уже неактуально, но может быть кто-то еще найдет эту статью и попадет на те же грабли :)
      Вот подправленный вариант, мб кому и пригодится :)

      http://thelinuxforce.org/upload/files/MysqlMigrate_v2.rar

  5. Haosame

    Можно копировать папку /var/lib/mysql целиком, предварительно остановив mysql на обоих серверах. Если баз огромная куча, будет быстрее.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: