воскресенье, 1 декабря 2013 г.

Интсрукция настройки репликации на mysql

1) master my.cnf(my.ini )
[mysqld]
log-bin=mysql-bin
server-id=1

innodb_flush_log_at_trx_commit=1
sync_binlog=1

# skip-networking
# bind-address          = 127.0.0.1 # разрешаем конектиться не только с локального хоста

service mysql restart
2) slave my.cnf(my.ini ):
[mysqld]
server-id=2



3) master
mysql> CREATE USER 'repl'@'54.194.86.12' IDENTIFIED BY '123456';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'54.194.86.12' IDENTIFIED BY '123456';
use repltest;
FLUSH TABLES WITH READ LOCK; # блокируем на запись таблицы, чтобы обеспечить целосность данных между слейвом и мастером
SHOW MASTER STATUS; # позволяет увидеть поточный файл бинарного лога и позицию курсора в нем - эти данные нужно запомнить, чтобы ввести на слейве, чтобы он понимали с какого места начать синхронизацию
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |      1241 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
# теперь важно, не закрывать этот шел, ведь тогда блокировка таблиц будет отпущена
# и наконецто мы можем сделать дамп с мастера

4) master
mysqldump -uroot -p****** --opt repltestdb > dump.sql
--opt включает: --add-drop-table, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick, и --set-charset
Этот ключ обычно включен по умолчанию и его можно не вводить, но если мы не знаем, кто и как изменил настройки утилиты дампа, можем ключать его явно

=========================================
Есть также вариант не запоминать позицию в бинарном логе и в ручную не блокировать таблицы
Мы можем сделать дамп с ключем --master-data , он блокирует таблицы на запись
на время деланья дампа, а также добавляет в дамп команду для слейва
сохранения имени файла бинарного лога и позиции в нем, так это запишется в слейв при заливке дампа
mysqldump -uroot -p****** --master-data repltestdb > dump.sql
==============================================

Если база жирная, то тогда придется делать снимок сырых файлов.
5) master
Пусть мастер дальше живет нормальной жизнью, все его изменения реплика может подгрузить попозже, главное нам есть от чего оттолкнуться и мы запомнили эту позицию
UNLOCK TABLES;
quit;

6) slave
Теперь нужно настроить реплику, где искать мастера, а также с какой позиции в бинарних логах начинать обеспечивать целосность(последний шаг не нужен если мы взяли дамп с помщью mysqldump --master-data)
CHANGE MASTER TO
    MASTER_HOST='54.194.97.98',
    MASTER_USER='repl',
    MASTER_PASSWORD='123456',
    MASTER_CONNECT_RETRY=60,# in seconds
    MASTER_LOG_FILE='mysql-bin.000004',# не нужно если дамп из --master-data
    MASTER_LOG_POS=1241;# не нужно если дамп из --master-data
============================================
Существует три варианта формата бинарных логов(для мастера и наверно для логов репилики тоже mysqld-relay-bin.000003):
1) statement-based replication (SBR)
2) row-based replication (RBR)
3) mixed-format logging
 Первый в виде скуель, поэтому удобен для чтения человеком.
 Второй меньше по размеру - быстрее передается и занимает меньше места на диске.
 Этот вид позволяет переключаться от одного у другому в режиме реального времени, в зависимости от событий.
 ============================================
7) slave
начать процес реплицирования
START SLAVE;

8) slave
Узнать состояние репликации
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 54.194.97.98
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 963
               Relay_Log_File: mysqld-relay-bin.000004
                Relay_Log_Pos: 1109
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 963
              Relay_Log_Space: 1309
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
1 row in set (0.00 sec)

Комментариев нет:

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