Так случилось, что разработчики разрабатывают прямо наживую, что кончается не очень хорошо. Было решено делать резервные копии 2 раза в сутки и один раз ночью. Понятно, что если я буду делать дампы посреди рабочего дня, работать с базой никто не сможет работать. Поэтому решено было сделать зеркальные сервера, с которых собственно я уже и буду снимать копии.
Я поддерживаю 2 достаточно нагруженных и емких сервера MySQL. Дамп одного из них имеет размер 14Gb, второй 6Gb. Базы частично в innodb. Так случилось, что разработчики разрабатывают прямо наживую, что кончается не очень хорошо. Было решено делать резервные копии 2 раза в сутки и один раз ночью. Понятно, что если я буду делать дампы посреди рабочего дня, работать с базой никто не сможет работать. Поэтому решено было сделать реплику сервера, с которой собственно я уже и буду снимать копии. Приступим...
1. Создадим пользователя, который будет иметь право делать репликацию сервера баз данных. В консоли MySQL делаем:
GRANT FILE ON *.* TO repl@"%" IDENTIFIED BY ''; FLUSH PRIVILEGES;2. Делаем дамп севрера.
mysqldump -u grand_user -p --single-transaction --all-databases > dump.sqlМожно делать репликацию только определенных баз данных. Если вам не нужно все зеркалировать, то дамп соответственно нужен только того что нужно. Каламбур какой получился =)
3. Настроим мастер:
[mysqld] slave-compressed = 1 включает компрессию log-bin=/var/db/mysql/mysql-bin.000001 innodb_flush_log_at_trx_commit=1 sync_binlog=1Дописываем, если нужно зеркалировать только определенные базы
binlog-do-db=<база1> binlog-do-db=<база2> server-id=14. Перезапускаем сервер.
Теперь займемся зеркалом: 1. Настроим сервер:
master-user=repl master-host=ip master-password=123 master-port=3306 server-id=2Дописываем, если нужно зеркалировать только определенные базы:
replicate-do-db=<база1>И перезапустим.
replicate-do-db=<база2>
2. В консоли севрера:
CHANGE MASTER TO MASTER_HOST='ip', MASTER_USER='repl', MASTER_PASSWORD='123', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=3;3. В консоли сервера:
START SLAVE;4. Смотрим результат. В консоли сервера:
SHOW SLAVE STATUS\GВыведется столбик с значениями и параметрами:
Slave_IO_State: Waiting for master to send event [... skipped ...] Last_IO_Errno: 0 [... skipped ...]Значит все в порядке.
Ну и как всегда, если может возникнуть проблема, она возникнет у меня. Я получил вот такую ошибку:
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’
Получал ещё вот такую ошибку:
Error reading packet from server: Access denied; you need the REPLICATION SLAVE privilege for this operation ( server_errno=1227)
PS: Стоит упомянуть, что зеркалирование можно использовать для балансироваки нагрузки. Или, например, есть тяжелый и медленный запрос, его можно выполнять на реплике. Разумеется заметка будет развиваться, потому что можно зеркалировать master-manyslave, master-master. Вообщем, мне в различных проектах это также нужно.
Комментарии (0)
Добавление комментариев закрыто.