У меня база данных Abills весит почти гигабайт и делать ее резервную копию на живом сервере – значит залочить таблицы минут на 30-40. В результате в это время никто зайти не может и статистика теряется.
Было принято решение организовать еще один MySQL сервер с репликацией с основного и делать бекап баз с него. Итак начнем. Ставим на другом сервере MySQL:
sudo apt-get install mysql-server
Настраиваем основной сервер для репликации
В конфиге /etc/mysql/my.cnf в раздел [mysqld] добавляем
log-bin
server-id=1
Теперь заводим пользователя для репликации баз на основном сервере:
mysql –u root-p
> GRANT REPLICATION SLAVE ON *.* TO repl@”%” IDENTIFIED BY ‘<yourpassword>’;
mysqladmin -u root -p shutdown
Теперь собираем все базы, с сервера в архив и запускаем MySQL сервер:
tar -cvf /tmp/mysql-snapshot.tar /var/lib/mysql
/etc/init.d/mysql start
Копируем архив каким-либо способом на резервный сервер и распаковываем его там в то же место. Далее смотрим пароль для пользователя debian-sys-maint в /etc/mysql/debian.cnf на основном сервере и копируем его на резервный.
Теперь на резервном сервере в конфиг /etc/mysql/my.cnf добавляем строки:
master-host=
master-user=
master-password=
master-port=
server-id=
В данном случае server-id ДОЛЖЕН ОТЛИЧАТЬСЯ от master-server. Т.е. от 2-х и выше.
Перезапускаем резервный MySQL сервер и проверяем пошла ли у нас репликация.
/etc/init.d/mysql restart
mysql –u root –p
> SHOW SLAVE STATUS;
Мы должны увидеть нечто вроде этого:
Waiting for master to send event…
Если Вы это видите, то все нормально. Если же нет, то в логах Вы увидите причину.
Теперь можно делать бекапы баз на резервном сервере не затрагивая основного.