Для того, чтобы организовать репликацию между двумя MySQL-серверами необходимо:
На master-сервере
1) Включить binarylog, если он еще не включён и назначить master-серверу идентификатор (server-id). Для этого в my.cnf добавить и перегрузить:
log-bin=/var/db/mysql/srv011-bin.log
server-id = 1
2) Создать пользователя с правами:
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY '';
FLUSH PRIVILEGES;
3) Заблокировать требуемые таблицы на время dump’а. Во время блокировки также необходимо посмотреть текущее состояние в binary логе
mysql> FLUSH TABLES WITH READ LOCK;
mysql> show master status;
+-------------------+----------+--------------+------------------+
File Position Binlog_Do_DB Binlog_Ignore_DB
+-------------------+----------+--------------+------------------+
srv011-bin.000813 1156293
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
4) Сделать dump требуемых таблиц и снять блокировку
mysqldump -u root -p test_db > /root/test_db.db
mysql> UNLOCK TABLES;
На slave-сервере
1) Указать, где находится master-сервер и какие конкретно базы (таблицы) следует реплицировать. Для этого в my.cnf добавить:
max-user-connections=50
master-host=212.122.238.32
master-user=slave_user
master-password=v9X8Ds4
server-id= 2
replicate-do-db=test_db
replicate-do-table=test_db.wiz_data
replicate-do-table=test_db.wiz_main
2) Указать “отправную точку”, с которой следует начать репликацию данных.
mysql> CHANGE MASTER TO MASTER_LOG_FILE='srv011-bin.000813';
Query OK, 0 rows affected (0.05 sec)
mysql> CHANGE MASTER TO MASTER_LOG_POS=1156293;
Query OK, 0 rows affected (0.05 sec)
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 212.122.238.32
Master_User: slave_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: srv011-bin.000813
Read_Master_Log_Pos: 1156293
Relay_Log_File: relay.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: srv011-bin.000813
Slave_IO_Running: No
Slave_SQL_Running: No
Replicate_Do_DB: test_db
Replicate_Ignore_DB:
Replicate_Do_Table: test_db.wiz_main,test_db.wiz_data
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1156293
Relay_Log_Space: 4
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: NULL
1 row in set (0.00 sec)
3) Инициировать репликацию
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 212.122.238.32
Master_User: slave_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: srv011-bin.000813
Read_Master_Log_Pos: 1174592
Relay_Log_File: relay.000001
Relay_Log_Pos: 18347
Relay_Master_Log_File: srv011-bin.000813
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test_db
Replicate_Ignore_DB:
Replicate_Do_Table: test_db.wiz_main,test_db.wiz_data
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1174592
Relay_Log_Space: 18347
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
1 row in set (0.00 sec)