У нас должно быть 2 mysql сервера: master и slave
В my.cnf на master пишем и рестартим mysql
[mysqld]
bind-address = 0.0.0.0
log_bin
server_id = 1
expire_logs_days = 5
max_binlog_size = 1000M
binlog_do_db = our_database1
binlog_do_db = our_database2
Затем заходим в mysql консоль на master и задаем доступ для slave
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'password_for_slave';
FLUSH PRIVILEGES;
Теперь нужно сделать дамп master
Заходим в mysql консоль и блокируем таблицы
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
В ответ должны получить примерно следующее
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 102 | our_database1, our_database2 | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
Теперь спокойно снимаем дамп
mysqldump -u root > db.sql
Заходим в консоль mysql и снимаем блокировку
mysql> UNLOCK TABLES;
Теперь загрузим дамп на slave
rsync --inplace -arvlt --stats --progress -e 'ssh -p 22' /home/db.sql root@slave_ip:/home/db.sql
На этом действия с master закончились, переходим к slave.
На slave сервере редактируем my.cnf
[mysqld]
server_id = 2
Перезапускаем slave, заливаем дамп с мастера
mysql -u root < db.sql
Включаем репликацию (MASTER_LOG_FILE и MASTER_LOG_POS берутся из команды SHOW MASTER STATUS на мастере после блокировки таблиц)
mysql> CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='slave', MASTER_PASSWORD='password_for_slave', MASTER_LOG_FILE='localhost-bin.000001', MASTER_LOG_POS=102;
mysql> START SLAVE;
Проверка репликации
mysql> SHOW SLAVE STATUS\G