Настройка репликации master-slave в MYSQL

02.07.2016
Если нужно синхронизировать несколько баз MySql, то так чтобы одна база была основной, а другая полностью ее копировала, то эта заметка для Вас.

Действия делятся на те, которые нужно выполнить на Матере (основной базе, с который будет сниматься корпия) и на те, которые нужно делать на Слейве (в данном примере рассматривается, что копия у нас будет только одна, но на практике их может быть несколько).

На Мастере

  1. Нужно в конфигурационный файл mysql (/etc/my.cnf) в секцию "mysqld" добавить:

     
    [mysqld]
    bind-address = 0.0.0.0
    log_bin
    server_id = 1
    expire_logs_days = 5
    max_binlog_size = 1000M
    binlog_do_db = db_test1
    binlog_do_db = db_test2
    

    - где db_test1 и db_test2 названия баз, которые нужно реплицировать
  2. Далее нужно, через консоль, добавить пользователя slave:

     
    GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'PASSWORD';
    FLUSH PRIVILEGES;
    

    - PASSWORD нужно указать свой
  3. Затем блокируем таблицы и получаем информацию для репликации. Важно: эти данные нам понадобятся на Слейве.

     
    FLUSH TABLES WITH READ LOCK;
    SHOW MASTER STATUS;
    

    – будет выведено что-то похожее на:

     
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |      113 | db_test1, db_test2 |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    

  4. Делаем дамп:

     
    mysqldump -p --single-transaction --quick --lock-tables=false --insert-ignore --all-databases > data-for-replica.sql
    

  5. Снимаем блокировку:

     
    UNLOCK TABLES;
    

  6. Далее нужно перенести дамп на Слейв. Например, так:

     
    scp data-for-replica.sql.gz USER@192.168.1.2:/home
    

Теперь переходим к настройке Слейва

  1. Добавляем в my.cnf:

     
    server_id = 2
    

  2. Заливаем дамп:

     
    mysql -p < data-for-replica.sql
    

  3. Включаем репликацию (команды выполняются из консоли mysql ):

     
    CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='slave', MASTER_PASSWORD='PASSWORD', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=102;
    START SLAVE;
    

    где master_ip – IP сервера с которого будут скачиваться данные. PASSWORD – пароль для пользователя slave, который задавали в пункте 2 первой части. Данные для mysql-bin.000001 и 113 нужно брать из шага 3 первой части.
  4. Проверяем, все ли работает:

     
    SHOW SLAVE STATUS\G
    


Категории: SQL
Яндекс.Метрика