В последнее время мне несколько раз приходилось переносить mysql-server на другую машинку.
Сначала я пытался выпендриваться с mk-show-grants, созданием дампов и прочего…. Ерундой занимался, проще говоря.
Имеем:
1 сервер с FreeBSD, с установленным на него mysql-server. Ещё 1 — с дебианом. На него нужно перенести все базы, со всеми грантами и прочими штуками. Репликации никуда нет.
Ставим на обоих серверах rsync (aptitude install rsync и cd /usr/ports/net/rsync && make install clean для freebsd).
Ставим на debian mysql:
root@debian:~# apt-get install mysql-server mysql-client
По доброте душевной я ставил mysql 5.1, а на freebsd был 5.0. Пока что проблем из-за этого не нашел, но если всплывут — можно будет откатить версию.
Выключаем его пока что:
root@debian:~# /etc/init.d/mysql stop
Делаем на всякий случай бэкап старого каталога:
root@debian:~# mv /var/lib/mysql /var/lib/mysql.bak && mkdir /var/lib/mysql
Синкаем базы, гранты и прочее (на примере freebsd). Команду я привел с тем рассчетом, что вы её выполняете на том сервере, на котором запущен старый mysql.
root@freebsd:~# rsync -avzP /var/db/mysql/ root@debian:/var/lib/mysql/
После того, как закончится первая синхронизация — останавливаем старый mysql и делаем ещё одну:
root@freebsd:~# /usr/local/etc/rc.d/mysql-server stop && rsync -avzP /var/db/mysql/ root@debian:/var/lib/mysql/
Теперь топаем на новый сервер и готовимся там к запуску нового mysql сервера со старыми данными:
root@debian:~# chown -R mysql:mysql /var/lib/mysql && mkdir /var/log/mysql && chown -R mysql:mysql /var/log/mysql
Запускаем его:
root@debian:~# /etc/init.d/mysql start
mysql поругается на то, что учетка debian-sys-maint не существует или указан неверный пароль, но запустится. Это легко исправить.
Если вы переносили старый mysql с debian-сервера — то просто скопируйте файлик /etc/mysql/debian.cnf со старого сервера на новый.
Если вы переносили с freebsd или чего то редхатоподобного — то:
root@debian:~# dpkg-reconfigure mysql-server-5.0
или
root@debian:~# dpkg-reconfigure mysql-server-5.1
(в зависимости от того, что вы ставили)
Это пересоздаст его учетку, но оставит в покое остальные учетки и базы.
Есть и другой вариант, если вы всё же не уверены, что так ничего не поломается, в консоли mysql:
mysql> GRANT RELOAD, SHUTDOWN, PROCESS, SHOW DATABASES, SUPER, LOCK TABLES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'somepassword';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'somepassword' WITH GRANT OPTION;
somepassword замените на адекватный пароль, новый пароль впишите в файл /etc/mysql/debian.cnf (там 2 строки с паролем).
Я, правда, так и не нашел весомых причин держать включенной эту учетку… Ну раз уж мейнтейнеры так решили — то пусть. Не забывайте следить за chmod/chown для файла с его паролем.
Вот и всё. Mysql работает, жужжит, радуется.
Комментариев пока нет.