Иногда, бывает так, что железо устаривает, машина начинает тормозить, доступ к ней усложняется, а апгрейд просто не пройдёт, в такой ситуации может спасти только новый сервер.
А новый сервер означает, что нужен будет перенос всех важных данных со старого сервера. MySQL данные относятся именно к таким. Перенести бекап баз не составит большого труда, а вот если нужно перенести всех пользователей и их привилегии – задача становится труднее. И эту задачу мы постараемся сегодня решить.
Итак, в этой статье мы полностью перенесём все MySQL данные со старого сервера на новый.
Основная функция системы привилегий MySQL (которые хранятся в таблице mysql.user) это авторизация пользователей, которые присоединяются с выделенного им хоста и ассоциация этих пользователей с привилегиями на базы данных (SELECT, INSERT, UPDATE, и DELETE).
Что нам нужно сделать
1 |
+——-+
| db1 | ————————-> -+
+——-+
Старый Mysql сервер
(192.168.0.8)
+——+
| db2 | —————> ——-+—-> Интернет (Роутер провайдера)
+——+
Новый Mysql сервер
(192.168.0.10)
+——+
| Веб1| ————————-> -+
+——+
Apache Веб сервер
(192.168.0.12)
|
Как видно из схемы, нам нужно перенести все MySQL данные, включая пользователей и их привилегии, с сервера db1 на сервер db2.
Установим MySQL на db2
Конечно, пути установки MySQL зависят от используемого дистрибутива. Я люблю Gentoo Linux:
1 |
#Вы должны быть «под» root’ом
emerge -av mysql
rc-update add mysql default
|
Сразу ставим пароль для root’а
1 |
mysqladmin -u root password NEWPASSWORD
|
Ну, если Вы вдруг используете одну из систем семейства Ubuntu, то Ваш листинг установки будет следующий:
1 |
sudo apt-get install mysql-server mysql-client
sudo service mysql start
# Сразу ставим пароль для root’а
mysqladmin -u root password NEWPASSWORD
|
Тоже ничего сложного.
Получаем текущие данные MySQL: Пользователей, Хосты и привилегии
На сервере db1 выполняем следующую команду:
1 |
mysql -u root -B -N -p -e «SELECT user, host FROM user» mysql
|
Вывод этой команды будет примерно таким:
1 |
bloger 192.168.0.5
Kicker 192.168.0.5
Katya 192.168.0.7
Pavel 192.168.0.12
root localhost
db1.logi.cc
root db1.logi.cc
|
Первая колонка – это имена пользователей, вторая хосты. Теперь, для того чтобы узнать привилегии пользователей используйте следующую команду:
1 |
mysql -u root -p -B -N -e»SHOW GRANTS FOR ‘userName’@hostName»
|
Вместо userName подставляем имя пользователя, а вместо hostName соответственно его хост. Например:
1 |
mysql -u root -p -B -N -e»SHOW GRANTS FOR ‘Pavel’@192.168.0.12″
|
Вывод команды будет такой:
1 |
GRANT USAGE ON *.* TO ‘Pavel’@192.168.0.12’ IDENTIFIED BY PASSWORD ‘какойнитьпарольвMd5’
GRANT ALL PRIVILEGES ON `sitedb`.* TO ‘Pavel’@192.168.0.12’
|
Где,
- Pavel – Имя пользователя MySQL
- 192.168.0.12 – IP адрес хоста, который имеет доступ к MySQL серверу
- какойнитьпарольвMd5 – Пароль пользователя в MD5 шифровании
- sitedb – Имя базы данных, к которой пользователь имеет полные привилегии
Теперь нам известна вся нужная информация, и мы можем начать перенос с сервера db1 на сервер db2. Делать мы это будем при помощи SSH:
1 |
ssh user@db2 mysql -u root -p’password’ -e «create database IF NOT EXISTS sitedb;»
ssh user@db2 mysql -u root -p’password’ -e «GRANT USAGE ON *.* TO ‘Pavel’@’192.168.0.12’ IDENTIFIED BY PASSWORD ‘какойнитьпарольвMd5’;»
ssh user@db2 mysql -u root -p’password’ -e «GRANT ALL PRIVILEGES ON `sitedb`.* TO ‘Pavel’@’192.168.0.12’;»
mysqldump -u root -p’password’ -h ‘localhost’ sitedb| ssh user@db2 mysql -u root -p’password’ sitedb
|
Теперь можно протестировать проделанную работу с машины Веб1:
1 |
mysql -u Pavel -h 192.168.0.10 -p sitedb -e ‘show tables;’
|