Репликация MySQL на одном сервере

Привет, администраторы!

Попалась любопытная задача, сделать репликацию одной базы в другую на том же самом сервере. Решение нашлось.  Забавное. Привожу дополнено и по-русски:

Дано:

MySQL сервер (у меня он на Ubuntu, но тут, пожалуй не важно) — одна штука, база данных base1.

Надо:

Сделать репликацию базы на том же самом сервере, не запуская дополнительных процессов, в базу base2.

Решение:

Копируем base1 в base2, каким угодно способом, это ваше начальное состояние, после этого base1 не должна меняться.

Настраиваем [mysqld] секцию в /etc/mysql/my.cnf, добавив:

...
server-id=1
report-host=master-is-slave-host
log-bin=myserver-binlog
relay-log=myserver-relaylog
replicate-same-server-id=1
binlog-do-db=base1
replicate-rewrite-db=base1->base2
replicate-do-db=base2
...

После этого следует перезапустить сервер и можно увидеть, что binlog начал писаться:

# service mysql restart
...
# ls /var/lib/mysql/myserver*
myserver-binlog.000001

Выдыхаем, запускаем работу вашего приложения с base1, теперь можно.

Осталось запустить репликацию, выполняем админом в базе:

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'localhost' IDENTIFIED BY 'CoolPassW0rd';
FLUSH PRIVILEGES;
CHANGE MASTER TO MASTER_HOST='localhost', MASTER_USER='repl',
    MASTER_PASSWORD='CoolPassW0rd', MASTER_LOG_FILE='myserver-binlog.000001';
START SLAVE;

И для контроля, что всё ок, посмотрите, что выдают:

SHOW MASTER STATUS;
SHOW SLAVE STATUS;

Типа всё. Согласен получить комментарии по теме!

комментария 4 »07.02.2012 17:58:30 | Ubuntu, Делаю | , ,

Комментарии

  1. _:

    Только настраиваем [mysqld] а не mysql]

  2. Олег:

    Привет!
    Спасибо за статью — очень полезный материал.
    Но у меня возникла еще более неординарная задача: мастер и НЕСКОЛЬКО слэйвов на одном сервере — что только не перепробывал, но изменения мастера реплецируются только на первый указанный слэйв.
    Подскажите, как это реализовать, если кто сталкивался с такой задачей?

  3. Это не к теме но как специалиста хочу спросить
    А что нового для мускула и РНР Вы обнаружили на 12-версии
    Например что нового по апстарту ниже даю скрин

    root@orion-15:/home/sokrat# /etc/init.d/mysql stop
    Rather than invoking init scripts through /etc/init.d, use the service(8)
    utility, e.g. service mysql stop

    Since the script you are attempting to invoke has been converted to an
    Upstart job, you may also use the stop(8) utility, e.g. stop mysql
    mysql stop/waiting

    root@orion-15:/home/sokrat# service mysql start
    mysql start/running, process 14660

    В чем принципиальная разница теперь в работе с сервисами (в данном примере-мускул)
    по механизмам запуска
    /etc/init.d/ и service
    И вообще что такого принципиального в UPstart-1.5 и что за зверь теперь Upstart job
    Заранее спасибо за Ваши соображения по этому поводу
    Борис.
    P.S. сайт домашний на DynDns так что может простаивать 🙂

Оставить комментарий